Logfilen vokser, men kan ikke genskabes: tjek mappens ACL
At tilføje til en fil kræver ikke et nyt navn i mappen; at oprette en gør. Sammenlign adgangs-ACL'en med de nedarvede standarder, før du udvider noget.
En logfil, der bliver ved med at vokse, holder op med at vokse i det øjeblik, noget genskaber den, og fejlen siger adgang nægtet. Den nærliggende konklusion er, at selve filen har brug for flere rettigheder, selv om filen måske allerede er skrivbar for den samme konto. At tilføje til et eksisterende navn og at oprette et nyt er forskellige kontroller, og kun den anden spørger mappen.
Tilføjelse og oprettelse er forskellige kontroller
At åbne en eksisterende fil til tilføjelse kræver skriveadgang til filen plus søgeadgang gennem hver mappe i dens sti. At oprette en fil kræver skrive- og søgeadgang til mappen, der indeholder den, fordi handlingen føjer et navn til den. At erstatte en fil via omdøbning berører begge mapper og deres sticky-bit-regler.
| 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 |
En allerede åben deskriptor tilføjer et fjerde tilfælde. En proces kan holde et skrivbart håndtag, der blev åbnet, før den gav afkald på privilegier, og stadig mislykkes med at genåbne den samme sti under sin senere identitet. De vellykkede tilføjelser og den mislykkede oprettelse kan begge være sande på samme tid for den samme proces.
Standard-ACL'er nedarves, de tildeler ikke
En post, der begynder med standardpræfikset, beskriver, hvad nye objekter nedarver fra mappen. Den tildeler intet til selve mappen, og den reparerer ikke ACL'en for en fil, der allerede findes.
namei -l /var/log/openvpn/server.log
getfacl -p /var/log/openvpn
getfacl -p /var/log/openvpn/server.log
Læs adgangspostene adskilt fra standardposterne, og læs masken. En navngivet post, der viser fulde rettigheder, kan stadig være begrænset af masken, og derfor betyder den effektive kommentar mere end bogstaverne på første linje.
Brug den opløste sti i stedet for stien i konfigurationen. Et symbolsk link, et monteringspunkt eller en roteret mappe kan anbringe den rigtige fil et sted, hvor den tildelte rettighed aldrig når hen. Gå stien igennem med namei først, og sammenlign derefter hvert niveau med den pågældende konto. At gætte på topmappen er måden, en rettelse lander et niveau for højt.
Find ud af, hvem der skriver i det øjeblik
Kontrollér tjenesteenheden, dens drop-ins og dæmonens egne kontoindstillinger, før du ændrer noget. Processen, der tilføjer, og processen, der genskaber, kan være forskellige: en rotationshjælper, en statusskriver og en weblæser deler sjældent identitet.
En testkørsel fra en root-shell genskaber ikke en begrænset tjeneste, og den vil lykkes, mens tjenesten fortsætter med at fejle. Genskab den fejlende handling under den samme enhed, med den samme konto og de samme sandbox-indstillinger. Hvis du ikke kan det, så start enheden med en midlertidig shell og kontrollér den identitet, den rapporterer. Alt andet måler din terminal i stedet for tjenesten.
Hvis oprettelse virkelig er nødvendig, så giv skriveren adgang til den dedikerede logmappe og hold læseadgang for forbrugere adskilt. At gøre en delt konto eller et helt applikationstræ skrivbart for at tilfredsstille ét logkald bytter et lille problem for et stort.
Rotér uden at genindføre fejlen
Den, der genskaber filen, bestemmer dens ejer og tilstand for den næste cyklus, så koordinér rettelsen med rotationskonfigurationen. En erstatning, der oprettes under en anden konto eller med en frisk ACL, bringer fejlen tilbage efter en vellykket rettelse.
Sæt tilstand og gruppe ved oprettelsen, ikke bagefter, og verificér den næste rotation i stedet for den næste tilføjelse. En tilføjelse gentager kun den test, der allerede er bestået. Hvis rotationsværktøjet tilbyder en indstilling for oprettelsestilstand, så brug den i stedet for en chmod bagefter. Kløften mellem oprettelse og chmod er netop, når den næste skrivning kan fejle.
Når afkortning alligevel fejler, stop med at tilføje rettigheder
En fejl med at afkorte en fil, du kan skrive til, forklares ikke af mappetilladelser, og flere af dem vil ikke hjælpe. Se i stedet på attributterne og indespærringen: et append-only-attribut tillader kun skrivning i tilføjelsestilstand, og en skrivebeskyttet montering eller en tjeneste-sandbox kan afvise en handling, som ACL'en tillader.
Kontrollér enhedens filsystembegrænsninger og monteringsindstillingerne for stien, og genskab derefter den nøjagtige handling, der fejlede. At udvide en tilladelse, der aldrig blev spurgt, skjuler blot, hvilken begrænsning der var den rigtige. Fjern én begrænsning ad gangen i en midlertidig enhed, og rul den tilbage, før du ændrer noget permanent.