Žurnalas, kuris nuolat auga, nustoja augti tą akimirką, kai kažkas jį sukuria iš naujo, o klaida sako, kad leidimas atmestas. Viliojanti išvada yra ta, kad pačiam žurnalo failui reikia daugiau leidimų, tačiau failas jau gali būti rašomas tai pačiai paskyrai. Papildymas prie esamo vardo ir naujo vardo sukūrimas yra du skirtingi patikrinimai, ir tik antrasis kreipiasi į katalogą.

Papildymas ir sukūrimas yra skirtingi patikrinimai

Esamo failo atidarymas papildymui reikalauja rašymo teisės tame faile ir paieškos teisės kiekviename jo kelio kataloge. Failo sukūrimas reikalauja rašymo ir paieškos jį talpinančiame kataloge, nes operacija prideda jam vardą. Failo pakeitimas pervadinant paliečia abu katalogus ir jų sticky-bit taisykles.

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

Jau atidarytas deskriptorius prideda ketvirtą atvejį. Procesas gali laikyti rašymo rankenėlę, atidarytą prieš atsisakant privilegijų, ir vis tiek nepajėgti iš naujo atidaryti to paties kelio savo vėlesne tapatybe. Sėkmingi papildymai ir nepavykęs sukūrimas gali būti abu teisingi tuo pačiu metu tam pačiam procesui.

Numatytieji ACL paveldimi, jie nesuteikia

Įrašas, prasidedantis numatytuoju priešdėliu, aprašo, ką nauji objektai paveldi iš katalogo. Jis nieko nesuteikia pačiam katalogui ir netaiso jau esamo failo ACL.

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

Prieigos įrašus skaitykite atskirai nuo numatytųjų, ir skaitykite kaukę. Vardinis įrašas, išvardijantis visas teises, vis tiek gali būti apribotas kaukės, todėl efektyvusis komentaras svarbesnis už pirmosios eilutės raides.

Naudokite išspręstą kelią, o ne konfigūracijoje esantį kelią. Simbolinė nuoroda, prijungimo taškas ar pasuktas katalogas gali patalpinti tikrąjį failą ten, kur jūsų suteiktas leidimas niekada nepasiekia. Pirmiausia pereikite kelią vardų įrankiu, tada palyginkite kiekvieną lygį su atitinkama paskyra. Spėjimas viršutiniame kataloge yra būdas, kuriuo pataisymas nusileidžia vienu lygiu per aukštai.

Nustatykite, kas rašo tuo momentu

Prieš ką nors keisdami patikrinkite paslaugos vienetą, jo drop-in failus ir paties tarnybos paskyros nustatymus. Papildantis procesas ir iš naujo kuriantis procesas gali skirtis: rotacijos pagalbininkas, būsenos rašytojas ir žiniatinklio skaitytojas retai dalijasi tapatybe.

Testas iš root terminalo neatkuria ribojamos paslaugos, ir jis pavyks, kol paslauga toliau nepavyksta. Atkurkite nepavykusią operaciją tame pačiame vienete, su ta pačia paskyra ir tais pačiais sandbox nustatymais. Jei negalite, paleiskite vienetą su laikinu terminalu ir patikrinkite jo pranešamą tapatybę. Visa kita matuoja jūsų terminalą, o ne paslaugą.

Jei sukūrimas tikrai būtinas, suteikite rašytojui prieigą prie skirto žurnalo katalogo, o skaitymo prieigą vartotojams palikite atskirai. Bendra paskyra ar visas programos medis, padarytas rašomu vienam registravimo kvietimui patenkinti, iškeičia mažą problemą į didelę.

Rotuokite neįvesdami to iš naujo

Kas iš naujo sukuria failą, tas nusprendžia jo savininką ir režimą kitam ciklui, todėl derinkite pataisymą su rotacijos konfigūracija. Pakaitalas, sukurtas kitoje paskyroje ar su nauju ACL, grąžina gedimą po sėkmingos korekcijos.

Nustatykite režimą ir grupę kūrimo metu, o ne vėliau, ir tikrinkite kitą rotaciją, o ne kitą papildymą. Papildymas tik pakartoja jau praėjusį testą. Jei rotacijos įrankis siūlo kūrimo režimo nustatymą, naudokite jį vietoj chmod po sukūrimo. Tarpas tarp sukūrimo ir chmod yra būtent tas momentas, kai kitas rašymas gali nepavykti.

Kai trumpinimas vis tiek nepavyksta, nustokite pridėti leidimus

Failo, kurį galite rašyti, trumpinimo nesėkmė nepaaiškinama katalogo leidimais, ir jų pridėjimas nepadės. Vietoj to pažiūrėkite į atributus ir apribojimą: append-only atributas leidžia rašyti tik papildymo režimu, o tik skaitymui skirtas prijungimas ar paslaugos sandbox gali atmesti operaciją, kurią ACL leidžia.

Patikrinkite vieneto failų sistemos apribojimus ir kelio prijungimo parinktis, tada atkurkite tikslią operaciją, kuri nepavyko. Leidimo, į kurį niekada nebuvo kreiptasi, išplėtimas tik paslepia, kuris apribojimas buvo tikras. Pašalinkite po vieną apribojimą vienkartiniame vienete ir grąžinkite jį prieš keisdami ką nors nuolatinio.

Susiję straipsniai