Poarta de protecție a sistemului
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
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
| 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
| 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
| 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
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
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, 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ă
| 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
| 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
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.