Jeg har aldrig rigtig forstået, hvordan chmod
fungerede indtil i dag. Jeg fulgte en tutorial, der forklarede mig meget.
For eksempel har jeg læst, at du har tre forskellige tilladelsesgrupper:
- ejer (
u
) - gruppe (
g
) - alle (
o
)
Baseret på disse tre grupper ved jeg nu, at:
- Hvis filen ejes af brugeren, bestemmer brugerrettighederne adgangen .
- Hvis gruppen af filen er den samme som brugerens gruppe, bestemmer gruppetilladelsen adgangen.
- Hvis brugeren ikke er filejer og ikke er i gruppen, så bruges den anden tilladelse.
Jeg har også lært, at du har følgende tilladelser:
- læs (
r
) - skriv (
w
) - udfør ()
Jeg oprettede en mappe for at teste min nytilegnede viden:
mkdir test
Derefter Jeg lavede nogle tests:
chmod u+rwx test/ # drwx------ chmod g+rx test/ # drwxr-x--- chmod u-x test/ # drw-r-x---
Efter at have tøvet rundt i nogen tid tror jeg, at jeg endelig fik fat i chmod
og hvordan du indstiller tilladelse ved hjælp af denne kommando.
Men …
Jeg har stadig et par spørgsmål:
- Hvad betyder
d
i starten står for? - Hvad er navnet på og brugen af den indeholdende slot og hvilke andre værdier kan den indeholde?
- Hvordan kan jeg indstille og afmarkere det?
- Hvad er værdien for denne
d
? (Da du kun har 7 = 4 + 2 + 1 7 = 4 + 2 + 1 7 = 4 + 2 + 1) - Hvorfor bruger folk nogle gange
0777
i stedet for777
for at indstille deres tilladelser?
Men da jeg ikke skulle stille flere spørgsmål, vil jeg prøve at stille det i et spørgsmål.
I UNIX-baseret system såsom alle Linux-distributioner, angående tilladelserne, hvad står den første del (d
) for, og hvad er det bruges til denne del af tilladelserne?
Kommentarer
Svar
Jeg besvarer dine spørgsmål i tre dele: filtyper, tilladelser, og brug sager til de forskellige former for chmod
.
Filtyper
Det første tegn i ls -l
output repræsenterer filtypen; d
betyder, at det er et bibliotek. Det kan ikke indstilles eller frakobles, det afhænger af, hvordan filen blev oprettet. Du kan finde den komplette liste over filtyper i ls-dokumentationen ; dem, som du sandsynligvis støder på, er
-
-
: “almindelig” fil, oprettet med ethvert program, der kan skrive en fil -
b
: Bloker speciel fil, typisk disk- eller partitionsenheder, kan oprettes medmknod
-
c
: specialfil til tegn, kan også oprettes medmknod
(se/dev
for eksempler) -
d
: katalog, kan oprettes medmkdir
-
l
: symbolsk link, kan oprettes medln -s
-
p
: navngivet rør, kan oprettes medmkfifo
-
s
: stikkontakt, kan oprettes mednc -U
-
D
: dør , oprettet af nogle serverprocesser på Solaris / openindiana.
Tilladelser
chmod 0777
bruges til at indstille alle tilladelser i en chmod
udførelse snarere end at kombinere ændringer med u+
osv.Hver af de fire cifre er en oktal værdi, der repræsenterer et sæt tilladelser:
-
suid
,sgid
og “klæbrig” (se nedenfor) - brugerrettigheder
- gruppetilladelser
- “andre” tilladelser
Den oktale værdi beregnes som summen af tilladelserne:
- “læs” er 4
- “skriv” er 2
- “udfør” er 1
For det første ciffer:
-
suid
er 4; binære filer med dette bit sæt køres som deres ejerbruger (almindeligvisroot
) -
sgid
er 2; binære filer med dette bitsæt køres som deres ejergruppe (dette blev brugt til spil, så høje score kunne deles, men det er ofte en sikkerhedsrisiko, når det kombineres med sårbarheder i spillene), og filer, der oprettes i mapper med dette bit sæt, hører til katalogets ejergruppe som standard (dette er praktisk til oprettelse af delte mapper) - “klæbrig” (eller “begrænset sletning”) er 1; filer i kataloger med dette bit sæt kan kun slettes af deres ejer, katalogets ejer eller
root
(se/tmp
for et almindeligt eksempel af dette).
Se chmod
manpage for detaljer. Bemærk, at i alt dette ignorerer jeg andre sikkerhedsfunktioner, som kan ændre brugernes tilladelser til filer (SELinux, fil-ACLer …).
Specielle bits håndteres forskelligt afhængigt af filtypen (almindelig fil eller bibliotek) og det underliggende system. (Dette er nævnt i chmod
manpage.) På systemet brugte jeg til at teste dette (med coreutils
8.23 på en ext4
filsystem, der kører Linux-kerne 3.16.7-ckt2), adfærd er som følger. For en fil ryddes de specielle bits altid, medmindre de er angivet eksplicit, så chmod 0777
svarer til chmod 777
, og begge kommandoer rydder de specielle bits og give alle fulde tilladelser til filen. For en mappe ryddes de specielle bits aldrig fuldt ud ved hjælp af den firecifrede numeriske form, så i virkeligheden chmod 0777
svarer også til chmod 777
men det er vildledende, da nogle af de specielle bits forbliver som de er. (En tidligere version af dette svar fik dette forkert.) For at rydde specielle bits i mapper skal du bruge u-s
, g-s
og / eller o-t
eller udtrykkeligt angive en negativ numerisk værdi, så chmod -7000
rydder alle de specielle bits i et bibliotek.
I ls -l
output vises suid
, sgid
og “klæbrig” i stedet for x
post: suid
er s
eller S
i stedet for brugerens x
er sgid
s
eller S
i stedet for gruppens x
, og” sticky “er t
eller T
i stedet for andres x
. Et lille bogstav angiver, at både den specielle bit og den eksekverbare bit er indstillet; et stort bogstav angiver, at kun den specielle bit er indstillet.
De forskellige former for chmod
På grund af den ovenfor beskrevne adfærd bruger de fulde fire cifre i chmod
kan være forvirrende (i det mindste viser det sig, at jeg var forvirret). Det er nyttigt, når du vil indstille specielle bit samt tilladelsesbit; Ellers ryddes bitene, hvis du manipulerer en fil, bevares, hvis du manipulerer en mappe. Så chmod 2750
sikrer, at du får mindst sgid
og nøjagtigt u=rwx,g=rx,o=
; men chmod 0750
sletter ikke nødvendigvis de specielle bits.
Brug af numeriske tilstande i stedet for tekstkommandoer ([ugo][=+-][rwxXst]
) er sandsynligvis mere et tilfælde af vane og formålet med kommandoen. Når du først er vant til at bruge numeriske tilstande, er det ofte lettere at bare angive den fulde tilstand på den måde; og det er nyttigt at kunne tænke på tilladelser ved hjælp af numeriske tilstande, da mange andre kommandoer kan bruge dem (install
, mknod
…
Nogle tekstvarianter kan være nyttige: hvis du blot vil sikre, at en fil kan udføres af nogen, vil chmod a+x
gøre det, uanset hvad de andre tilladelser er. Ligeledes +X
tilføjer kun udførelsestilladelsen, hvis en af udførelsestilladelserne allerede er indstillet, eller filen er en mappe; dette kan være praktisk til gendannelse af tilladelser globalt uden at skulle have specielle sagsfiler v. kataloger. Således svarer chmod -R ug=rX,u+w,o=
til at anvende chmod -R 750
på alle mapper og eksekverbare filer og chmod -R 640
til alle andre filer.
Kommentarer
- Selvom de andre svar var ret gode, brugte du virkelig tid på at besvare dette spørgsmål. Tak.
- På * BSD-mapper opfører sig som om deres
sgid
bit altid var indstillet, uanset dens faktiske værdi. På FreeBSD kansuid
bit konfigureres til at handle analogt medsgid
(dvs. filer og underkataloger oprettet inde vil have den samme ejer som biblioteket ), forudsat at det underliggende filsystem understøtter det, og er monteret med indstillingensuiddir
. - ”
+X
tilføjer kun udførelsestilladelsen, hvis en af udførelsestilladelserne allerede er indstillet eller filen er en mappe ” tak du @ stephen-kitt mangler ” er allerede indstillet ” dokumentation kaster mig virkelig for en løkke!
Svar
Så tilladelser i Linux er meget vigtige. Jeg vil prøve at lave en kort forklaring.
For stykker af en filtilstand
Hver Unix-fil har et sæt tilladelser, der bestemmer, om du kan læse, skrive eller køre filen. Kørsel af ls -l viser tilladelserne. Her er et eksempel på en sådan skærm:
-rw-r--r-- 1 user somegroup 7041 Mar 26 19:34 somefile
Jeg vedhæfter et billede af stykker af en filtilstand:
Type kan være anderledes. For eksempel:
- d (bibliotek)
- c (karakterenhed)
- l (symlink)
- p (navngivet rør)
- s (stikkontakt)
- b (blokeringsenhed)
- D (dør, ikke almindelig på Linux-systemer, men er blevet porteret)
Hvis du vil indstille nogle tilladelser til alle biblioteker, kan du bruge R-attribut, for eksempel:
chmod -R 777 /some/directory/
For chmod 777 vs 0777
chmod
kommandoen forventer normalt input for at være et oktalt tal, henviser det førende nul til værdien af den klæbende / sgid / suid bit triplet. I C ville det dog gøre en forskel, da 777
ville blive oversat til 01411
(oktal) og således indstille den klæbende bit (se chmod(2)
man-siden), læs tilladelser for ejer og eksekverbar bit for gruppe og andre (hvilket er en ret mærkelig kombination).
EDIT 1
Jeg fandt et andet billede om Linux-tilladelser, og jeg vil vedhæfte for at forstå det lettere:
Kommentarer
- Du tager forkert med 777 vs 0777. Begge er oktale (decimal giver alligevel ingen mening i i dette tilfælde), men i form med fire tegn indstiller det første ciffer de specielle bits (klæbrig & setuid).
- @orion Lejlighedsvis er det faktisk sandt, for eksempel i en C-lignende kode
chmod(777)
svarer faktisk til at kørechmod 1411
(dvs.chmod
kommando med argument1411
). - … som i tilfælde af syscall (eller dets indpakning) og binær med samme navn kan være lidt forvirrende.
- Python Master Race løste dette baglæns problem ved at forbyde alle ” numre “, der starter med 0 , der tvinger brugeren til at være eksplicit, hvis de vil have noget andet end decimal, f.eks hex:
0x1FF
, binært:0b111111111
eller oktalt:0o777
. PYTHON POWER - Billedkilde?
Svar
d
betyder, at det er et bibliotek, hvis du har en fil, er det -
, og hvis det er et link, finder du et l
. Det kan ikke indstilles / frakobles.
Hvis du bruger 0777 som tilladelse, giver du fuld kontrol (læs + skriv + udfør) til hver bruger / gruppe i systemet. Det er en doven måde at løse problemer, når du har brugere / grupper, der ikke kan få adgang til mapper / filer.
For eksempel, hvis du viser indholdet i et bibliotek og får dette:
-rw-r--r-- 1 root root 42596 jun 7 2012 preloadable_libintl.so
preloadable_libintl.so er en fil, der ejes af brugerrod og grupperot. ejeren har læse- og skriveadgang, gruppen har kun læseadgang, og enhver anden bruger har læseadgang. Dette kan oversættes som 644.
Hvis jeg ændrer det til 777, vil det se sådan ud:
-rwxrwxrwx 1 root root 42596 jun 7 2012 preloadable_libintl.so
Svar
Efter at have fået besvaret mit spørgsmål her og undersøgt resultatet, fandt jeg en artikel, der forklarer det hele meget godt. Jeg vil gerne dele nogle dele af denne artikel her til fremtidige referencer.
Visningstilladelser
For at bruge chmod
til at ændre tilladelser til en fil eller mappe skal du først vide, hvad den aktuelle er adgangstilstand er. Du kan se indholdet af en mappe i terminalen ved at cd
til denne mappe og derefter bruge:
$ ls -l
-l
-afbryderen er vigtig, fordi brug af ls
uden den kun viser navnene på filer eller mapper i biblioteket.
Nedenfor er et eksempel på brug af ls -l
i min hjemmekatalog:
total 128 drwxr-xr-x 2 peter users 4096 Jul 5 21:03 Desktop drwxr-xr-x 6 peter users 4096 Jul 5 17:37 Documents drwxr-xr-x 2 peter users 4096 Jul 5 13:45 Downloads drwxr-xr-x 2 peter users 4096 Jun 24 03:36 Movies drwxr-xr-x 2 peter users 4096 Jun 24 03:38 Music drwxr-xr-x 2 peter users 4096 Jun 26 00:09 Pictures -rw-r--r-- 1 peter users 354 Jul 6 17:15 chmodtest
Hvad kolonnerne betyder
Den første kolonne er typen af hver fil:
-
-
angiver en normal fil. -
d
betegner en mappe, dvs. en mappe, der indeholder andre filer eller mapper. -
p
angiver et navngivet rør (også kendt som FIFO -
l
betegner et symbolsk link.
Bogstaverne efter det er tilladelserne, denne første kolonne er hvad Vi vil være mest interesserede i. Den anden er, hvor mange links der er i en fil, det kan vi ignorere det sikkert. Den tredje kolonne har to værdier / navne: Den første (i mit eksempel “peter”) er navnet på den bruger, der ejer filen. Den anden værdi (“brugere” i eksemplet) er den gruppe, som ejeren tilhører (Læs mere om grupper).
Den næste kolonne er størrelsen på filen eller biblioteket i byte og information efter det er datoer og tidspunkter, hvor filen eller biblioteket sidst blev ændret, og selvfølgelig navnet på filen eller biblioteket.
Hvad tilladelserne betyder
De første tre bogstaver efter den første -
eller d
, er de tilladelser, som ejeren har. De næste tre bogstaver er tilladelser, der gælder for gruppen. De sidste tre bogstaver er de tilladelser, der gælder for alle andre.
Hvert sæt med tre bogstaver består af r
w
og x
. r
er altid i første position, w
er altid i anden position, og x
er altid i tredje position. r
er læsetilladelsen, w
er skrivetilladelsen, og x
er udførelsen tilladelse. Hvis der er en bindestreg (-
) i stedet for et af disse bogstaver, betyder det, at tilladelsen ikke gives, og hvis brevet er til stede, gives det.
Mapper
I tilfælde af mapper kan funktionsbitene fortolkes som følger:
-
r
(læs) står for evnen til at læse indholdsfortegnelsen i det givne bibliotek, -
w
(skriv) står for evnen til at skrive indholdsfortegnelsen i det givne bibliotek (Opret nye filer, mapper; omdøb, slet eksisterende filer, mapper), hvis og kun hvis execute bit er indstillet. Ellers er denne tilladelse meningsløs. -
x
(execute) står for muligheden for at komme ind i den givne mappe med kommandocd og få adgang til filer, mapper i den mappe.
Ændring af tilladelser ved hjælp af kommandoen chmod
chmod
er en kommando i Linux og andre Unix-lignende operativsystemer. Det giver dig mulighed for at ændre tilladelser (eller adgangstilstand) til en fil eller bibliotek.
Du kan ændre tilladelser på to forskellige måder: – Tekstbaseret chmod
– Nummerbaseret chmod
Tekstmetode
For at ændre tilladelses-eller adgangstilstand for en fil bruger vi chmod-kommandoen i en terminal. Nedenfor er kommandoen “s generelle struktur:
chmod who=permissions filename
Hvor der er nogen fra en række bogstaver, og hver betyder, hvem du skal give tilladelse til De er som følger:
u - The user that owns the file. g - The group the file belongs to. o - The other users i.e. everyone else. a - all of the above - use this instead of having to type ugo.
Tilladelserne er de samme som allerede diskuteret (r
, w
og x
).
Kommandoen chmod giver os mulighed for at tilføje og trække tilladelser fra et eksisterende sæt ved hjælp af + eller – i stedet Dette er forskelligt fra ovenstående kommandoer, som i det væsentlige omskriver tilladelserne (dvs. at ændre en tilladelse fra r--
til rw-
, skal du stadig medtage r
samt w
efter =
i chmod
kommando. Hvis du gik glip af r
, ville det fjerne r
tilladelse, da de bliver omskrevet med =. Usin g + og – undgå dette ved at tilføje eller fjerne det nuværende sæt tilladelser).
Talmetode
chmod
kan også indstille tilladelser ved hjælp af tal.
Brug af tal er en anden metode, der giver dig mulighed for at redigere tilladelserne for alle tre ejere, grupper og andre på samme tid. Denne grundlæggende struktur for koden er denne:
chmod xxx file/directory
Hvor xxx er et 3-cifret tal, hvor hvert ciffer kan være alt fra 1 til 7. Det første ciffer gælder for tilladelser til ejer gælder det andet ciffer for tilladelser til gruppen, og det tredje ciffer gælder for tilladelser for alle andre.
I denne nummernotation har værdierne r, w og x deres eget nummer værdi:
r=4 w=2 x=1
For at komme med et trecifret tal skal du overveje, hvilke tilladelser du vil have en ejer, en gruppe og en bruger og derefter alt deres værdier op. Sig for eksempel, at jeg ville give ejeren af et bibliotek læseskrivnings- og eksekveringsrettigheder, og jeg ville gruppere og alle andre bare have læst og udført tilladelser. Jeg ville komme med de numeriske værdier som sådan:
Owner: rwx = 4+2+1=7 Group: r-x = 4+0+1=5 (or just 4+1=5) Other: r-x = 4+0+1=5 (or just 4+1=5) Final number = 755 $ chmod 755 filename
Dette svarer til at bruge følgende:
chmod u=rwx filename chmod go=rx filename
De fleste mapper / mapper er indstillet til 755 for at tillade læsning og skrivning og udførelse til ejeren, men nægter at skrive til alle andre, og filer er normalt 644 for at tillade læsning og skrivning for ejeren, men bare læsning For alle andre henvises til den sidste note om manglen på x-tilladelser med ikke-eksekverbare filer – det er den samme aftale her.
Kommentarer
- Bare at kopiere tekst fra en anden artikel er – i det mindste – uhøfligt. Måske også en overtrædelse af ophavsretten. Hvis det ikke kun kopieres, eller hvis du virkelig har brugt små dele (copyright-venlig takket være fair brug), skal du i det mindste tilføje et link til den artikel, du henviser til / citerer.
Svar
For d-spørgsmål
Dette fortæller dig Unix-filtypen. Som standard har Unix kun 3 typer filer. De er:
-
-
– Almindelig fil -
d
– Directory-fil - Speciel fil (med 5 undertyper):
-
b
– Bloker fil -
c
– Tegnenhedsfil -
p
– Navngivet rørfil eller bare rørfil -
l
– Symbolisk linkfil -
s
– Socket-fil
-
Læs mere her: Filtyper i Linux / Unix forklares detaljeret
0777
vs 777
Sticky bit angivet eller ej. Når der er indstillet en biblioteks sticky bit, behandles filsystemet filerne i sådanne kataloger på en speciel måde, så kun filens ejer, katalogets ejer eller root-brugeren kan omdøbe eller slette filen. Uden den sticky bit indstillet, kan enhver bruger med skrive- og eksekveringsrettigheder til biblioteket omdøbe eller slette indeholdte filer, uanset filens ejer.
0777
indstiller 777 filtilladelser , og den sticky bit til 0 – ingen specielle tilstande.
777
indstiller 777 filtilladelser uden at ændre den sticky bit.
Læs mere: sticky bit og chmod
Kommentarer
- Bedre: men det giver stadig intet, som de andre svar ikke har ‘ t allerede dækket …
- ( 1) Der er tre grundlæggende filtyper: almindelige filer, mapper og alt andet. Hvad? Hvor får du det her? I den store ordning med ting er almindelige filer og mapper ret ens. Navngivne rør og symbolske links ligner mere almindelige filer og mapper, end de er som enhedsfiler eller sockets. (2) Tror du
chmod 777
ikke rydder sætuid, setgid og klæbrig bits? Prøv det. - Unix har 7 filtyper, ikke 3.
Svar
To relaterede ting, som jeg altid har fundet forvirrende og ikke er berørt ovenfor, er:
I) hvad en “ 1 ” gør:
I chmod
: hver “1” da giver mulighed for tilladelse, f.eks. chmod 777 da gør alt, men vær opmærksom, fordi
i umask
: hver “1” dis giver mulighed for tilladelse, f.eks. umask 777 dis kan alle.
II ) fil “ejere” vs.fil “brugere” :
Med andre ord er der brugere, der “ejer” og brugere, som “bruger” .
Hver fil er ejet på samme tid af to enheder:
- en enkelt, specifik bruger og
- en enkelt, specifik gruppe (af en eller flere brugere).
Derfor kan hver fil være brugt af en bestemt bruger på tre måder:
1) Direkte som brugeren, der ejer fil,
2) i direkte, som medlem af gruppen, der ejer filen, og
3 muligvis som en anden.
Ellers , svar ovenfor, gør et godt stykke arbejde! Tak til alle.
S_IFDIR
. Du bruger ikke ‘ til at indstille filtilstanden, menstat()
-funktionen returnerer faktisk værdien 040750 fordrwxr-x---
.