Dnevnik raste, ali se ne može ponovo stvoriti: provjerite ACL direktorija
Dodavanje u datoteku ne zahtijeva novo ime u njenom direktoriju, a stvaranje zahtijeva. Usporedite pristupni ACL s naslijeđenim zadanim vrijednostima prije nego što bilo šta proširite.
Dnevnik koji stalno raste prestaje rasti onog trenutka kada ga nešto ponovo stvori, a greška kaže permission denied. Primamljiv zaključak je da samoj datoteci dnevnika treba više dozvola, no datoteka možda već jeste upisiva za isti račun. Dodavanje postojećem imenu i stvaranje novog su različite provjere, a samo druga provjerava direktorij.
Dodavanje i stvaranje su različite provjere
Otvaranje postojeće datoteke za dodavanje zahtijeva pravo upisa na tu datoteku i pravo pretraživanja duž svakog direktorija na njenoj putanji. Stvaranje datoteke zahtijeva upis i pretraživanje u direktoriju koji je sadrži, jer operacija mu dodaje ime. Zamjena datoteke preko preimenovanja dotiče oba direktorija i njihova pravila sticky bita.
| Operation | What must permit it | Typical failure message |
|---|---|---|
| Append to an existing log | File write access, path traversal | Permission denied on the file |
| Create a missing log | Directory write and search access | Permission denied on the path |
| Rename a replacement into place | Both directories, plus sticky restrictions | Permission denied or operation not permitted |
Već otvoreni deskriptor dodaje četvrti slučaj. Proces može držati upisivu ručku otvorenu prije nego što se odrekao privilegija i ipak ne moći ponovo otvoriti istu putanju pod svojim kasnijim identitetom. Uspješna dodavanja i neuspjelo stvaranje mogu biti oboje tačni u istom trenutku za isti proces.
Zadani ACL se nasljeđuju, ne daju prava
Unos koji počinje zadanim prefiksom opisuje šta novi objekti nasljeđuju od direktorija. On ne daje ništa samom direktoriju i ne popravlja ACL datoteke koja već postoji.
namei -l /var/log/openvpn/server.log
getfacl -p /var/log/openvpn
getfacl -p /var/log/openvpn/server.log
Čitajte pristupne unose odvojeno od zadanim i čitajte masku. Imenovani unos koji navodi puna prava i dalje može biti ograničen maskom, zato je efektivni komentar važniji od slova u prvom redu.
Koristite razriješenu putanju umjesto putanje iz konfiguracije. Simbolička veza, tačka montiranja ili rotirani direktorij mogu staviti stvarnu datoteku tamo gdje dozvola koju ste dali nikada ne stiže. Prvo prođite putanju alatom za imena, zatim uporedite svaki nivo s dotičnim računom. Nagađanje na vršnom direktoriju je kako popravak sleti jedan nivo previsoko.
Utvrdite ko piše u tom trenutku
Provjerite servisnu jedinicu, njene drop-in datoteke i vlastite postavke računa demona prije nego što bilo šta promijenite. Proces koji dodaje i proces koji ponovo stvara mogu biti različiti: pomoćnik za rotaciju, pisac statusa i web čitač rijetko dijele identitet.
Probno pokretanje iz root ljuske ne reprodukuje ograničenu uslugu, i uspjet će dok usluga nastavlja padati. Reprodukujte neuspjelu operaciju pod istom jedinicom, s istim računom i istim postavkama sandboxa. Ako ne možete, pokrenite jedinicu s privremenom ljuskom i provjerite identitet koji prijavljuje. Sve drugo mjeri vaš terminal, a ne uslugu.
Ako je stvaranje zaista potrebno, dajte piscu pristup namjenskom direktoriju dnevnika, a pristup čitanja za potrošače držite odvojeno. Učiniti zajednički račun ili cijelo stablo aplikacije upisivim da bi se zadovoljio jedan poziv za dnevnik mijenja mali problem za veliki.
Rotirajte bez ponovnog uvođenja
Ko ponovo stvori datoteku, odlučuje njenog vlasnika i način za sljedeći ciklus, zato uskladite popravak s konfiguracijom rotacije. Zamjena stvorena pod drugim računom ili sa svježim ACL-om vraća kvar nakon uspješne ispravke.
Postavite način i grupu pri stvaranju, ne poslije, i provjerite sljedeću rotaciju umjesto sljedećeg dodavanja. Dodavanje samo ponavlja test koji je već prošao. Ako alat za rotaciju nudi postavku načina stvaranja, koristite je umjesto chmod-a poslije stvaranja. Razmak između stvaranja i chmod-a je upravo kada sljedeći upis može pasti.
Kada skraćivanje ipak ne uspije, prestanite dodavati dozvole
Neuspjeh skraćivanja datoteke u koju možete pisati ne objašnjava se dozvolama direktorija, a dodavanje više njih neće pomoći. Pogledajte umjesto toga atribute i ograničenje: append-only atribut dopušta upis samo u načinu dodavanja, a montiranje samo za čitanje ili servisni sandbox mogu odbiti operaciju koju ACL dopušta.
Provjerite ograničenja datotečnog sistema jedinice i opcije montiranja za putanju, zatim reprodukujte tačno onu operaciju koja nije uspjela. Proširivanje dozvole koja nikada nije bila pitana samo skriva koje je ograničenje bilo stvarno. Uklanjajte jedno ograničenje po jedan u privremenoj jedinici i vratite ga prije nego što promijenite bilo šta trajno.