Dēmons reģistrē chroot kļūmi, un profils jau izskatās dāsns, tāpēc vilinošais risinājums ir paplašināt ceļa noteikumu un restartēt. Tas parasti neko nemaina, jo chroot kontrolē privilēģija, kuru profils nekad nevarēja nodot. Lai izlemtu, kuram slānim pieskarties, vajadzīgas trīs lētas pārbaudes: ko procesam atļauts turēt, ko atļauj politika, un ko palaidējs noņēma pirms abiem kļūstot svarīgiem.

Divi atsevišķi vārti, un tikai vieni pieder AppArmor

chroot prasa CAP_SYS_CHROOT lietotājvārdu telpā, kurā darbojas process. Tā ir parasta Linux privilēģija, ko kodols pārbauda pirms izsaukums kaut ko dara ar ceļiem. Atsevišķi, uzlaušanas režīmā esošs AppArmor profils var liegt spēju arī tad, kad process to tur, jo obligātā politika tiek skatīta papildus akreditācijas datiem, nevis to vietā. Atšķirība praksē ir svarīga: divi slāņi dzīvo dažādos failos, un tos parasti uztur dažādi cilvēki.

Šie divi vārti neizdodas ar to pašu errno. Abi rada EPERM, un abi parādās kā vispārīga atļauju sūdzība dēmona žurnālā, tāpēc minēšana par profila saturu tērē tik daudz laika. Ceļa noteikums, ko grasījāties pievienot, kontrolē failu piekļuvi pēc tam, kad chroot izdodas; tam nav nekāda sakara ar to, vai darbība vispār ir atļauta.

Trešie vārti atrodas augstāk par abiem. Ja pakalpojumu pārvaldnieks vai ietvars palaida procesu bez spējas tā ierobežojošajā kopā, nekāda AppArmor izmaiņa to nevar atgriezt, un spēju pievienošana profilam tikai dokumentē nodomu, ko kodols neievēros.

Izlasiet privilēģiju stāvokli pirms politikas rediģēšanas

Sāciet ar darbojošos procesu, nevis ar konfigurāciju, ko uzskatāt par aktīvu. Stāvokļa fails atklāj piecas spēju maskas un no-new-privileges karodziņu, un tie atbild uz dažādiem jautājumiem:

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

CapEff ir kopa, kas svarīga izsaukumam: spēja, kas ir CapBnd, bet nav CapEff, ir atļauta ar griestiem un šobrīd netiek turēta. CapAmb ir svarīga, kad binārs nav privileģēts parastajā setuid nozīmē, jo vides spējas ir veids, kā pakalpojums saglabā privilēģiju pāri exec bez faila spējām. CapInh satur bitus, ko var mantot pāri exec, bet tikai tad, kad izpildāmā faila mantojamā kopa to atļauj, tāpēc tur esošais bits pats par sevi neko nedod.

Pēc tam pārliecinieties, kurš profils patiešām ir piesaistīts. Process var būt ierobežots ar profila nosaukumu, kuru negaidījāt, jo īpaši tad, kad distribūcija sūta savu unit failu un profilu kopā, un /proc/PID/attr/current nolasīšana to atrisina vienā rindā. Sava rediģētā faila salīdzināšana ar profilu, ko ziņo kodols, ir starpība starp cēloņa labošanu un faila rediģēšanu, ko neviens neielādē.

Pievienojiet spējas noteikumu tikai tad, kad audita pēdas to saka

Kodola un audita ieraksti nosauc atteikušo slāni. Meklējiet atteikumu, kam ir darbība capable un nosaukums sys_chroot, kopā ar profilu, kas to radīja. Ja šāds ieraksts pastāv, procesam spēja jau bija un AppArmor to noraidīja, un mērķētā izmaiņa ir spējas noteikums īstajā profilā:

capability sys_chroot,

Turiet to kā fragmentu profilā, kas patiešām piesaistīts, un pārbaudiet atslēgvārdu pret apparmor.d profilu uzziņu, nevis kopējiet noteikumu no nesaistītas apmācības. Ievietošana koplietotā include piešķir to ikvienai ierobežotai programmai, kas velk šo failu, un profila pārslēgšana uz complain režīmu paslēps nākamo atteikumu, nevis atrisinās šo. Profila noteikums noņem politikas atteikumu; tas nerada privilēģiju, tāpēc process, kura efektīvajā kopā nekad nav bijis CAP_SYS_CHROOT, neizdosies arī ar noteikumu.

Ja audita ieraksts vispār neuzrāda AppArmor atteikumu, pārtrauciet profila rediģēšanu. Jūs skatāties uz akreditācijas datu problēmu, un atlikušais darbs ir unit failā vai vecākprocesā, ne politikas valodā.

Pakalpojumu pārvaldnieks tur savus griestus

systemd katrai pakalpojumam nosaka spēju ierobežojošo kopu, un pēc noklusējuma šī kopa ir šaura. Viss, kas tur izslēgts, procesam nav pieejams, lai ko teiktu profils, tāpēc norūdītas unit vienības var neizdoties darbībā, kas strādāja, kad dēmons tika palaists ar roku. Attiecīgās direktīvas ir viegli nolasīt unit failā un viegli nepamanīt, kad lietojumprogramma ziņo par kļūmi. Izplatīšanas pakotnes piegādātie drop-in faili ir ierastais avots griestiem, ko neviens neatceras konfigurējis.

Griestu pacelšana un spējas piešķiršana ir divas izmaiņas, ne viena. Ierobežojošās kopas ieraksts saka, ka process drīkst turēt spēju; tas nepievieno to efektīvajai kopai, un NoNewPrivs var liegt vēlākai paaugstināšanai izdoties arī tad, kad viss pārējais sakrīt. Pievienojiet tikai to, kas darbībai vajadzīgs, saglabājiet pārējo norūdīšanu un pretojieties kārdinājumam piešķirt visas spējas, lai viens izsaukums izietu.

Arī secība šeit ir svarīga. Vispirms mainiet unit griestus, pārbaudiet, vai CapEff tagad satur bitu, un tikai tad izlemiet, vai AppArmor joprojām noraida. Abu izmaiņu veikšana uzreiz atkal atstāj jūs minējumos, ja kļūme turpinās.

Kad atteikums ir izzudis, pārbaudiet pašu cietumu

Veiksmīgs chroot pārvieto sakni, tāpēc katrs ceļš, kam dēmons pēc tam pieskaras, tiek atrisināts jaunajā kokā. Trūkstoša konfigurācija, neesošs ierīces mezgls vai nenokopēta sertifikātu direktorija tagad parādīsies kā faila kļūda, un šī kļūda ir izkārtojuma, nevis spējas problēma. Lasiet nākamo notikumu, nevis pievienojiet vēl vienu plašu atļauju. Pārvietošana maina arī relatīvā ceļa nozīmi, tāpēc norūdīšanas rokasgrāmatas uzstāj uz absolūtiem ceļiem dēmona konfigurācijā.

Palīdz arī atcerēties, ko chroot nedara. Tā ir ceļa robeža, nevis smilškaste: process, kas saglabā privilēģiju, var no tās izbēgt, tāpēc spēja parasti tiek nomesta pēc izsaukuma un tāpēc izolācijai jāpaliek ap dēmonu. AppArmor profila, spēju ierobežojošās kopas un failu sistēmas ierobežojumu turēšana kopā ir šī vingrinājuma mērķis, nevis atlikums, kas jānoņem, kad pakalpojums startē.

Lēmuma noteikums ir īss. Ja audita ieraksts nosauc AppArmor, pievienojiet vienu spējas noteikumu piesaistītajam profilam. Ja efektīvā kopa ir tukša, izlabojiet unit griestus un privilēģijas nomešanas secību. Ja profils nav tas, ko rediģējāt, pārtrauciet rediģēt un atrodiet īsto.

Saistītie raksti