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.

OperationWhat must permit itTypical failure message
Append to an existing logFile write access, path traversalPermission denied on the file
Create a missing logDirectory write and search accessPermission denied on the path
Rename a replacement into placeBoth directories, plus sticky restrictionsPermission 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.

Sorodni članki