Дневник што постојано расте престанува да расте во моментот кога нешто ќе го пресоздаде, а грешката вели дека дозволата е одбиена. Привлечниот заклучок е дека самата датотека на дневникот бара повеќе дозволи, но датотеката може веќе да е запишлива за истата сметка. Додавањето на постоечко име и создавањето ново име се две различни проверки, и само втората го консултира директориумот.

Додавањето и создавањето се различни проверки

Отворањето постоечка датотека за додавање бара дозвола за пишување на таа датотека плус дозвола за пребарување по секој директориум во нејзината патека. Создавањето датотека бара пишување и пребарување во директориумот што ја содржи, бидејќи операцијата додава име во него. Замената на датотека преку преименување ги допира и двата директориуми и нивните правила за 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 школка не репродуцира ограничена услуга, и тој ќе успее додека услугата продолжува да неуспева. Репродуцирајте ја неуспешната операција под истата единица, со истата сметка и истите sandbox поставки. Ако не можете, стартувајте ја единицата со привремена школка и проверете го идентитетот што го пријавува. Сето друго го мери вашиот терминал, а не услугата.

Ако создавањето е навистина потребно, дајте му на писателот пристап до посветениот директориум за дневник, а пристапот за читање за потрошувачите држете го одделен. Правењето заедничка сметка или целото дрво на апликацијата запишливо за да се задоволи еден повик за логирање разменува мал проблем за голем.

Ротирајте без повторно воведување

Оној што ја пресоздава датотеката одлучува за нејзиниот сопственик и режим за следниот циклус, па усогласете ја поправката со конфигурацијата за ротација. Замена создадена под друга сметка или со свеж ACL го враќа дефектот по успешна корекција.

Поставете го режимот и групата при создавањето, не подоцна, и потврдете ја следната ротација наместо следното додавање. Додавањето само го повторува тестот што веќе поминал. Ако алатката за ротација нуди поставка за режим на создавање, користете ја наместо chmod по создавањето. Јазот помеѓу создавањето и chmod е токму моментот кога следното пишување може да не успее.

Кога скратувањето сепак не успева, престанете да додавате дозволи

Неуспехот да се скрати датотека во која можете да пишувате не се објаснува со дозволите на директориумот, и додавањето повеќе од нив нема да помогне. Наместо тоа, погледнете ги атрибутите и ограничувањето: атрибутот append-only дозволува пишување само во режим на додавање, а монтирање само за читање или sandbox на услугата можат да одбијат операција што ACL-от ја дозволува.

Проверете ги ограничувањата на датотечниот систем на единицата и опциите за монтирање на патеката, потоа репродуцирајте ја точната операција што не успеа. Проширувањето на дозвола што никогаш не била консултирана само го крие тоа кое ограничување било вистинско. Отстранете едно ограничување одеднаш во еднократна единица и вратете го пред да смените нешто трајно.

Поврзани статии