Denník, ktorý neustále rastie, prestane rásť v okamihu, keď ho niečo znovu vytvorí, a chyba hovorí, že prístup bol zamietnutý. Lákavý záver je, že samotný súbor denníka potrebuje viac práv, no súbor už môže byť zapisovateľný pre ten istý účet. Pridávanie k existujúcemu názvu a vytvorenie nového názvu sú dve rôzne kontroly a iba druhá sa pýta adresára.

Pridávanie a vytváranie sú rôzne kontroly

Otvorenie existujúceho súboru na pridávanie vyžaduje právo zápisu na tento súbor a právo vyhľadávania v každom adresári na jeho ceste. Vytvorenie súboru vyžaduje zápis a vyhľadávanie v adresári, ktorý ho obsahuje, pretože operácia doň pridáva názov. Nahradenie súboru premenovaním sa dotýka aj oboch adresárov a ich pravidiel sticky bitu.

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

Už otvorený deskriptor pridáva štvrtý prípad. Proces môže držať rukoväť zápisu otvorenú predtým, než sa vzdal privilégií, a napriek tomu nedokáže znovu otvoriť tú istú cestu pod svojou neskoršou identitou. Úspešné pridania a neúspešné vytvorenie môžu byť obe pravdivé v tej istej chvíli pre ten istý proces.

Predvolené ACL sa dedia, neudeľujú

Záznam začínajúci predvoleným prefixom opisuje, čo nové objekty dedia z adresára. Neudeľuje nič samotnému adresáru a neopravuje ACL už existujúceho súboru.

namei -l /var/log/openvpn/server.log
getfacl -p /var/log/openvpn
getfacl -p /var/log/openvpn/server.log

Čítajte prístupové záznamy oddelene od predvolených a čítajte masku. Pomenovaný záznam uvádzajúci plné práva môže byť stále obmedzený maskou, preto je efektívny komentár dôležitejší než písmená v prvom riadku.

Používajte vyriešenú cestu, nie cestu v konfigurácii. Symbolický odkaz, bod pripojenia alebo otočený adresár môžu umiestniť skutočný súbor tam, kam udelené právo nikdy nedosiahne. Najprv prejdite cestu nástrojom názvov, potom porovnajte každú úroveň s príslušným účtom. Hádanie najvyššieho adresára je spôsob, akým oprava pristane o jednu úroveň príliš vysoko.

Zistite, kto v tej chvíli zapisuje

Pred akoukoľvek zmenou skontrolujte servisnú jednotku, jej drop-iny a nastavenia účtu samotného démona. Proces, ktorý pridáva, a proces, ktorý znovu vytvára, sa môžu líšiť: pomocník rotácie, zapisovateľ stavu a webový čitateľ zriedka zdieľajú identitu.

Test spustený z root shellu nezreprodukuje obmedzenú službu, a uspeje, kým služba naďalej zlyháva. Zreprodukujte neúspešnú operáciu pod tou istou jednotkou, s tým istým účtom a tými istými nastaveniami sandboxu. Ak nemôžete, spustite jednotku s dočasným shellom a skontrolujte identitu, ktorú hlási. Čokoľvek iné meria váš terminál, nie službu.

Ak je vytvorenie naozaj potrebné, dajte zapisovateľovi prístup k vyhradenému adresáru denníka a prístup na čítanie pre spotrebiteľov držte oddelene. Urobiť zdieľaný účet alebo celý strom aplikácie zapisovateľným, aby sa uspokojilo jedno volanie logovania, vymieňa malý problém za veľký.

Rotujte bez opätovného zavedenia problému

Kto súbor znovu vytvorí, rozhoduje o jeho vlastníkovi a režime pre ďalší cyklus, preto zlaďte opravu s konfiguráciou rotácie. Náhrada vytvorená pod iným účtom alebo s novým ACL vráti zlyhanie po úspešnej oprave.

Nastavte režim a skupinu pri vytvorení, nie neskôr, a overte nasledujúcu rotáciu, nie nasledujúce pridanie. Pridanie iba opakuje test, ktorý už prešiel. Ak nástroj rotácie ponúka nastavenie režimu vytvorenia, použite ho namiesto chmod po vytvorení. Medzera medzi vytvorením a chmod je presne ten okamih, keď nasledujúci zápis môže zlyhať.

Keď skracovanie napriek tomu zlyhá, prestaňte pridávať práva

Zlyhanie skrátenia súboru, do ktorého môžete zapisovať, sa nevysvetľuje právami adresára a pridávanie ďalších nepomôže. Pozrite sa namiesto toho na atribúty a obmedzenie: atribút append-only povoľuje zápis iba v režime pridávania a pripojenie iba na čítanie alebo sandbox služby môžu odmietnuť operáciu, ktorú ACL povoľuje.

Skontrolujte obmedzenia systému súborov jednotky a možnosti pripojenia cesty, potom zreprodukujte presnú operáciu, ktorá zlyhala. Rozšírenie práva, na ktoré sa nikdy nepýtalo, iba skrýva, ktoré obmedzenie bolo skutočné. Odstráňte jedno obmedzenie naraz v jednorazovej jednotke a vráťte ho pred akoukoľvek trvalou zmenou.

Súvisiace články