Démon hlási zlyhanie chroot a profil už vyzerá štedro, takže lákavou opravou je rozšíriť pravidlo pre cestu a reštartovať. Zvyčajne to nič nezmení, pretože chroot je viazaný na oprávnenie, ktoré profil nikdy nemohol odovzdať. Rozhodnutie, ktorej vrstvy sa dotknúť, si vyžaduje tri kontroly a tie sú lacné: čo smie proces držať, čo dovoľuje politika a čo odstránil spúšťač skôr, než na týchto dvoch záležalo.

Dve oddelené brány a iba jedna patrí AppArmoru

chroot potrebuje CAP_SYS_CHROOT v používateľskom mennom priestore, v ktorom proces beží. Je to bežné oprávnenie Linuxu, ktoré jadro overuje skôr, než volanie čokoľvek urobí s cestami. Oddelene od toho môže vynucujúci profil AppArmor odmietnuť schopnosť aj vtedy, keď ju proces má, pretože povinná politika sa zohľadňuje popri povereniach, nie namiesto nich. Rozdiel je v praxi dôležitý: obe vrstvy žijú v iných súboroch a zvyčajne ich udržiavajú iní ľudia.

Obe tieto brány zlyhávajú s rovnakým errno. Obe produkujú EPERM a obe sa v logu démona prejavia ako všeobecná sťažnosť na povolenie, preto hádanie obsahu profilu stráca toľko času. Pravidlo pre cestu, ktoré ste sa chystali pridať, riadi prístup k súborom až po úspešnom chroot; na to, či je operácia vôbec povolená, nemá vplyv.

Tretia brána stojí pred oboma. Ak správca služieb alebo obal spustil proces bez tejto schopnosti v jeho hraničnej množine, žiadna zmena AppArmoru ju nevráti a pridávanie schopností do profilu len dokumentuje zámer, ktorý jadro nesplní.

Pred úpravou politiky si prečítajte stav oprávnení

Začnite od bežiaceho procesu, nie od konfigurácie, o ktorej si myslíte, že je aktívna. Stavový súbor zobrazuje päť masiek schopností a príznak no-new-privileges a tie odpovedajú na rôzne otázky:

grep -E '^(CapInh|CapPrm|CapEff|CapBnd|CapAmb|NoNewPrivs):' /proc/$(pidof openvpn)/status
sudo aa-status | grep -i openvpn

CapEff je množina, na ktorej záleží pri volaní: schopnosť prítomná v CapBnd, ale chýbajúca v CapEff, je povolená stropom a momentálne sa nedrží. CapAmb je dôležitá, keď binárka nie je privilegovaná v obvyklom zmysle setuid, pretože ambientné schopnosti sú spôsob, akým služba udrží oprávnenie cez exec bez súborových schopností. CapInh drží bity, ktoré by sa mohli dediť cez exec, ale iba keď to dedičná množina spúšťaného súboru dovoľuje, takže bit tam sám o sebe nič neudelí.

Potom overte, ktorý profil je skutočne pripojený. Proces môže byť obmedzený profilom s názvom, ktorý ste nečakali, najmä keď distribúcia dodáva svoju vlastnú jednotku a svoj profil spolu, a prečítanie /proc/PID/attr/current to vyrieši na jednom riadku. Porovnanie vášho upraveného súboru s profilom, ktorý hlási jadro, je rozdiel medzi opravou príčiny a úpravou súboru, ktorý nikto nenačíta.

Pridajte pravidlo schopnosti iba vtedy, keď to hovorí auditná stopa

Záznamy jadra a auditu pomenúvajú vrstvu, ktorá odmietla. Hľadajte zamietnutie s operáciou capable a názvom sys_chroot spolu s profilom, ktorý ho vytvoril. Ak taký záznam existuje, proces už schopnosť mal a AppArmor ju odmietol, a cielenou zmenou je pravidlo schopnosti v skutočnom profile:

capability sys_chroot,

Ponechajte ho ako fragment v profile, ktorý je skutočne pripojený, a overte kľúčové slovo v referencii profilov apparmor.d namiesto kopírovania pravidla z nesúvisiaceho návodu. Vloženie do zdieľaného include udelí právo každému obmedzenému programu, ktorý ten súbor načíta, a prepnutie profilu do režimu complain skryje ďalšie zamietnutie namiesto vyriešenia tohto. Pravidlo v profile odstraňuje zamietnutie politiky; nevytvára oprávnenie, takže proces, ktorý nikdy nemal CAP_SYS_CHROOT vo svojej efektívnej množine, bude zlyhávať aj s pravidlom na mieste.

Ak auditný záznam neukazuje vôbec žiadne zamietnutie AppArmoru, prestaňte upravovať profil. Máte pred sebou problém s povereniami a zostávajúca práca je v jednotke alebo v rodičovskom procese, nie v jazyku politiky.

Správca služieb si drží vlastný strop

systemd nastavuje pre každú službu hraničnú množinu schopností a tá je predvolene úzka. Čokoľvek je tam vylúčené, je pre proces nedostupné bez ohľadu na to, čo hovorí profil, preto môžu sprísnené jednotky zlyhať pri operácii, ktorá fungovala, keď sa démon spúšťal ručne. Príslušné direktívy sa v jednotke čítajú ľahko a ľahko sa prehliadnu, keď zlyhanie hlási samotná aplikácia. Drop-in súbory dodávané balíkom distribúcie sú obvyklým zdrojom stropu, o ktorom si nikto nepamätá, že ho nastavil.

Zvýšenie stropu a udelenie schopnosti sú dve zmeny, nie jedna. Záznam v hraničnej množine hovorí, že proces smie schopnosť držať; nepridáva ju do efektívnej množiny a NoNewPrivs môže zabrániť neskoršiemu povýšeniu, aj keď všetko ostatné sedí. Pridajte iba to, čo operácia potrebuje, zvyšok sprísnenia nechajte nedotknutý a odolajte skratke, ktorá udeľuje všetky schopnosti, aby jedno volanie prešlo.

Aj tu záleží na poradí. Najprv zmeňte strop jednotky, overte, že CapEff teraz obsahuje daný bit, a až potom rozhodnite, či AppArmor ešte odmieta. Ak urobíte obe zmeny naraz, pri pretrvávajúcom zlyhaní budete opäť hádať.

Keď zamietnutie zmizne, overte samotnú celu

Úspešný chroot presunie koreň, takže každá cesta, ktorej sa démon potom dotkne, sa vyhodnocuje v novom strome. Chýbajúca konfigurácia, neprítomný uzol zariadenia alebo adresár certifikátov, ktorý sa neskopíroval, sa teraz prejavia ako chyba súboru, a tá chyba je problémom rozloženia, nie schopnosti. Čítajte ďalšiu udalosť namiesto pridávania ďalšieho širokého povolenia. Presun mení aj význam relatívnej cesty, preto sa príručky na sprísnenie držia absolútnych ciest v konfigurácii démona.

Pomáha aj pamätať na to, čo chroot nerobí. Je to hranica ciest, nie sandbox: proces, ktorý si oprávnenie ponechá, z nej môže uniknúť, preto sa schopnosť zvyčajne po volaní zahadzuje a preto má obmedzenie zostať okolo démona. Ponechať pohromade profil AppArmor, hraničnú množinu schopností a obmedzenia súborového systému je zmyslom cvičenia, nie zvyškom na odstránenie po štarte služby.

Rozhodovacie pravidlo je krátke. Ak auditný záznam pomenúva AppArmor, pridajte jedno pravidlo schopnosti do pripojeného profilu. Ak je efektívna množina prázdna, opravte strop jednotky a poradie odovzdávania oprávnení. Ak profil nie je ten, ktorý ste upravili, prestaňte upravovať a nájdite ten skutočný.

Súvisiace články