Forståelse af UNIX-tilladelser og filtyper

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 for 777 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

  • Prøv næste gang kun at stille et spørgsmål, flere spørgsmål er normalt dårlige til henvisning og næsten aldrig adresseret alle på samme tid.
  • @Kiwy I ‘ undskyld, jeg troede, jeg ‘ jeg gjorde det som dette, fordi det vedrører det samme emne. Hvis du vil, kan du foreslå en bedre titel på mit spørgsmål for at forbedre det ‘ s reference.
  • I øvrigt, værdien for ” d ” er 040000 – det kan findes i headerfiler under navnet S_IFDIR. Du bruger ikke ‘ til at indstille filtilstanden, men stat() -funktionen returnerer faktisk værdien 040750 for drwxr-x---.
  • @jamesqf Faktisk, nu jeg forstår, hvordan de oktale koder kortlægges, er det ‘ lettere for mig at tænke på den måde .
  • @ Peter: der er ingen dumme spørgsmål – bare dumheder, der ikke ‘ ikke lærer, fordi de ‘ bange for at stille.

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 med mknod
  • c: specialfil til tegn, kan også oprettes med mknod (se /dev for eksempler)
  • d: katalog, kan oprettes med mkdir
  • l: symbolsk link, kan oprettes med ln -s
  • p: navngivet rør, kan oprettes med mkfifo
  • s: stikkontakt, kan oprettes med nc -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 (almindeligvis root)
  • 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 kan suid bit konfigureres til at handle analogt med sgid (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 indstillingen suiddir.
  • +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:

indtast billedebeskrivelse her

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: UNIX-filtilladelser

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øre chmod 1411 (dvs. chmod kommando med argument 1411).
  • … 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.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *