Förstå UNIX-behörigheter och filtyper

Jag har aldrig riktigt fått reda på hur chmod fungerade fram till idag. Jag följde en handledning som förklarade en stor sak för mig.

Jag har till exempel läst att du har tre olika behörighetsgrupper:

  • ägare (u)
  • grupp (g)
  • alla (o)

Baserat på dessa tre grupper vet jag nu att:

  • Om filen ägs av användaren bestämmer användarbehörigheterna åtkomsten .
  • Om gruppen i filen är densamma som användarens grupp bestämmer gruppbehörigheten åtkomsten.
  • Om användaren inte är filägare och inte är i gruppen används det andra tillståndet.

Jag har också lärt mig att du har följande behörigheter:

  • läs (r)
  • skriv (w)
  • kör ()

Jag skapade en katalog för att testa min nyförvärvade kunskap:

mkdir test 

Sedan Jag gjorde några tester:

chmod u+rwx test/ # drwx------ chmod g+rx test/ # drwxr-x--- chmod u-x test/ # drw-r-x--- 

Efter att ha lurat en stund tror jag att jag äntligen fick tag på chmod och hur du ställer in behörighet med det här kommandot.


Men …

Jag har fortfarande några frågor:

  • Vad gör d i början står för?
  • Vad heter och använder den innehållande platsen och vilka andra värden kan den innehålla?
  • Hur kan jag ställa in och avmarkera det?
  • Vad är värdet för denna d? (Eftersom du bara har 7 = 4 + 2 + 1 7 = 4 + 2 + 1 7 = 4 + 2 + 1)
  • Varför använder människor ibland 0777 istället för 777 för att ställa in sina behörigheter?

Men eftersom jag inte borde ställa flera frågor, försöker jag ställa det i en fråga.

I UNIX-baserade system som alla Linux-distributioner angående behörigheterna, vad står den första delen (d) för och vad är det använd för den här delen av behörigheterna?

Kommentarer

  • Försök nästa gång bara ställa en fråga, flera frågor är vanligtvis dåliga för referenser och nästan aldrig adresserat alla samtidigt.
  • @Kiwy Jag ’ jag är ledsen, jag trodde att jag ’ d gjorde det så här eftersom det gäller samma ämne. Om du vill kan du föreslå en bättre titel för min fråga för att förbättra den ’ referens.
  • För övrigt, värdet för ” d ” är 040000 – det finns i rubrikfiler under namnet S_IFDIR. Du använder inte ’ när du ställer in filläget, men funktionen stat() returnerar faktiskt värdet 040750 för drwxr-x---.
  • @jamesqf Nu när jag förstår hur de oktala koderna kartläggs är det ’ enklare för mig att tänka på det sättet .
  • @Peter: det finns inga dumma frågor – bara dumheter som ’ inte lär sig eftersom de ’ rädd att fråga.

Svar

Jag svarar på dina frågor i tre delar: filtyper, behörigheter, och använda fall för de olika formerna av chmod.

Filtyper

Det första tecknet i ls -l output representerar filtypen; d betyder att det är en katalog. Den kan inte ställas in eller av, det beror på hur filen skapades. Du hittar den fullständiga listan över filtyper i ls-dokumentationen ; de du sannolikt kommer att stöta på är

  • -: ”vanlig” fil, skapad med alla program som kan skriva en fil
  • b: blockera specialfil, vanligtvis disk- eller partitionsenheter, kan skapas med mknod
  • c: specialfil för tecken, kan också skapas med mknod (se /dev för exempel)
  • d: katalog, kan skapas med mkdir
  • l: symbolisk länk, kan skapas med ln -s
  • p: namnet pipe, kan skapas med mkfifo
  • s: uttag, kan skapas med nc -U
  • D: dörr , skapad av vissa serverprocesser på Solaris / openindiana.

Behörigheter

chmod 0777 används för att ställa in alla behörigheter i en chmod -körning, snarare än att kombinera ändringar med u+ etc.Var och en av de fyra siffrorna är ett oktalt värde som representerar en uppsättning behörigheter:

  • suid, sgid och ”klibbig” (se nedan)
  • användarbehörigheter
  • gruppbehörigheter
  • ”andra” behörigheter

Den oktala värdet beräknas som summan av behörigheterna:

  • ”läs” är 4
  • ”skriv” är 2
  • ”exekvera” är 1

För den första siffran:

  • suid är 4; binärer med denna bituppsättning körs som deras ägare (vanligtvis root)
  • sgid är 2; binärer med denna bituppsättning körs som deras ägargrupp (detta användes för spel så att höga poäng kunde delas, men det är ofta en säkerhetsrisk i kombination med sårbarheter i spelen), och filer som skapas i kataloger med denna bituppsättning tillhör katalogens ägargrupp som standard (detta är praktiskt för att skapa delade mappar)
  • “klibbig” (eller “begränsad radering”) är 1; filer i kataloger med denna bituppsättning kan bara raderas av deras ägare, katalogens ägare eller root (se /tmp för ett vanligt exempel av detta).

Se chmod manpage för mer information. Observera att i allt detta ignorerar jag andra säkerhetsfunktioner som kan ändra användarnas rättigheter för filer (SELinux, ACL-filer …).

Specialbitar hanteras olika beroende på filtyp (vanlig fil eller katalog) och det underliggande systemet. (Detta nämns i chmod manpage.) På systemet testade jag detta (med coreutils 8.23 på en ext4 filsystem, kör Linux-kärnan 3.16.7-ckt2), beteendet är som följer. För en fil rensas alltid specialbitarna såvida de inte uttryckligen anges, så chmod 0777 motsvarar chmod 777, och båda kommandona rensar specialbitar och ge alla fullständiga behörigheter för filen. För en katalog rensas specialbitarna aldrig helt med fyrsiffrigt numeriskt formulär, så i själva verket motsvarar chmod 0777 också chmod 777 men det är vilseledande eftersom några av de speciella bitarna kommer att förbli som de är. (En tidigare version av detta svar fick fel.) För att rensa specialbitar i kataloger måste du använda u-s, g-s och / eller o-t eller anger ett negativt numeriskt värde så att chmod -7000 rensar alla specialbitar i en katalog.

I ls -l -utdata visas suid, sgid och ”klibbig” i stället för x post: suid är s eller S istället för användarens x är sgid s eller S istället för gruppens x, och” sticky ”är t eller T istället för andras x. En liten bokstav indikerar att både specialbiten och den körbara biten är inställda; en stor bokstav indikerar att endast den speciella biten är inställd.

De olika formerna av chmod

På grund av det beteende som beskrivs ovan använder du hela fyra siffrorna i chmod kan vara förvirrande (det visar sig åtminstone att jag var förvirrad). Det är användbart när du vill ställa in både specialbitar och behörighetsbitar. annars rensas bitarna om du manipulerar en fil, bevaras om du manipulerar en katalog. Så chmod 2750 säkerställer att du får minst sgid och exakt u=rwx,g=rx,o=; men chmod 0750 raderar inte nödvändigtvis specialbitarna.

Använda numeriska lägen istället för textkommandon ([ugo][=+-][rwxXst]) är förmodligen mer ett fall av vana och syftet med kommandot. När du väl är van vid att använda numeriska lägen är det ofta lättare att bara ange hela läget på det sättet; och det är användbart att kunna tänka på behörigheter med hjälp av numeriska lägen, eftersom många andra kommandon kan använda dem (install, mknod … ).

Vissa textvarianter kan vara till nytta: om du bara vill se till att en fil kan köras av någon, kommer chmod a+x att göra det, oavsett vad de andra behörigheterna är. På samma sätt lägger +X till exekveringsbehörigheten endast om en av exekveringsbehörigheterna redan är inställda eller filen är en katalog; detta kan vara praktiskt för att återställa behörigheter globalt utan att behöva specialfiler mot kataloger. chmod -R ug=rX,u+w,o= motsvarar alltså chmod -R 750 på alla kataloger och körbara filer och chmod -R 640 till alla andra filer.

Kommentarer

  • Även om de andra svaren var ganska bra spenderade du verkligen lite tid på att svara på den här frågan. Tack.
  • På * BSD-kataloger beter sig som om deras sgid -bit alltid var inställd, oavsett dess faktiska värde. På FreeBSD kan suid -biten konfigureras för att fungera analogt till sgid (dvs. filer och underkataloger som skapas inuti kommer att ha samma ägare som katalogen ), förutsatt att det underliggande filsystemet stöder det och är monterat med alternativet suiddir.
  • +X lägger till exekveringsbehörigheten endast om en av exekveringsbehörigheterna redan är inställd eller filen är en katalog ” tack du @ stephen-kitt saknar ” är redan inställd ” Dokumentationen kastade mig verkligen för en slinga!

Svar

Så, behörigheter i Linux är mycket viktiga. Jag kommer att försöka göra en kort förklaring.

För delar av ett filläge

Varje Unix-fil har en uppsättning behörigheter som avgör om du kan läsa, skriva eller köra filen. Att köra ls -l visar behörigheterna. Här är ett exempel på en sådan skärm:

-rw-r--r-- 1 user somegroup 7041 Mar 26 19:34 somefile 

Jag bifogar en bild av delar av ett filläge:

ange bildbeskrivning här

Typ kan vara annorlunda. Till exempel:

  • d (katalog)
  • c (teckenenhet)
  • l (symlink)
  • p (namngiven rör)
  • s (uttag)
  • b (blockeringsenhet)
  • D (dörr, inte vanligt på Linux-system, men har portats)

Om du vill ställa in några behörigheter för alla kataloger kan du använda R-attribut, till exempel:

chmod -R 777 /some/directory/ 

För chmod 777 vs 0777

Kommandot chmod förväntar sig vanligtvis ingången för att vara ett oktalt tal, hänvisar den ledande nollan till värdet på den klibbiga / sgid / suid bit-tripletten. I C skulle det dock göra skillnad, eftersom 777 skulle översättas till 01411 (oktal) och därmed ställa in den klibbiga biten (se chmod(2) man-sidan), läsbehörigheter för ägare och körbar bit för grupp och andra (vilket är en ganska konstig kombination).

EDIT 1

Jag hittade en annan bild om Linux-behörigheter och jag kommer att bifoga för att förstå lättare: UNIX-filbehörigheter

Kommentarer

  • Du har fel när det gäller 777 vs 0777. Båda är oktala (decimal ger ingen mening i alla fall detta fall), men i fyrsiffrig form anger den första siffran specialbitarna (klibbig & setuid).
  • @orion Ibland är det faktiskt sant, t.ex i en C-liknande kod chmod(777) skulle faktiskt motsvara att köra chmod 1411 (dvs. chmod kommando med argument 1411).
  • … vilket i fallet med syscall (eller dess omslag) och binär med samma namn kan vara lite förvirrande.
  • Python Master Race löste detta bakåtproblem genom att förbjuda alla ” siffror ” som börjar med 0 , tvingar användaren att vara explicit om de vill ha något annat än decimal, t.ex. hex: 0x1FF, binärt: 0b111111111 eller oktalt: 0o777. PYTHON POWER
  • Bildkälla?

Svar

d betyder att det är en katalog, om du har en fil är det - och om det är en länk hittar du en l. Det kan inte ställas in / av.

Om du använder 0777 som behörighet ger du fullständig kontroll (läs + skriv + kör) till alla användare / grupper i systemet. Det är ett lat sätt att lösa problem när du har användare / grupper som inte kan komma åt kataloger / filer.

Till exempel om du listar innehållet i en katalog och får det här:

-rw-r--r-- 1 root root 42596 jun 7 2012 preloadable_libintl.so

preloadable_libintl.so är en fil som ägs av användarrot och grupprot. ägaren har läs- och skrivåtkomst, gruppen har endast läsbehörighet och alla andra användare har läsbehörigheter. Detta kan översättas som 644.

Om jag ändrar det till 777 kommer det att se ut så här:

-rwxrwxrwx 1 root root 42596 jun 7 2012 preloadable_libintl.so

Svar

Efter att ha fått min fråga besvarad här och undersökt resultatet hittade jag en artikel som förklarar allt mycket bra. Jag skulle vilja dela några delar av den här artikeln här för framtida referenser.

Visningsbehörigheter

För att använda chmod för att ändra behörigheter för en fil eller katalog, måste du först veta vad den aktuella åtkomstläget är. Du kan visa innehållet i en katalog i terminalen genom att cd till den katalogen och sedan använda:

$ ls -l 

-l -omkopplaren är viktig eftersom du använder ls utan att det bara visar namnen på filer eller mappar i katalogen.

Nedan följer ett exempel på att använda ls -l i min hemkatalog:

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 

Vad kolumnerna betyder

Den första kolumnen är typen av varje fil:

  • - betecknar en normal fil.
  • d betecknar en katalog, dvs. en mapp som innehåller andra filer eller mappar.
  • p betecknar ett namngivet rör (aka FIFO ).
  • l betecknar en symbolisk länk.

Bokstäverna därefter är behörigheterna, den här första kolumnen är vad vi kommer att vara mest intresserade av. Den andra är hur många länkar det finns i en fil, det kan vi ignorera det säkert. Den tredje kolumnen har två värden / namn: Den första (i mitt exempel ”peter”) är namnet på användaren som äger filen. Det andra värdet (”användare” i exemplet) är den grupp som ägaren tillhör (Läs mer om grupper).

Nästa kolumn är storleken på filen eller katalogen i byte och information därefter är datum och tider som filen eller katalogen senast ändrades och naturligtvis namnet på filen eller katalogen.

Vad behörigheterna betyder

De första tre bokstäverna, efter de första - eller d, är behörigheter som ägaren har. De följande tre bokstäverna är behörigheter som gäller för gruppen. De sista tre bokstäverna är behörigheter som gäller för alla andra.

Varje uppsättning med tre bokstäver består av r w och x. r är alltid i första position, w är alltid i andra position, och x är alltid i tredje position. r är läsbehörigheten, w är skrivbehörigheten och x är körningen lov. Om det finns ett bindestreck (-) i stället för en av dessa bokstäver betyder det att tillståndet inte beviljas, och om brevet är närvarande beviljas det.

Mappar

Vid mappar kan lägesbitarna tolkas enligt följande:

  • r (läs) står för förmågan att läsa innehållsförteckningen för den angivna katalogen,
  • w (skriv) står för förmågan att skriva innehållsförteckningen för den angivna katalogen (skapa nya filer, mappar, byta namn på, ta bort befintliga filer, mappar) om och bara om exekveringsbit är inställt. Annars är detta tillstånd meningslöst.
  • x (exekvera) står för möjligheten att komma in i den angivna katalogen med kommandocd och komma åt filer, mappar i den katalogen.

Ändra behörigheter med kommandot chmod

chmod är ett kommando i Linux och andra Unix-liknande operativsystem. Det låter dig ändra behörigheterna (eller åtkomstläget) för en fil eller katalog.

Du kan ändra behörigheter på två olika sätt: – Textbaserad chmod – Nummerbaserat chmod

Textmetod

För att ändra behörighets- eller åtkomstläge för en fil använder vi kommandot chmod i en terminal. Nedan är kommandot ”allmänna struktur:

chmod who=permissions filename 

Var Vem är någon från en rad bokstäver, och var och en anger vem du ska ge tillstånd till De är som följer:

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. 

Behörigheterna är desamma som redan diskuterats (r, w och x).

Med kommandot chmod kan vi lägga till och subtrahera behörigheter från en befintlig uppsättning med + eller – istället Detta skiljer sig från ovanstående kommandon, som i huvudsak skriver om behörigheterna (dvs. att ändra en behörighet från r-- till rw- , du måste fortfarande inkludera r samt w efter = i chmod -kommando. Om du missar r skulle det ta bort r som de skrivs om med =. Usin g + och – undvik detta genom att lägga till eller ta bort den aktuella uppsättningen behörigheter).

Nummermetod

chmod kan också ställa in behörigheter med hjälp av siffror.

Att använda siffror är en annan metod som låter dig redigera behörigheterna för alla tre ägare, grupp och andra samtidigt. Denna grundläggande struktur för koden är den här:

chmod xxx file/directory 

Där xxx är ett tresiffrigt nummer där varje siffra kan vara allt från 1 till 7. Den första siffran gäller till behörigheter för ägare, den andra siffran gäller behörigheter för gruppen och den tredje siffran gäller behörigheter för alla andra.

I denna siffernotation har värdena r, w och x sitt eget nummer värde:

r=4 w=2 x=1 

För att komma med ett tresiffrigt nummer måste du överväga vilka behörigheter du vill att en ägare, grupp och användare ska ha och sedan totalt deras värden uppåt. Till exempel, säg att jag ville ge ägaren till en katalog läs- och körbehörigheter, och jag ville gruppera och alla andra för att bara ha läst och utför behörigheter. Jag skulle komma med de numeriska värdena så:

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 

Detta motsvarar att använda följande:

chmod u=rwx filename chmod go=rx filename 

De flesta mappar / kataloger är inställda på 755 för att tillåta läsning och skrivning och exekvering för ägaren, men nekar att skriva till alla andra, och filer är normalt 644 för att tillåta läsning och skrivning för ägaren men bara läsning För alla andra, se den sista anteckningen om bristen på x-behörigheter med icke körbara filer – det är samma sak här.

Kommentarer

  • Att bara kopiera text från en annan artikel är – åtminstone – oförskämd. Kanske också upphovsrättsintrång. Om det inte bara kopieras eller om du verkligen använde små delar (upphovsrättsvänligt tack vare rättvis användning), lägg till åtminstone en länk till den artikel du refererar till / citerar.

Svara

För d-frågorna

Detta berättar Unix-filtypen. Som standard har Unix bara 3 typer av filer. De är:

  • - – Vanlig fil
  • d – Katalogfil
  • Specialfil (med 5 undertyper):
    • b – Blockera fil
    • c – Teckenenhetsfil
    • p – Namngiven rörfil eller bara rörfil
    • l – Symbolisk länkfil
    • s – Socketfil

Läs mer här: Filtyper i Linux / Unix förklaras i detalj

0777 vs 777

Sticky bit specificerad eller inte. När en katalogs klibbiga bit är inställd behandlar filsystemet filerna i sådana kataloger på ett speciellt sätt så att endast filens ägare, katalogens ägare eller rotanvändaren kan byta namn på eller ta bort filen. Utan den klibbiga biten ställa in, kan alla användare med skriv- och körbehörigheter för katalogen byta namn på eller ta bort innehållna filer, oavsett filens ägare.

0777 anger 777 filbehörigheter och den klibbiga biten till 0 – inga speciella lägen.

777 ställer in 777 filbehörigheter utan att ändra den klibbiga biten.

Läs mer: sticky bit och chmod

Kommentarer

  • Bättre: men det erbjuder ändå ingenting som de andra svaren inte har ’ t redan täckt …
  • ( 1) Det finns tre grundläggande filtyper: vanliga filer, kataloger och allt annat. Vad? Var får du det här? I det stora schemat av saker är vanliga filer och kataloger ganska lika. Namngivna rör och symboliska länkar liknar mer vanliga filer och kataloger än de är som enhetsfiler eller uttag. (2) Tror du att chmod 777 inte tar bort setuid, setgid och klibbiga bitar? Prova.
  • Unix har 7 filtyper, inte 3.

Svar

Två relaterade saker som jag alltid har hittat förvirrande och inte berört ovan är:


I) vilken ” 1 ” gör:

I chmod : varje ”1” sv gör det möjligt för en behörighet, t.ex. chmod 777 sv kan alla, men var uppmärksam eftersom
i umask : varje ”1” dis gör det möjligt för en behörighet, t.ex. umask 777 dis kan alla.


II ) -fil ”ägare” vs.fil ”användare” :

Med andra ord finns det användare som ”äger” och användare som ”använder” .

Varje fil är ägd samtidigt av två enheter:

  • en enda specifik användare , och
  • en enda, specifik grupp (av en eller flera användare).

Därför kan varje fil vara använde av en specifik användare på tre sätt:

1) Direkt, som användaren som äger fil,
2) i direkt, som medlem i gruppen som äger filen, och
3 ) eventuellt som någon annan.


Annars , svar ovan, gör ett bra jobb! Tack till alla.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *