Regjistri rritet por nuk mund të rikrijohet: kontrolloni ACL-në e drejtorisë
Shtimi në një skedar nuk kërkon një emër të ri në drejtorinë e tij; krijimi kërkon. Krahasoni ACL-në e aksesit me vlerat e parazgjedhura të trashëguara përpara se të zgjerohet diçka.
Një regjistër që vazhdon të rritet ndalon së rrituri në momentin kur diçka e rikrijon atë, dhe gabimi thotë që leja është refuzuar. Përfundimi joshës është që vetë skedari i regjistrit ka nevojë për më shumë leje, megjithatë skedari mund të jetë tashmë i shkruajtshëm nga i njëjti llogari. Shtimi në një emër ekzistues dhe krijimi i një emri të ri janë dy kontrolle të ndryshme, dhe vetëm i dyti konsulton drejtorinë.
Shtimi dhe krijimi janë kontrolle të ndryshme
Hapja e një skedari ekzistues për shtim kërkon akses shkrimi mbi atë skedar plus akses kërkimi përgjatë çdo drejtorie në shtegun e tij. Krijimi i një skedari kërkon shkrim dhe kërkim në drejtorinë që e përmban, sepse operacioni i shton një emër. Zëvendësimi i një skedari përmes riemërtimit prek gjithashtu të dy drejtoritë dhe rregullat e tyre të sticky bit.
| 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 |
Një përshkrues tashmë i hapur shton rastin e katërt. Një proces mund të mbajë një dorezë shkrimi të hapur përpara se të heqë privilegjet dhe prapë të dështojë të rihapë të njëjtin shteg nën identitetin e tij të mëvonshëm. Shtimet e suksesshme dhe krijimi i dështuar mund të jenë të dyja të vërteta, në të njëjtin moment, për të njëjtin proces.
ACL-të e parazgjedhura trashëgohen, ato nuk dhurojnë
Një zë që fillon me prefiksin e parazgjedhur përshkruan çfarë trashëgojnë objektet e reja nga drejtoria. Ai nuk i dhuron asgjë vetë drejtorisë, dhe nuk e rregullon ACL-në e një skedari që ekziston tashmë.
namei -l /var/log/openvpn/server.log
getfacl -p /var/log/openvpn
getfacl -p /var/log/openvpn/server.log
Lexoni zërat e aksesit veçmas nga ata të parazgjedhur, dhe lexoni maskën. Një zë i emërtuar që liston të drejta të plota mund të kufizohet prapë nga maska, prandaj komenti efektiv ka më shumë rëndësi sesa shkronjat në rreshtin e parë.
Përdorni shtegun e zgjidhur në vend të shtegut në konfigurim. Një lidhje simbolike, një pikë montimi ose një drejtori e rrotulluar mund ta vendosin skedarin e vërtetë diku ku leja që dhatë nuk arrin kurrë. Ecni shtegun fillimisht me mjetin e emrave, pastaj krahasoni çdo nivel me llogarinë në fjalë. Hamendësimi i drejtorisë së nivelit të sipërm është mënyra se si një rregullim zbret një nivel shumë lart.
Identifikoni kush shkruan në atë moment
Kontrolloni njësinë e shërbimit, drop-in-et e saj dhe cilësimet e llogarisë të vetë daemonit përpara se të ndryshoni diçka. Procesi që shton dhe procesi që rikrijon mund të jenë të ndryshëm: një ndihmës rrotullimi, një shkrues statusi dhe një lexues webi rrallë ndajnë një identitet.
Një provë e ekzekutuar nga një shell root nuk e riprodhon një shërbim të kufizuar, dhe do të ketë sukses ndërsa shërbimi vazhdon të dështojë. Riprodukoni operacionin e dështuar nën të njëjtën njësi, me të njëjtën llogari dhe të njëjtat cilësime sandbox. Nëse nuk mundeni, nisni njësinë me një shell të përkohshëm dhe kontrolloni identitetin që raporton. Çdo gjë tjetër mat terminalin tuaj, jo shërbimin.
Nëse krijimi është vërtet i nevojshëm, jepini shkruesit akses në drejtorinë e dedikuar të regjistrit dhe mbajeni aksesin e leximit për konsumatorët të veçantë. Të bësh një llogari të përbashkët ose të gjithë pemën e aplikacionit të shkruajtshme për të kënaqur një thirrje të vetme regjistrimi shkëmben një problem të vogël me një të madh.
Rrotulloni pa e rikthyer problemin
Kush e rikrijon skedarin vendos pronarin dhe mënyrën e tij për ciklin e ardhshëm, prandaj koordinoni rregullimin me konfigurimin e rrotullimit. Një zëvendësim i krijuar nën një llogari tjetër, ose me një ACL të re, e kthen dështimin pas një korrigjimi të suksesshëm.
Vendosni mënyrën dhe grupin në krijim, jo më pas, dhe verifikoni rrotullimin e ardhshëm në vend të shtimit të ardhshëm. Shtimi vetëm përsërit provën që ka kaluar tashmë. Nëse mjeti i rrotullimit ofron një cilësim të mënyrës së krijimit, përdorni atë në vend të një chmod pas krijimit. Hendeku midis krijimit dhe chmod është pikërisht momenti kur shkrimi i ardhshëm mund të dështojë.
Kur shkurtimi dështon gjithsesi, ndaloni së shtuari leje
Dështimi për të shkurtuar një skedar në të cilin mund të shkruani nuk shpjegohet nga lejet e drejtorisë, dhe shtimi i më shumë prej tyre nuk do të ndihmojë. Shikoni në vend të kësaj atributet dhe kufizimin: një atribut append-only lejon shkrim vetëm në modalitetin shtim, dhe një montim vetëm-lexim ose një sandbox shërbimi mund të refuzojnë një operacion që ACL-ja e lejon.
Kontrolloni kufizimet e sistemit të skedarëve të njësisë dhe opsionet e montimit për shtegun, pastaj riprodhoni saktësisht operacionin që dështoi. Zgjerimi i një leje që nuk u konsultua kurrë thjesht fsheh cili kufizim ishte i vërtetë. Hiqni një kufizim në një herë në një njësi të përdorimit të vetëm, dhe kthejeni atë përpara se të ndryshoni diçka të përhershme.