Lær Linux-kommandoen 'setfacl'
Setfacl-verktøyet setter tilgangskontrolllister (ACL) over filer og kataloger. På kommandolinje, etterfølges en sekvens av kommandoer av en sekvens av filer (som igjen kan etterfølges av en annen sekvens med kommandoer osv.).
- Alternativene -m, og -x forvent en ACL på kommandolinjen. Flere ACL-oppføringer er atskilt med kommategn (`,'). Alternativene -M, og -X lese en ACL fra en fil eller fra standard input. ACL-oppføringsformatet er beskrevet i Seksjon ACL-OPPføringer.
- De --sett og --set-fil alternativer setter tilgangskontrollisten til en fil eller en katalog. Den forrige ACL er erstattet. ACL-oppføringer for denne operasjonen må inkludere tillatelser.
- De -m (--endre) og -M (--endre-fil) alternativer endrer tilgangskontrollisten til en fil eller katalog. ACL-oppføringer for denne operasjonen må inkludere tillatelser.
- De -x (--fjern) og -X (--fjern-fil) alternativer fjerner ACL-oppføringer. Bare ACL-oppføringer uten perms feltet aksepteres som parametere med mindre POSIXLY_CORRECT er definert.
Når du leser fra filer ved hjelp av -M, og -X alternativer, aksepterer setfacl utgangen getfacl produserer. Det er maksimalt én ACL-oppføring per linje. Etter et pund-tegn (`#'), behandles alt til slutten av linjen som en kommentar.
Hvis setfacl brukes på et filsystem som ikke støtter ACLer, opererer setfacl på filmodustillatelsesbitene. Hvis ACL ikke passer helt inn i tillatelsesbitene, endrer setfacl filmodustillatelsesbitene for å reflektere ACL så nært som mulig, skriver en feilmelding til standard feil, og returnerer med en utgangsstatus større enn 0.
Ved å bruke Setfacl
Prøv først å sette opp en grunnleggende liste for en mappe i din hjemmekatalog. Siden du prøver dette for første gang, lag en ny å leke med. På denne måten risikerer du ikke å låse deg ute fra viktige dokumenter.
mkdir ~/acl-test.
Deretter bruker du setfacl for å gi en annen bruker på systemet ditt tilgang til mappen. Setfacl bruker -m flagg for å endre tilgangskontrolllistene for en fil. Dette betyr vanligvis å legge til en bruker eller gruppe.
setfacl -m u: brukernavn: rwx ~/acl-test/
De u før det første kolonet forteller kommandoen du snakker om et brukernavn. De rwx etter den andre tilskuddene read, write, og execute tillatelser.
Det samme fungerer for grupper ved å spesifisere g i stedet for u før første kolon.
setfacl -m g: gruppenavn: rwx ~/acl-test/
Det fungerer på samme måte som det forrige eksempelet, bortsett fra at det gir tillatelser til hele gruppen.
De -x flagg fungerer motsatt av -m. Det vil trekke tilbake tilgangen til den angitte brukeren eller gruppen.
setfacl -x u: brukernavn: w ~/acl-test/
Kommandoen tilbakekaller skrivetilgang til katalogen for brukeren.
Du kan også direkte endre tillatelsene for alle nåværende brukere. Dette inkluderer eieren av filen og eventuelle andre brukere som har fått tillatelser. Dette er noe av en snarvei, bruker den eksisterende kommandoen, men utelater brukernavnet.
setfacl -m u:: rx ~/acl-test/
Dette gir alle eksisterende brukere lese- og utføringstillatelser, men fjerner skrivetilgang.
Det samme fungerer med -x flagg og fjerning av tillatelser.
setfacl -x u:: w ~/acl-test/
Dette er i hovedsak det samme som forrige eksempel, omvendt.
setfacl lar deg også kopiere tilgangskontrolllistene fra en fil til en annen. Sørg for at brukeren har full tilgang til testmappen, og lag to nye filer å jobbe med.
trykk på ~/acl-test/fil{1,2}.txt.
Endre nå tillatelsene til den første filen.
setfacl -m u: brukernavn: rx ~/acl-text/fil1.txt.
Nå kan du overføre resultatene av getfacl, kommandoen for å hente gjeldende ACL-informasjon, inn i setfacl.
getfacl ~/acl-test/fil1.txt | setfacl --set-fil=- ~/acl-text/fil2.txt.
Den andre fyllingen vil ha samme tillatelser som den første.
Til slutt kan du fjerne alle utvidede ACL-oppføringer opprettet av kommandoen. Dette vil etterlate filen med bruker- og gruppetillatelsene den opprinnelig hadde. For å gjøre dette, bruk flagget -b.
setfacl -b ~/acl-test/
Dette er de vanligste bruksområdene for setfacl. Hvis du ønsker å dykke dypere, er neste del av denne guiden en fullstendig teknisk oversikt over kommandoen.
Teknisk sammenbrudd av Setfacl
setfacl [-bkndRLPvh] [{-m|-x} acl_spec] [{-M|-X} acl_fil] fil...
setfacl --restore=fil.
Tillatelser
Fileieren og prosessene som er i stand til CAP_FOWNER, gis rett til å endre ACL-er for en fil. Dette er analogt med tillatelsene som kreves for å få tilgang til filmodusen. (På gjeldende Linux-systemer er root den eneste brukeren med CAP_FOWNER-funksjonen.)
Alternativer
-b, --fjern-alle
- Fjern alle utvidede ACL-oppføringer. Basis ACL-oppføringene til eieren, gruppen og andre beholdes.
-k, --fjern-standard
- Fjern standard ACL. Hvis det ikke finnes noen standard ACL, utstedes ingen advarsler.
-n, --ingen-maske
- Ikke omberegn den effektive rettighetsmasken. Standardoppførselen til setfacl er å beregne ACL-maskeoppføringen på nytt med mindre en maskeoppføring eksplisitt ble gitt. Maskeoppføringen er satt til foreningen av alle tillatelser til eiergruppen, og alle navngitte bruker- og gruppeoppføringer. (Dette er nøyaktig oppføringene som påvirkes av maskeoppføringen).
--maske
- Beregn den effektive rettighetsmasken på nytt, selv om en ACL-maskeoppføring eksplisitt ble gitt. (Se -n alternativ.)
-d, --standard
- Alle operasjoner gjelder for Misligholde ACL. Vanlige ACL-oppføringer i inngangssettet oppgraderes til Standard ACL-oppføringer. Standard ACL-oppføringer i inngangssettet forkastes. (Det gis en advarsel hvis det skjer).
--restore=fil
- Gjenopprett en sikkerhetskopi av tillatelser opprettet av `getfacl -R' eller lignende. Alle tillatelser til et komplett katalogundertre gjenopprettes ved hjelp av denne mekanismen. Hvis inndataene inneholder eierkommentarer eller gruppekommentarer, og setfacl kjøres med root, gjenopprettes også eieren og eiergruppen for alle filene. Dette alternativet kan ikke blandes med andre alternativer bortsett fra `--test'.
--test
- Testmodus. I stedet for å endre tilgangskontrollistene til noen filer, vises de resulterende tilgangskontrollistene.
-R, --rekursiv
- Bruk operasjoner på alle filer og kataloger rekursivt. Dette alternativet kan ikke blandes med `--restore'.
-L, --logisk
- Logisk tur, følg symbolske lenker. Standardoppførselen er å følge symbolske lenkeargumenter og hoppe over symbolske lenker som oppstår i underkataloger. Dette alternativet kan ikke blandes med `--restore'.
-P, --fysisk
- Fysisk gåtur, hopp over alt symbolske lenker. Dette hopper også over symbolske lenkeargumenter. Dette alternativet kan ikke blandes med `--restore'.
--versjon
- Skriv ut versjonen av setfacl og avslutt.
--hjelp
- Skriv ut hjelp som forklarer kommandolinjealternativene.
Slutt på kommandolinjealternativer. Alle gjenværende parametere tolkes som filnavn, selv om de starter med en bindestrek.
Hvis filnavnparameteren er en enkelt strek, leser setfacl en liste over filer fra standardinndata.
ACL-oppføringer
Setfacl-verktøyet gjenkjenner følgende ACL-oppføringsformater:
[d[standard]:] [bruker]:]uid [:perms]
- Tillatelser til en navngitt bruker. Tillatelser fra fileieren hvis uid er tom.
[d[standard]:] g[gruppe]:gid [:perms]
- Tillatelser for en navngitt gruppe. Tillatelser fra eiergruppen hvis gid er tom.
[d[standard]:] m[spør][:] [:perms]
- Effektiv rettighetsmaske
[d[standard]:] andre[:] [:perms]
- Tillatelser fra andre
Mellomrom mellom skilletegn og ikke-skilletegn ignoreres.
Riktige ACL-oppføringer inkludert tillatelser brukes i endrings- og innstillingsoperasjoner. (alternativer -m, -M, --sett og --set-fil). Oppføringer uten perms felt brukes til sletting av oppføringer (alternativer -x og -X).
Til uid og gid du kan angi enten et navn eller et nummer.
De perms feltet er en kombinasjon av tegn som indikerer tillatelsene: les (r), skrive (w), henrette (x), kjør bare hvis filen er en katalog eller allerede har utføringstillatelse for en bruker(X). Alternativt kan perms feltet kan være et oktalt siffer (0-7).
Automatisk opprettede oppføringer
Til å begynne med inneholder filer og kataloger bare de tre grunnleggende ACL-oppføringene for eieren, gruppen og andre. Det er noen regler som må oppfylles for at en ACL skal være gyldig:
- De tre grunnoppføringene kan ikke fjernes. Det må være nøyaktig én oppføring av hver av disse basisoppføringstypene.
- Når en ACL inneholder navngitte brukeroppføringer eller navngitte gruppeobjekter, må den også inneholde en effektiv rettighetsmaske.
- Når en ACL inneholder noen standard ACL-oppføringer, må de tre standard ACL-baseoppføringene (standardeier, standardgruppe og andre standard) også eksistere.
- Når en standard ACL inneholder navngitte brukeroppføringer eller navngitte gruppeobjekter, må den også inneholde en standard effektiv rettighetsmaske.
For å hjelpe brukeren med å sikre disse reglene, oppretter setfacl oppføringer fra eksisterende oppføringer under følgende forhold:
- Hvis en tilgangskontrollist inneholder navngitte bruker- eller navngitte gruppeoppføringer, og ingen maskeoppføring eksisterer, opprettes en maskeoppføring som inneholder de samme tillatelsene som gruppeoppføringen. Med mindre -n alternativet er gitt, blir tillatelsene til maskeoppføringen ytterligere justert for å inkludere foreningen av alle tillatelser påvirket av maskeoppføringen. (Se -n alternativbeskrivelse).
- Hvis en standard ACL-oppføring opprettes, og standard-ACL-en ikke inneholder noen eier-, eiergruppe- eller andre-oppføring, legges en kopi av ACL-eieren, eiergruppen eller andres oppføring til standard-ACLen.
- Hvis en standard ACL inneholder navngitte brukeroppføringer eller navngitte gruppeoppføringer, og ingen maskeoppføring eksisterer, legges en maskeoppføring som inneholder de samme tillatelsene som standard ACLs gruppeoppføring. Med mindre -n alternativet er gitt, blir tillatelsene til maskeoppføringen ytterligere justert for å inkludere foreningen av alle tillatelser påvirket av maskeoppføringen. (Se -nalternativbeskrivelse).
Eksempler
- Gir en ekstra bruker lesetilgang
- setfacl -m u: lisa: r fil
- Oppheve skrivetilgang fra alle grupper og alle navngitte brukere (ved å bruke den effektive rettighetsmasken)
- setfacl -m m:: rx-fil
- Fjerne en navngitt gruppeoppføring fra en fils ACL
- setfacl -x g: personalfil
- Kopiering av ACL for en fil til en annen
- getfacl fil1 | setfacl --set-fil=- fil2
- Kopierer tilgangs-ACL til standard-ACL
- getfacl -a dir | setfacl -d -M- dir
Samsvar med Posix 1003.1e Draft Standard 17
Hvis miljøvariabelen POSIXLY_CORRECT er definert, endres standardoppførselen til setfacl som følger: Alle ikke-standardalternativer er deaktivert. Prefikset ``standard:'' er deaktivert. De -x og -X alternativer godtar også tillatelsesfelt (og ignorer dem).