Дневник се дописује, али се не може поново направити: проверите ACL директоријума
Додавање у датотеку не захтева ново име у њеном директоријуму; прављење захтева. Упоредите приступни ACL са наслеђеним подразумеваним вредностима пре него што било шта проширите.
Дневник који непрекидно расте престаје да расте у тренутку када га нешто поново направи, а грешка каже да је дозвола одбијена. Заводљив закључак је да самој датотеци дневника треба више дозвола, али датотека можда већ јесте уписива за исти налог. Додавање постојећем имену и прављење новог имена су две различите провере, и само друга пита директоријум.
Додавање и прављење су различите провере
Отварање постојеће датотеке за додавање захтева право уписа на ту датотеку и право претраге дуж сваког директоријума на њеној путањи. Прављење датотеке захтева упис и претрагу у директоријуму који је садржи, јер операција му додаје име. Замена датотеке преко преименовања дотиче и оба директоријума и њихова правила sticky бита.
| 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 љуске не репродукује ограничену услугу, и он ће успети док услуга наставља да не успева. Репродукујте неуспелу операцију под истом јединицом, са истим налогом и истим sandbox подешавањима. Ако не можете, покрените јединицу са привременом љуском и проверите идентитет који пријављује. Све остало мери ваш терминал, а не услугу.
Ако је прављење заиста потребно, дајте писачу приступ намењеном директоријуму дневника, а приступ за читање за потрошаче држите одвојено. Учинити заједнички налог или цело стабло апликације уписивим да би се задовољио један позив за евидентирање мења мали проблем за велики.
Ротирајте без поновног увођења
Онај ко поново направи датотеку одлучује о њеном власнику и режиму за следећи циклус, зато усагласите поправку са конфигурацијом ротације. Замена направљена под другим налогом или са свежим ACL-ом враћа квар после успешне исправке.
Подесите режим и групу при прављењу, не касније, и потврдите следећу ротацију, а не следеће додавање. Додавање само понавља тест који је већ прошао. Ако алат за ротацију нуди подешавање режима прављења, користите га уместо chmod-а после прављења. Размак између прављења и chmod-а је управо тренутак када следећи упис може да не успе.
Када скраћивање ипак не успе, престаните да додајете дозволе
Неуспех да се скрати датотека у коју можете да упишете не објашњава се дозволама директоријума, и додавање више њих неће помоћи. Погледајте уместо тога атрибуте и ограничење: атрибут append-only дозвољава упис само у режиму додавања, а монтирање само за читање или sandbox услуге могу да одбију операцију коју ACL дозвољава.
Проверите ограничења фајл система јединице и опције монтирања путање, затим репродукујте тачно ону операцију која није успела. Проширивање дозволе која никада није консултована само сакрива које је ограничење било стварно. Уклоните једно ограничење одједном у једнократној јединици и вратите га пре него што промените било шта трајно.