Журнал расце, але не ствараецца: праверце ACL каталога
Дапісванне ў файл не патрабуе новага імя ў яго каталогу, а стварэнне файла — патрабуе. Перш чым пашыраць што-небудзь, параўнайце ACL доступу з атрыманымі па змаўчанні.
Журнал, які ўвесь час расце, перастае расці ў той момант, калі нешта перастварае яго, і памылка кажа permission denied. Спакуслівая выснова — што самому файлу журнала патрэбныя большыя правы, але файл можа ўжо быць запісвальным для таго ж уліковага запісу. Дапісванне ў існуючае імя і стварэнне новага — розныя праверкі, і толькі другая звяртаецца да каталога.
Дапісванне і стварэнне — розныя праверкі
Адкрыццё існуючага файла для дапісвання патрабуе права запісу на гэты файл і права пошуку ў кожным каталогу на яго шляху. Стварэнне файла патрабуе запісу і пошуку ў каталозе, які яго змяшчае, бо аперацыя дадае ў яго імя. Замена файла праз перайменаванне закранае абодва каталогі і іх правілы 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 |
Ужо адкрыты дэскрыптар дадае чацвёрты выпадак. Працэс можа трымаць запісвальны дэскрыптар, адкрыты да таго, як ён адмовіўся ад прывілеяў, і ўсё роўна не здолець зноў адкрыць той жа шлях пад сваёй пазнейшай ідэнтычнасцю. Паспяховыя дапісванні і няўдалае стварэнне могуць быць праўдай адначасова, для аднаго і таго ж працэсу.
ACL па змаўчанні ўспадкоўваюцца, а не даюць правы
Запіс, які пачынаецца з прэфікса па змаўчанні, апісвае, што новыя аб'екты ўспадкоўваюць ад каталога. Ён нічога не дае самому каталогу і не выпраўляе ACL ужо існуючага файла.
namei -l /var/log/openvpn/server.log
getfacl -p /var/log/openvpn
getfacl -p /var/log/openvpn/server.log
Чытайце запісы доступу асобна ад запісаў па змаўчанні і чытайце маску. Імянны запіс, які пералічвае поўныя правы, можа быць абмежаваны маскай — таму эфектыўны каментар важнейшы за літары ў першым радку.
Выкарыстоўвайце развязаны шлях, а не шлях з канфігурацыі. Сімвалічная спасылка, кропка мантавання або павернуты каталог могуць змясціць сапраўдны файл туды, куды дадзеныя вамі правы не дасягаюць. Спачатку прайдзіце шлях інструментам імёнаў, затым параўнайце кожны ўзровень з адпаведным уліковым запісам. Здагадкі на верхнім каталогу — гэта як выпраўленне аказваецца на ўзровень вышэй.
Вызначце, хто піша ў той момант
Праверце модуль службы, яго drop-in і ўласныя налады ўліковага запісу дэмана, перш чым нешта змяняць. Працэс, які дапісвае, і працэс, які перастварае, могуць быць рознымі: памочнік ратацыі, пісьменнік стану і вэб-чытач рэдка падзяляюць адну ідэнтычнасць.
Пробны запуск з root-абалонкі не ўзнаўляе абмежаваную службу, і ён будзе паспяховым, пакуль служба працягвае збойваць. Узнавіце няўдалую аперацыю ў тым жа модулі, з тым жа ўліковым запісам і тымі ж наладамі пясочніцы. Калі не можаце, запусціце модуль з часовай абалонкай і праверце ідэнтычнасць, якую ён паведамляе. Усё іншае вымярае ваш тэрмінал, а не службу.
Калі стварэнне сапраўды патрэбнае, дайце пісьменніку доступ да выдзеленага каталога журналаў, а доступ на чытанне для спажыўцоў трымайце асобна. Зрабіць агульны ўліковы запіс або ўсё дрэва праграмы запісвальным дзеля аднаго выкліку журнала — гэта абмен маленькай праблемы на вялікую.
Ратуйце, не ўносячы гэта зноў
Хто перастварае файл, той вызначае яго ўладальніка і рэжым на наступны цыкл, таму ўзгадніце выпраўленне з канфігурацыяй ратацыі. Замена, створаная пад іншым уліковым запісам або з новым ACL, вяртае збой пасля паспяховага выпраўлення.
Задавайце рэжым і групу пры стварэнні, а не пасля, і правярайце наступную ратацыю, а не наступнае дапісванне. Дапісванне толькі паўтарае ўжо пройдзены тэст. Калі інструмент ратацыі прапануе наладу рэжыму стварэння, выкарыстоўвайце яе замест chmod пасля стварэння. Прамежак паміж стварэннем і chmod — гэта менавіта той час, калі наступны запіс можа збаіць.
Калі ўсячэнне ўсё ж не ўдаецца, спыніцеся дадаваць правы
Няўдача ўсечы файл, у які вы можаце пісаць, не тлумачыцца правамі каталога, і даданне яшчэ іх не дапаможа. Паглядзіце замест гэтага на атрыбуты і абмежаванне: атрыбут append-only дазваляе запіс толькі ў рэжыме дапісвання, а мантаванне толькі для чытання або пясочніца службы могуць адхіліць аперацыю, якую ACL дазваляе.
Праверце абмежаванні файлавай сістэмы модуля і опцыі мантавання для шляху, затым узнавіце менавіта тую аперацыю, якая збаіла. Пашырэнне правы, да якой ніколі не звярталіся, толькі хавае, якое абмежаванне было сапраўдным. Здымайце па аднаму абмежаванню ў часовым модулі і вяртайце яго перад тым, як змяніць нешта пастаяннае.