Dnevnik raste, a ga ni mogoče znova ustvariti: preverite ACL imenika
Dodajanje v datoteko ne zahteva novega imena v njenem imeniku; ustvarjanje ga zahteva. Primerjajte dostopni ACL s podedovanimi privzetimi vrednostmi, preden karkoli razširite.
Dnevnik, ki nenehno raste, se neha povečevati v trenutku, ko ga nekaj znova ustvari, in napaka pravi, da je dovoljenje zavrnjeno. Mamljiv sklep je, da sama datoteka dnevnika potrebuje več dovoljenj, vendar je datoteka morda že zapisljiva za isti račun. Dodajanje obstoječemu imenu in ustvarjanje novega imena sta dve različni preverjanji, in samo drugo vpraša imenik.
Dodajanje in ustvarjanje sta različni preverjanji
Odpiranje obstoječe datoteke za dodajanje zahteva pravico pisanja na tej datoteki in pravico iskanja po vsakem imeniku na njeni poti. Ustvarjanje datoteke zahteva pisanje in iskanje v imeniku, ki jo vsebuje, ker operacija doda vanj ime. Zamenjava datoteke s preimenovanjem se dotakne tudi obeh imenikov in njunih pravil 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 |
Že odprt deskriptor doda četrti primer. Proces lahko drži ročaj za pisanje odprt, preden se je odpovedal privilegijem, in vseeno ne uspe znova odpreti iste poti pod svojo poznejšo identiteto. Uspešna dodajanja in neuspešno ustvarjanje so lahko oba resnična v istem trenutku za isti proces.
Privzeti ACL se podedujejo, ne podeljujejo
Vnos, ki se začne s privzeto predpono, opisuje, kaj novi objekti podedujejo iz imenika. Imeniku samemu ne podeli ničesar in ne popravi ACL že obstoječe datoteke.
namei -l /var/log/openvpn/server.log
getfacl -p /var/log/openvpn
getfacl -p /var/log/openvpn/server.log
Dostopne vnose berite ločeno od privzetih in berite masko. Imenovani vnos s polnimi pravicami je lahko še vedno omejen z masko, zato je učinkovit komentar pomembnejši od črk v prvi vrstici.
Uporabite razrešeno pot, ne poti iz konfiguracije. Simbolna povezava, točka priklopa ali zasukan imenik lahko postavijo resnično datoteko tja, kamor podeljeno dovoljenje nikoli ne seže. Najprej prehodite pot z orodjem za imena, nato primerjajte vsako raven z zadevnim računom. Ugibanje o najvišjem imeniku je način, kako popravek pristane eno raven previsoko.
Ugotovite, kdo piše v tistem trenutku
Preden karkoli spremenite, preverite servisno enoto, njene drop-ine in nastavitve računa samega demona. Proces, ki dodaja, in proces, ki znova ustvarja, se lahko razlikujeta: pomočnik za rotacijo, pisec stanja in spletni bralnik redko delijo identiteto.
Preizkus, zagnan iz root lupine, ne reproducira omejene storitve, in bo uspel, medtem ko storitev še naprej odpoveduje. Reproducirajte neuspešno operacijo pod isto enoto, z istim računom in istimi nastavitvami peskovnika. Če ne morete, zaženite enoto z začasno lupino in preverite identiteto, ki jo poroča. Vse drugo meri vaš terminal, ne storitve.
Če je ustvarjanje resnično potrebno, dajte piscu dostop do namenskega imenika dnevnika, dostop za branje za porabnike pa imejte ločeno. Narediti skupni račun ali celotno drevo aplikacije zapisljivo, da bi zadostili enemu klicu beleženja, zamenja majhen problem za velikega.
Vrtite brez ponovnega uvajanja
Kdor datoteko znova ustvari, odloči o njenem lastniku in načinu za naslednji cikel, zato uskladite popravek s konfiguracijo rotacije. Zamenjava, ustvarjena pod drugim računom ali s svežim ACL, po uspešnem popravku prinese napako nazaj.
Način in skupino nastavite ob ustvarjanju, ne pozneje, in preverite naslednjo rotacijo, ne naslednjega dodajanja. Dodajanje le ponovi preizkus, ki je že uspel. Če orodje za rotacijo ponuja nastavitev načina ustvarjanja, jo uporabite namesto chmoda po ustvarjanju. Vrzel med ustvarjanjem in chmodom je natanko tisti trenutek, ko lahko naslednje pisanje spodleti.
Ko krajšanje vseeno spodleti, prenehajte dodajati dovoljenja
Neuspeh pri krajšanju datoteke, v katero lahko pišete, se ne pojasni z dovoljenji imenika, in dodajanje več jih ne bo pomagalo. Poglejte namesto tega atribute in omejitev: atribut samo za dodajanje dovoljuje pisanje le v načinu dodajanja, priklop samo za branje ali peskovnik storitve pa lahko zavrne operacijo, ki jo ACL dovoljuje.
Preverite omejitve datotečnega sistema enote in možnosti priklopa za pot, nato reproducirajte točno tisto operacijo, ki je spodletela. Razširitev dovoljenja, po katerem nikoli ni bilo vprašano, le skrije, katera omejitev je bila resnična. Odstranite eno omejitev naenkrat v enoti za enkratno uporabo in jo povrnite, preden spremenite karkoli trajnega.