Журнал, які ўвесь час расце, перастае расці ў той момант, калі нешта перастварае яго, і памылка кажа permission denied. Спакуслівая выснова — што самому файлу журнала патрэбныя большыя правы, але файл можа ўжо быць запісвальным для таго ж уліковага запісу. Дапісванне ў існуючае імя і стварэнне новага — розныя праверкі, і толькі другая звяртаецца да каталога.

Дапісванне і стварэнне — розныя праверкі

Адкрыццё існуючага файла для дапісвання патрабуе права запісу на гэты файл і права пошуку ў кожным каталогу на яго шляху. Стварэнне файла патрабуе запісу і пошуку ў каталозе, які яго змяшчае, бо аперацыя дадае ў яго імя. Замена файла праз перайменаванне закранае абодва каталогі і іх правілы sticky bit.

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

Ужо адкрыты дэскрыптар дадае чацвёрты выпадак. Працэс можа трымаць запісвальны дэскрыптар, адкрыты да таго, як ён адмовіўся ад прывілеяў, і ўсё роўна не здолець зноў адкрыць той жа шлях пад сваёй пазнейшай ідэнтычнасцю. Паспяховыя дапісванні і няўдалае стварэнне могуць быць праўдай адначасова, для аднаго і таго ж працэсу.

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 дазваляе.

Праверце абмежаванні файлавай сістэмы модуля і опцыі мантавання для шляху, затым узнавіце менавіта тую аперацыю, якая збаіла. Пашырэнне правы, да якой ніколі не звярталіся, толькі хавае, якое абмежаванне было сапраўдным. Здымайце па аднаму абмежаванню ў часовым модулі і вяртайце яго перад тым, як змяніць нешта пастаяннае.

Падобныя артыкулы