En logg som fortsetter å vokse slutter å vokse i det noe gjenskaper den, og feilen sier at tilgangen er nektet. Den fristende konklusjonen er at loggfilen selv trenger flere rettigheter, men filen kan allerede være skrivbar for samme konto. Å legge til i et eksisterende navn og å opprette et nytt navn er to forskjellige kontroller, og bare den andre spør mappen.

Å legge til og å opprette er forskjellige kontroller

Å åpne en eksisterende fil for tilføyelse krever skrivetilgang på den filen pluss søketilgang langs hver mappe i banen. Å opprette en fil krever skrive- og søketilgang på mappen som inneholder den, fordi operasjonen legger et navn til den. Å erstatte en fil via omdøping berører også begge mappene og deres sticky-bit-regler.

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

En allerede åpen deskriptor legger til et fjerde tilfelle. En prosess kan holde et skrivehåndtak åpnet før den ga slipp på privilegier og likevel mislykkes med å åpne samme bane på nytt under sin senere identitet. De vellykkede tilføyelsene og den mislykkede opprettelsen kan begge være sanne, i samme øyeblikk, for samme prosess.

Standard-ACL-er arves, de gir ikke

En oppføring som begynner med standardprefikset beskriver hva nye objekter arver fra mappen. Den gir ingenting til mappen selv, og den reparerer ikke ACL-en til en fil som allerede finnes.

namei -l /var/log/openvpn/server.log
getfacl -p /var/log/openvpn
getfacl -p /var/log/openvpn/server.log

Les tilgangsoppføringene atskilt fra standardoppføringene, og les masken. En navngitt oppføring som lister full rettigheter kan fortsatt begrenses av masken, derfor betyr den effektive kommentaren mer enn bokstavene på første linje.

Bruk den oppløste banen i stedet for banen i konfigurasjonen. En symbolsk lenke, et monteringspunkt eller en rotert mappe kan plassere den virkelige filen et sted der rettigheten du ga aldri når. Gå banen med navneverktøyet først, sammenlign så hvert nivå med den aktuelle kontoen. Å gjette på toppmappen er hvordan en rettelse lander ett nivå for høyt.

Identifiser hvem som skriver i det øyeblikket

Sjekk tjenesteenheten, dens drop-ins og daemonens egne kontoinnstillinger før du endrer noe. Prosessen som legger til og prosessen som gjenskaper kan være forskjellige: en rotasjonshjelper, en statusskriver og en nettleser deler sjelden en identitet.

En testkjøring fra et root-skal gjenskaper ikke en begrenset tjeneste, og den vil lykkes mens tjenesten fortsetter å feile. Gjenskap den mislykkede operasjonen under samme enhet, med samme konto og samme sandkasseinnstillinger. Hvis du ikke kan, start enheten med et midlertidig skall og sjekk identiteten den rapporterer. Alt annet måler terminalen din, ikke tjenesten.

Hvis opprettelse virkelig er nødvendig, gi skriveren tilgang til den dedikerte loggmappen og hold lesetilgangen for forbrukere atskilt. Å gjøre en delt konto eller hele applikasjonstreet skrivbart for å tilfredsstille ett loggkall bytter et lite problem mot et stort.

Roter uten å gjeninnføre det

Den som gjenskaper filen bestemmer eieren og modusen for neste syklus, så koordiner rettelsen med rotasjonskonfigurasjonen. En erstatning opprettet under en annen konto, eller med en fersk ACL, bringer feilen tilbake etter en vellykket rettelse.

Sett modus og gruppe ved opprettelsen, ikke etterpå, og verifiser neste rotasjon i stedet for neste tilføyelse. En tilføyelse gjentar bare testen som allerede har bestått. Hvis rotasjonsverktøyet tilbyr en innstilling for opprettelsesmodus, bruk den i stedet for chmod etter opprettelsen. Gapet mellom opprettelse og chmod er nettopp når neste skriving kan feile.

Når avkorting likevel feiler, slutt å legge til rettigheter

At avkorting av en fil du kan skrive til feiler, forklares ikke av mappetillatelser, og å legge til flere av dem vil ikke hjelpe. Se på attributtene og innesperringen i stedet: et append-only-attributt tillater skriving bare i tilføyelsesmodus, og en skrivebeskyttet montering eller en tjenestesandkasse kan nekte en operasjon som ACL-en tillater.

Sjekk enhetens filsystembegrensninger og monteringsalternativene for banen, og gjenskap deretter den nøyaktige operasjonen som feilet. Å utvide en rettighet som aldri ble konsultert skjuler bare hvilken begrensning som var ekte. Fjern én begrensning om gangen i en engangsenhet, og tilbakestill den før du endrer noe permanent.

Relaterte artikler