Inzicht in UNIX-machtigingen en bestandstypen

Ik “heb nooit echt begrepen hoe chmod tot vandaag werkte. Ik volgde een tutorial die me veel uitlegde.

Ik heb bijvoorbeeld “gelezen dat je” drie verschillende toestemmingsgroepen hebt:

  • eigenaar (u)
  • groep (g)
  • iedereen (o)

Op basis van deze drie groepen weet ik nu dat:

  • Als het bestand eigendom is van de gebruiker, bepalen de gebruikersrechten de toegang .
  • Als de groep van het bestand dezelfde is als de groep van de gebruiker, bepaalt de groepstoestemming de toegang.
  • Als de gebruiker niet de eigenaar van het bestand is, en ook niet in de groep, dan wordt de andere toestemming gebruikt.

Ik “heb ook vernomen” dat je de volgende rechten hebt:

  • lees (r)
  • schrijven (w)
  • uitvoeren ()

Ik heb een directory gemaakt om mijn nieuw verworven kennis te testen:

mkdir test 

Vervolgens Ik heb een aantal tests gedaan:

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

Na een tijdje rond te hebben gedonder, denk ik dat ik chmod eindelijk onder de knie heb en de manier waarop je toestemming instelt met dit commando.


Maar …

Ik heb nog een paar vragen:

  • Wat doet de d aan het begin staan voor?
  • Wat is de naam en het gebruik van de bevattende slot en welke andere waarden kan het bevatten?
  • Hoe kan ik het in- en uitschakelen?
  • Wat is de waarde voor deze d? (Omdat je maar 7 = 4 + 2 + 1 7 = 4 + 2 + 1 7 = 4 + 2 + 1 hebt)
  • Waarom gebruiken mensen soms 0777 in plaats van 777 om hun rechten in te stellen?

Maar aangezien ik niet meerdere vragen zou moeten stellen, zal ik proberen het in één vraag.

In op UNIX gebaseerde systemen zoals alle Linux-distributies, wat betreft de rechten, waar staat het eerste deel (d) voor en wat is het gebruik voor dit deel van de rechten?

Reacties

  • Probeer de volgende keer maar één vraag te stellen, meerdere vragen zijn meestal slecht om naar te verwijzen en bijna nooit allemaal tegelijk aangesproken.
  • @Kiwy Ik ‘ m sorry, ik dacht dat ik ‘ zou doen het zo omdat het hetzelfde onderwerp betreft. Als je wilt, kun je een betere titel voor mijn vraag voorstellen om de ‘ s referentie te verbeteren.
  • Overigens de waarde voor de ” d ” is 040000 – het is te vinden in headerbestanden onder de naam S_IFDIR. U ‘ gebruikt het niet bij het instellen van de bestandsmodus, maar de functie stat() retourneert feitelijk de waarde 040750 voor drwxr-x---.
  • @jamesqf Nu ik begrijp hoe de octale codes in kaart worden gebracht, is het ‘ eenvoudiger om op die manier na te denken .
  • @Peter: er zijn geen domme vragen – alleen domme vragen die ‘ niet leren omdat ze ‘ opnieuw zijn bang om te vragen.

Antwoord

Ik beantwoord je vragen in drie delen: bestandstypen, toestemmingen, en gebruik gevallen voor de verschillende vormen van chmod.

Bestandstypen

Het eerste teken in ls -l output vertegenwoordigt het bestandstype; d betekent dat het een directory is. Het kan niet worden in- of uitgeschakeld, het hangt af van hoe het bestand is gemaakt. U kunt de volledige lijst met bestandstypen vinden in de ls documentatie ; degenen die je waarschijnlijk tegenkomt zijn

  • -: “normaal” bestand, gemaakt met elk programma dat een bestand kan schrijven
  • b: blok speciaal bestand, meestal schijf- of partitie-apparaten, kan worden gemaakt met mknod
  • c: karakter speciaal bestand, kan ook worden gemaakt met mknod (zie /dev voor voorbeelden)
  • d: directory, kan worden aangemaakt met mkdir
  • l: symbolische link, kan worden gemaakt met ln -s
  • p: named pipe, kan worden gemaakt met mkfifo
  • s: socket, kan worden gemaakt met nc -U
  • D: door , gemaakt door sommige serverprocessen op Solaris / openindiana.

Toestemmingen

chmod 0777 wordt gebruikt om alle rechten in één chmod uitvoering in te stellen, in plaats van wijzigingen te combineren met u+ enz.Elk van de vier cijfers is een octale waarde die een reeks rechten vertegenwoordigt:

  • suid, sgid en “sticky” (zie hieronder)
  • gebruikersrechten
  • groepstoestemmingen
  • “andere” toestemmingen

De octale waarde wordt berekend als de som van de rechten:

  • “lezen” is 4
  • “schrijven” is 2
  • “uitvoeren” is 1

Voor het eerste cijfer:

  • suid is 4; binaire bestanden met deze bitset worden uitgevoerd als hun eigenaar-gebruiker (gewoonlijk root)
  • sgid is 2; binaire bestanden met deze bitset worden uitgevoerd als hun eigenaarsgroep (deze werd gebruikt voor games, zodat hoge scores konden worden gedeeld, maar het is vaak een veiligheidsrisico in combinatie met kwetsbaarheden in de games), en bestanden die in mappen met deze bitset zijn gemaakt, behoren tot de standaard de eigenaarsgroep van mappen (dit is handig voor het aanmaken van gedeelde mappen)
  • “sticky” (of “beperkte verwijdering”) is 1; bestanden in mappen met deze bitset kunnen alleen worden verwijderd door hun eigenaar, de eigenaar van de map, of root (zie /tmp voor een algemeen voorbeeld hiervan).

Zie de chmod manpage voor details. Merk op dat ik bij dit alles andere beveiligingsfuncties negeer die gebruikersrechten voor bestanden (SELinux, bestands-ACLs …) kunnen wijzigen.

Speciale bits worden anders behandeld, afhankelijk van het type bestand (normaal bestand of directory) en het onderliggende systeem. (Dit wordt vermeld in de chmod manpage.) Op het systeem dat ik gebruikte om dit te testen (met coreutils 8.23 op een ext4 bestandssysteem, met Linux kernel 3.16.7-ckt2), is het gedrag als volgt. Voor een bestand worden de speciale bits altijd gewist, tenzij expliciet ingesteld, dus chmod 0777 is gelijk aan chmod 777, en beide opdrachten wissen de speciale bits en geef iedereen volledige machtigingen voor het bestand. Voor een directory worden de speciale bits nooit volledig gewist met behulp van de viercijferige numerieke vorm, dus in feite is chmod 0777 ook gelijk aan chmod 777 maar het is misleidend aangezien sommige van de speciale bits zullen blijven zoals ze zijn. (Een eerdere versie van dit antwoord had dit verkeerd.) Om speciale bits in mappen te wissen, moet u u-s, g-s en / of o-t expliciet of specificeer een negatieve numerieke waarde, dus chmod -7000 wist alle speciale bits in een directory.

In ls -l uitvoer verschijnen suid, sgid en “sticky” in plaats van de x invoer: suid is s of S in plaats van x van de gebruiker, is sgid s of S in plaats van de x van de groep, en” sticky “is t of T in plaats van x. Een kleine letter geeft aan dat zowel de speciale bit als de uitvoerbare bit zijn ingesteld; een hoofdletter geeft aan dat alleen het speciale bit is ingesteld.

De verschillende vormen van chmod

Vanwege het hierboven beschreven gedrag kunnen de volledige vier cijfers in chmod kan verwarrend zijn (het bleek tenminste dat ik in de war was). Dit is handig als u zowel speciale bits als toestemmingsbits wilt instellen; anders worden de bits gewist als u een bestand manipuleert, behouden als u een map manipuleert. Dus chmod 2750 zorgt ervoor dat u ten minste sgid en exact u=rwx,g=rx,o= krijgt; maar chmod 0750 wist niet noodzakelijk de speciale bits.

Numerieke modi gebruiken in plaats van tekstopdrachten ([ugo][=+-][rwxXst]) is waarschijnlijk meer een gewoonte en het doel van de opdracht. Als u eenmaal gewend bent aan het gebruik van numerieke modi, is het vaak gemakkelijker om de volledige modus op die manier te specificeren; en het is handig om permissies te kunnen bedenken met numerieke modi, aangezien veel andere commandos ze kunnen gebruiken (install, mknod … ).

Sommige tekstvarianten kunnen van pas komen: als u er zeker van wilt zijn dat een bestand door iedereen kan worden uitgevoerd, zal chmod a+x dat doen, ongeacht wat de andere machtigingen zijn. Evenzo voegt +X de uitvoeringsmachtiging alleen toe als een van de uitvoeringsmachtigingen al is ingesteld of als het bestand een directory is; dit kan handig zijn voor het wereldwijd herstellen van machtigingen zonder dat u speciale bestanden v. mappen hoeft te gebruiken. chmod -R ug=rX,u+w,o= is dus gelijk aan het toepassen van chmod -R 750 op alle mappen en uitvoerbare bestanden en chmod -R 640 op alle andere bestanden.

Opmerkingen

  • Hoewel de andere antwoorden redelijk goed waren, heb je echt wat tijd besteed aan het beantwoorden van deze vraag. Bedankt.
  • Op * BSD-mappen gedragen zich alsof hun sgid -bit altijd is ingesteld, ongeacht de werkelijke waarde. Op FreeBSD kan de suid -bit worden geconfigureerd om analoog te werken aan sgid (dwz bestanden en submappen die erin zijn gemaakt, hebben dezelfde eigenaar als de map ), op voorwaarde dat het onderliggende bestandssysteem dat ondersteunt, en is aangekoppeld met de suiddir optie.
  • +X voegt de uitvoeringsmachtiging alleen toe als een van de uitvoeringsmachtigingen al is ingesteld of als het bestand een directory is ” bedankt you @ stephen-kitt mist de ” is al ingesteld ” documentatie zorgde echt voor een lus!

Antwoord

Rechten in Linux zijn dus erg belangrijk. Ik zal proberen een korte uitleg te geven.

Voor delen van een bestandsmodus

Elk Unix-bestand heeft een reeks machtigingen die bepalen of u het bestand kunt lezen, schrijven of uitvoeren. Als u ls -l uitvoert, worden de rechten weergegeven. Hier is een voorbeeld van zon display:

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

Ik voeg een afbeelding toe van stukjes van een bestandsmodus:

voer hier een afbeeldingbeschrijving in

Type kan iets anders zijn. Bijvoorbeeld:

  • d (directory)
  • c (character device)
  • l (symlink)
  • p (named pipe)
  • s (socket)
  • b (block device)
  • D (door, niet gebruikelijk op Linux-systemen, maar is geporteerd)

Als u enkele permissies voor alle mappen wilt instellen, kunt u het R-attribuut gebruiken, bijvoorbeeld:

chmod -R 777 /some/directory/ 

Voor chmod 777 vs 0777

Het chmod commando verwacht gewoonlijk de invoer om een octaal getal te zijn, verwijst de voorloopnul naar de waarde van het sticky / sgid / suid bit-triplet. In C zou het echter een verschil maken, aangezien 777 zou worden vertaald naar 01411 (octaal), waardoor de sticky bit wordt ingesteld (zie de chmod(2) man-pagina), leesrechten voor eigenaar en uitvoerbare bit voor groep en anderen (wat een nogal vreemde combinatie is).

EDIT 1

Ik vond een andere afbeelding over Linux-rechten en ik zal deze toevoegen om het gemakkelijker te begrijpen: UNIX-bestandsrechten

Opmerkingen

  • Je hebt het mis over de 777 versus 0777. Beide zijn octaal (decimaal heeft sowieso geen zin in dit geval), maar in de vorm van vier tekens stelt het eerste cijfer de speciale bits in (sticky & setuid).
  • @orion Af en toe is het waar, bijv in een C-achtige code chmod(777) zou eigenlijk het equivalent zijn van het uitvoeren van chmod 1411 (dwz de chmod commando met argument 1411).
  • … wat in het geval van de syscall (of zijn wrapper) en het binaire bestand met dezelfde naam kunnen zijn een beetje verwarrend.
  • Python Master Race loste dit achterwaartse probleem op door alle ” nummers ” die beginnen met 0 te verbannen , waardoor de gebruiker wordt gedwongen expliciet te zijn als ze iets anders willen dan decimalen, bijv hex: 0x1FF, binair: 0b111111111 of octaal: 0o777. PYTHON POWER
  • Afbeeldingsbron?

Antwoord

d betekent dat het een directory is, als je een bestand hebt is het - en als het een link is, vind je een l. Het kan “niet worden in- / uitgeschakeld.

Als u 0777 als permissies gebruikt, geeft u volledige controle (lezen + schrijven + uitvoeren) aan elke gebruiker / groep van het systeem. Het is een luie manier om het op te lossen problemen wanneer u gebruikers / groepen heeft die “geen toegang hebben tot mappen / bestanden.

Als u bijvoorbeeld de inhoud van een map opsomt en dit krijgt:

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

preloadable_libintl.so is een bestand dat eigendom is van gebruiker root en group root. De eigenaar heeft lees- en schrijftoegang, de groep heeft alleen leestoegang en elke andere gebruiker heeft leestoegang. Dit kan worden vertaald als 644.

Als ik het verander in 777, ziet het er als volgt uit:

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

Answer

Nadat ik mijn vraag hier had beantwoord en wat onderzoek had gedaan naar de uitkomst, vond ik een artikel waarin het allemaal heel goed wordt uitgelegd. Ik zou hier enkele delen van dit artikel willen delen voor toekomstige referenties.

Toestemmingen voor bekijken

Om chmod te gebruiken om toestemmingen van een bestand of map te wijzigen, moet u eerst weten wat de huidige wijze van toegang is. U kunt de inhoud van een directory in de terminal bekijken door cd naar die directory te gaan en vervolgens:

$ ls -l 

De -l schakelaar is belangrijk omdat het gebruik van ls zonder deze optie alleen de namen van bestanden of mappen in de directory laat zien.

Hieronder staat een voorbeeld van het gebruik van ls -l in mijn homedirectory:

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 

Wat de kolommen betekenen

De eerste kolom is het type van elk bestand:

  • - geeft een normaal bestand aan.
  • d duidt een directory aan, dwz een map met andere bestanden of mappen.
  • p duidt een genoemde pipe aan (ook wel FIFO ).
  • l duidt een symbolische link aan.

De letters daarna zijn de toestemmingen, deze eerste kolom is wat we zullen het meest geïnteresseerd zijn. De tweede is hoeveel links er in een bestand zijn, we kunnen negeer het veilig. De derde kolom heeft twee waarden / namen: De eerste (in mijn voorbeeld “peter”) is de naam van de gebruiker die eigenaar is van het bestand. De tweede waarde (“gebruikers” in het voorbeeld) is de groep waartoe de eigenaar behoort (Lees meer over groepen).

De volgende kolom is de grootte van het bestand of de directory in bytes en informatie daarna zijn de datums en tijden waarop het bestand of de map voor het laatst is gewijzigd, en natuurlijk de naam van het bestand of de map.

Wat de rechten betekenen

De eerste drie letters, na de eerste - of d, zijn de rechten die de eigenaar heeft. De volgende drie letters zijn machtigingen die van toepassing zijn op de groep. De laatste drie letters zijn de rechten die voor iedereen gelden.

Elke set van drie letters bestaat uit r w en x. r staat altijd op de eerste positie, w staat altijd op de tweede positie en x staat altijd op de derde positie. r is de leesmachtiging, w is de schrijfmachtiging en x is de uitvoering toestemming. Als er een koppelteken (-) in de plaats van een van deze letters staat, betekent dit dat de toestemming niet is verleend, en als de letter aanwezig is, wordt deze wel verleend.

Mappen

In het geval van mappen kunnen de modusbits als volgt worden geïnterpreteerd:

  • r (gelezen) staat voor de mogelijkheid om de inhoudsopgave van de gegeven directory te lezen,
  • w (schrijven) staat voor de mogelijkheid om de inhoudsopgave van de gegeven directory te schrijven (maak nieuwe bestanden, mappen; hernoem, verwijder bestaande bestanden, mappen) als en alleen als de bit uitvoeren is ingesteld. Anders heeft deze toestemming geen betekenis.
  • x (uitvoeren) staat voor de mogelijkheid om de gegeven map in te voeren met het commando cd en toegang te krijgen tot bestanden, mappen in die map.

Machtigingen wijzigen met het chmod-commando

chmod is een commando in Linux en andere Unix-achtige besturingssystemen. Hiermee kunt u de permissies (of toegangsmodus) van een bestand of directory wijzigen.

U kunt permissies op twee verschillende manieren wijzigen: – Tekstgebaseerd chmod – Getalgebaseerd chmod

Tekstmethode

Om de permissies- of toegangsmodus van een bestand te wijzigen, gebruiken we het commando chmod in een terminal. Hieronder ziet u de algemene structuur van het commando:

chmod who=permissions filename 

Waar Wie is er uit een reeks letters, en elk geeft aan aan wie u toestemming gaat geven . Ze zijn als volgt:

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. 

De rechten zijn dezelfde als al besproken (r, w, en x).

Met het commando chmod kunnen we rechten toevoegen aan en aftrekken van een bestaande set met + of – in plaats daarvan of =. Dit verschilt van de bovenstaande opdrachten, die in wezen de rechten herschrijven (dwz om een toestemming te wijzigen van r-- naar rw- , moet u nog steeds r en w opnemen na = in de chmod commando. Als je r hebt gemist, zou het de r toestemming wegnemen aangezien ze worden herschreven met de =. Usin g + en – vermijd dit door de huidige set rechten toe te voegen of weg te nemen).

Cijfermethode

chmod kan ook rechten instellen met behulp van getallen.

Het gebruik van getallen is een andere methode waarmee u de rechten voor alle drie de eigenaar, groep en anderen tegelijkertijd kunt bewerken. Deze basisstructuur van de code is als volgt:

chmod xxx file/directory 

Waarbij xxx een getal van 3 cijfers is, waarbij elk cijfer van 1 tot 7 kan zijn. Het eerste cijfer is van toepassing op machtigingen voor eigenaar, het tweede cijfer op machtigingen voor de groep, en het derde cijfer op machtigingen voor alle anderen.

In deze cijfernotatie hebben de waarden r, w en x hun eigen nummer waarde:

r=4 w=2 x=1 

Om een driecijferig nummer te bedenken, moet u overwegen welke rechten u wilt dat een eigenaar, groep en gebruiker hebben, en vervolgens het totaal hun waarden stijgen. Stel bijvoorbeeld dat ik de eigenaar van een directory lees-schrijf- en uitvoeringsmachtigingen wilde geven, en ik wilde groeperen en alle anderen om alleen machtigingen voor lezen en uitvoeren te hebben. Ik zou de volgende numerieke waarden bedenken:

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 

Dit is het equivalent van het gebruik van het volgende:

chmod u=rwx filename chmod go=rx filename 

De meeste mappen / mappen zijn ingesteld op 755 om lezen en schrijven en uitvoeren naar de eigenaar toe te staan, maar weigeren te schrijven naar iedereen, en bestanden zijn normaal gesproken 644 om lezen en schrijven voor de eigenaar mogelijk te maken, maar alleen lezen voor alle anderen, verwijs naar de laatste opmerking over het ontbreken van x-machtigingen met niet-uitvoerbare bestanden – het is hier hetzelfde.

Reacties

  • Alleen maar tekst kopiëren uit een ander artikel is – tenminste – onbeleefd. Misschien ook een schending van het auteursrecht. Als het niet alleen is gekopieerd of je hebt echt kleine onderdelen gebruikt (auteursrechtvriendelijk dankzij redelijk gebruik), voeg dan op zijn minst een link toe naar het artikel waarnaar je verwijst / citeert.

Answer

Voor de d vragen

Dit vertelt je het Unix-bestandstype. Standaard heeft Unix slechts 3 soorten bestanden. Dit zijn:

  • - – Normaal bestand
  • d – Directorybestand
  • Speciaal bestand (met 5 subtypen):
    • b – Blokkeer bestand
    • c – Tekenapparaatbestand
    • p – Named pipe-bestand of gewoon pipe-bestand
    • l – Symbolisch linkbestand
    • s – Socket-bestand

Lees hier meer: Bestandstypen in Linux / Unix in detail uitgelegd

0777 vs 777

Sticky bit gespecificeerd of niet. Als de sticky bit van een directory is ingesteld, behandelt het bestandssysteem de bestanden in dergelijke directories op een speciale manier zodat alleen de eigenaar van het bestand, de eigenaar van de directory of de rootgebruiker het bestand kan hernoemen of verwijderen. Zonder de sticky bit set, kan elke gebruiker met schrijf- en uitvoeringsrechten voor de map de opgenomen bestanden hernoemen of verwijderen, ongeacht de eigenaar van het bestand.

0777 stelt 777 bestandsrechten in , en de sticky bit op 0 – geen speciale modes.

777 stelt 777 bestandsrechten in, zonder de sticky bit te veranderen.

Lees meer: sticky bit en chmod

Reacties

  • Beter: maar het biedt nog steeds niets dat de andere antwoorden al ‘ niet hebben behandeld …
  • ( 1) Er zijn drie basisbestandstypen: gewone bestanden, mappen en al het andere. Wat? Waar haal je dit vandaan? In het grote schema van dingen lijken gewone bestanden en mappen behoorlijk op elkaar. Benoemde pijpen en symbolische koppelingen lijken meer op gewone bestanden en mappen dan op apparaatbestanden of sockets. (2) Denk je dat chmod 777 de setuid, setgid en sticky bits niet wist? Probeer het maar.
  • Unix heeft 7 bestandstypen, niet 3.

Antwoord

Twee gerelateerde zaken die ik “altijd verwarrend heb gevonden, en die hierboven niet zijn genoemd, zijn:


I) wat een “ 1 ” doet:

In chmod : elke “1” en heeft toestemming, bijvoorbeeld chmod 777 nl kan allemaal, maar let op want
in umask : each “1” dis heeft een toestemming, bijv. umask 777 dis kan iedereen.


II ) bestand “eigenaren” vs.bestand “gebruikers” :

Met andere woorden, er zijn gebruikers die “eigenaar” zijn van , en gebruikers die “gebruiken” .

Elk bestand is eigendom van , tegelijkertijd door twee entiteiten:

  • een enkele, specifieke gebruiker , en
  • een enkele, specifieke group (van een of meer gebruikers).

Daarom kan elk bestand gebruikt door een specifieke gebruiker op drie manieren:

1) Direct, als de gebruiker die eigenaar is van de bestand,
2) in rechtstreeks, als lid van de groep die eigenaar is van het bestand, en
3 ) mogelijk als iemand anders.


Anders , de antwoorden hierboven, doe het geweldig! Iedereen bedankt.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *