# Poarta de protecție a sistemului (/ro/docs/agents/os-protection-gate)

De ce uneltele agentului refuză să ruleze cât timp UAC, SIP, Gatekeeper sau blocarea ecranului sunt oprite, fiecare verificare pe sistem, excepții, politica organizației și opțiunile CLI.

Uneltele agentului acționează asupra sistemului tău: rulează comenzi în shell, modifică fișiere, controlează aplicații și, pe Android, operează telefonul. Înainte ca oricare dintre ele să ruleze, fiecare suprafață codai verifică dacă **protecțiile minime** ale sistemului de operare sunt active. Cât timp o protecție obligatorie este oprită, uneltele agentului sunt dezactivate, iar agentul îți spune ce este oprit și cum repari. Chatul funcționează în continuare; se opresc doar uneltele.

Fiecare verificare are un nivel:

- **BLOCK** (afișat ca _Obligatoriu_) — cât timp eșuează, uneltele agentului sunt refuzate, cu excepția cazului în care ai acordat o excepție chiar pentru acea verificare.
- **WARN** (afișat ca _Recomandat_) — doar un banner; uneltele continuă să ruleze.

Suprafața se află într-una din patru stări: **ok** (nu eșuează nimic), **warn** (eșuează doar verificări WARN), **overridden** (fiecare verificare BLOCK care eșuează are o excepție validă — uneltele rulează sub un banner permanent) sau **block** (cel puțin o verificare BLOCK eșuează fără excepție validă — uneltele sunt dezactivate).

## Verificări [#verificări]

### Windows [#windows]

| Verificare             | Nivel | Ce înseamnă                                              | Cum se detectează                                                                                                         |
| ---------------------- | ----- | -------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- |
| `win.uac_off`          | BLOCK | Controlul contului de utilizator (UAC) este dezactivat   | `EnableLUA == 0` sub `HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System` (o valoare lipsă contează ca activ) |
| `win.uac_no_prompt`    | BLOCK | Acțiunile de administrator sunt aprobate fără confirmare | `ConsentPromptBehaviorAdmin == 0` cât timp UAC este activ și utilizatorul este administrator                              |
| `win.elevated`         | WARN  | codai rulează ca administrator                           | Tokenul procesului este ridicat cât timp UAC este activ                                                                   |
| `win.defender_rtp_off` | WARN  | Protecția în timp real Microsoft Defender este oprită    | `DisableRealtimeMonitoring == 1` în cheia de registru de politici sau de setări Defender                                  |

### macOS [#macos]

| Verificare           | Nivel | Ce înseamnă                                       | Cum se detectează                                  |
| -------------------- | ----- | ------------------------------------------------- | -------------------------------------------------- |
| `mac.sip_off`        | BLOCK | System Integrity Protection (SIP) este dezactivat | `csrutil status` raportează `status: disabled`     |
| `mac.gatekeeper_off` | BLOCK | Gatekeeper este dezactivat                        | `spctl --status` raportează `assessments disabled` |
| `mac.filevault_off`  | WARN  | Criptarea discului FileVault este oprită          | `fdesetup status` raportează `FileVault is Off`    |

### Linux [#linux]

| Verificare             | Nivel | Ce înseamnă                                 | Cum se detectează                                                                                                             |
| ---------------------- | ----- | ------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- |
| `linux.root`           | BLOCK | Uneltele agentului ar rula ca root pe gazdă | uid efectiv 0 în afara unui container (modul per utilizator al codaid, cu coborâre de privilegii verificată, este exceptat)   |
| `linux.root_container` | WARN  | Rulează ca root într-un container           | uid efectiv 0 cu marcaje de container (`/.dockerenv`, `/run/.containerenv`, cgroup-uri de container sau variabile Kubernetes) |
| `linux.sudo_nopasswd`  | WARN  | `sudo` funcționează fără parolă             | `sudo -n -k true` iese cu 0 pentru un utilizator non-root                                                                     |
| `linux.no_screen_lock` | WARN  | Ecranul nu se blochează                     | Doar în sesiuni desktop: `lock-enabled` din GNOME este `false`                                                                |

### Android și Wear OS [#android-și-wear-os]

| Verificare               | Nivel | Ce înseamnă                                                  | Cum se detectează                                                                          |
| ------------------------ | ----- | ------------------------------------------------------------ | ------------------------------------------------------------------------------------------ |
| `android.no_secure_lock` | BLOCK | Telefonul nu are blocare securizată a ecranului              | `KeyguardManager.isDeviceSecure()` este `false`                                            |
| `android.lock_unknown`   | WARN  | Starea blocării ecranului este necunoscută                   | mobile-agent în Termux nu poate citi starea blocării fără aplicație                        |
| `android.adb_enabled`    | WARN  | Depanarea USB sau opțiunile pentru dezvoltatori sunt pornite | `ADB_ENABLED` sau `DEVELOPMENT_SETTINGS_ENABLED` este `1`                                  |
| `android.rooted`         | WARN  | Dispozitivul pare să aibă root                               | În limita posibilităților: un binar `su` în căile uzuale sau etichete de build `test-keys` |
| `wear.no_secure_lock`    | BLOCK | Ceasul nu are blocare a ecranului                            | `KeyguardManager.isDeviceSecure()` este `false` pe ceas (doar banner, vezi mai jos)        |

O sondă care dă eroare nu raportează nimic, iar verificarea apare ca _Nu a putut fi verificat_: o eroare de detecție nu te blochează niciodată. Rezultatele sunt păstrate în cache cinci minute; **Verifică din nou** din Setări le rulează imediat.

## Excepție pentru o verificare [#excepție-pentru-o-verificare]

Dacă înțelegi riscul, deschide **Setări > Securitate** și alege **Permite totuși uneltele agentului** pe verificarea care eșuează. Excepția:

- acoperă **doar acea verificare** — o altă protecție care se oprește ulterior blochează din nou uneltele;
- durează **30 de zile**, după care verificarea blochează din nou până când o repari sau acorzi din nou excepția;
- păstrează un **banner de avertizare permanent** vizibil pe fiecare ecran cât timp este activă;
- este scrisă în **jurnalul de audit** (local și în contul tău, când ești autentificat);
- poate fi retrasă oricând cu **Revocă excepția**.

## Politica organizației [#politica-organizației]

Administratorii organizației pot interzice excepțiile din hub, la **Echipă > Securitate**. Câștigă regula cea mai strictă: dacă **oricare** organizație din care faci parte interzice excepțiile, nu poți acorda una, iar excepțiile existente nu mai contează. Clienții citesc politica din [`GET /v1/policy`](../api/gateway/os-gate.mdx), păstrează ultima valoare în cache și o folosesc și offline; înainte de prima citire, implicit excepțiile sunt permise. Opțiunile CLI de mai jos nu pot ocoli interdicția organizației.

## Linie de comandă [#linie-de-comandă]

| Comandă                                          | Efect                                                                                                                                    |
| ------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------- |
| `codaid run --allow-insecure-host`               | Acordă excepție pentru toate verificările BLOCK care eșuează, doar pentru acest proces (tot auditată, tot supusă politicii organizației) |
| `CODAI_ALLOW_INSECURE_HOST=1`                    | Același lucru pentru comenzile fără opțiune, de exemplu `codaid schedules executor`                                                      |
| `codaid os-gate status`                          | JSON cu starea, verificările care eșuează, blochează, au excepție sau avertizează, excepțiile și politica                                |
| `codaid os-gate grant <ids> --yes`               | Acordă excepție pentru verificările BLOCK listate, pe 30 de zile (fără `--yes` este o simulare care iese cu 2)                           |
| `codaid os-gate revoke <ids>`                    | Retrage excepțiile listate                                                                                                               |
| `codaid os-gate audit`                           | Jurnalul local de acordări și revocări, în format JSON                                                                                   |
| `codai-agent-headless run --allow-insecure-host` | Ridică poarta pentru acest proces headless (și pentru `once` și `desktop-session`); un avertisment apare în stderr                       |

Agentul headless nu are fișier de excepții și nu citește politica organizației: opțiunea lui este singura cale de a ridica blocarea, doar pentru acel proces.

## Ce suprafețe aplică poarta [#ce-suprafețe-aplică-poarta]

| Suprafață                                 | Uneltele agentului                                                    |
| ----------------------------------------- | --------------------------------------------------------------------- |
| Aplicația desktop (Windows, macOS, Linux) | Aplicată                                                              |
| `codai-agent-headless`                    | Aplicată                                                              |
| `codaid`                                  | Aplicată                                                              |
| Aplicația Android pentru telefon          | Aplicată                                                              |
| mobile-agent (Termux)                     | Aplicată                                                              |
| Wear OS                                   | Doar banner — ceasul nu rulează unelte ale agentului                  |
| Extensia VS Code                          | Doar avertisment în bara de stare — extensia nu rulează unelte locale |

Când o unealtă blocată este apelată, agentul primește rezultatul `BLOCKED: os_protection_gate`, nu mai încearcă unelte în acea tură și îți spune ce este oprit și cum repari.

## Confidențialitate [#confidențialitate]

Detecția rulează în întregime pe dispozitiv; nicio valoare din registru, niciun rezultat de comandă și niciun detaliu despre dispozitiv nu sunt trimise nicăieri. Când ești autentificat, singurul semnal de rețea este evenimentul de audit al excepției — dacă ai acordat sau ai revocat o excepție, id-urile verificărilor, aplicația, versiunea ei și ora — trimis la [`POST /v1/os-gate/events`](../api/gateway/os-gate.mdx).
