it-swarm.com.de

Grundlegendes zu UNIX-Berechtigungen und Dateitypen

Ich habe bis heute nie wirklich verstanden, wie chmod funktioniert hat. Ich folgte einem Tutorial, das mir eine große Sache erklärte.

Ich habe zum Beispiel gelesen, dass Sie drei verschiedene Berechtigungsgruppen haben:

  • besitzer (u)
  • gruppe (g)
  • alle (o)

Aufgrund dieser drei Gruppen weiß ich jetzt, dass:

  • Wenn die Datei dem Benutzer gehört, bestimmen die Benutzerberechtigungen den Zugriff.
  • Wenn die Gruppe der Datei mit der Gruppe des Benutzers identisch ist, bestimmt die Gruppenberechtigung den Zugriff.
  • Wenn der Benutzer nicht der Dateieigentümer ist und nicht zur Gruppe gehört, wird die andere Berechtigung verwendet.

Ich habe auch erfahren, dass Sie die folgenden Berechtigungen haben:

  • read (r)
  • schreibe (w)
  • execute (x)

Ich habe ein Verzeichnis erstellt, um mein neu erworbenes Wissen zu testen:

mkdir test

Dann habe ich einige Tests gemacht:

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

Nachdem ich einige Zeit herumgespielt habe, glaube ich, habe ich endlich den Dreh raus von chmod und die Art und Weise, wie Sie die Berechtigung mit diesem Befehl festlegen.


Aber...

Ich habe noch ein paar Fragen:

  • Wofür steht das d am Start?
  • Wie heißt und enthält der enthaltende Steckplatz und welche anderen Werte kann er enthalten?
  • Wie kann ich es einstellen und deaktivieren?
  • Was ist der Wert für dieses d? (Da Sie nur 7 = 4 + 2 + 1 7 = 4 + 2 + 1 7 = 4 + 2 + 1 haben)
  • Warum benutzen Leute manchmal 0777 Anstatt von 777 um ihre Berechtigungen festzulegen?

Da ich aber nicht mehrere Fragen stellen sollte, werde ich versuchen, sie in einer Frage zu stellen.

Wofür steht in einem UNIX-basierten System wie allen Linux-Distributionen in Bezug auf die Berechtigungen der erste Teil (d) und wozu dient dieser Teil der Berechtigungen?

74
Peter

Ich beantworte Ihre Fragen in drei Teilen: Dateitypen, Berechtigungen und Anwendungsfälle für die verschiedenen Formen von chmod.

Datentypen

Das erste Zeichen in der Ausgabe von ls -l Stellt den Dateityp dar. d bedeutet, dass es sich um ein Verzeichnis handelt. Es kann nicht gesetzt oder deaktiviert werden, es hängt davon ab, wie die Datei erstellt wurde. Die vollständige Liste der Dateitypen finden Sie in der ls Dokumentation ; diejenigen, auf die Sie wahrscheinlich stoßen werden, sind:

  • -: "Normale" Datei, erstellt mit jedem Programm, das eine Datei schreiben kann
  • b: Blockspezialdateien, normalerweise Festplatten- oder Partitionsgeräte, können mit mknod erstellt werden
  • c: Zeichenspezialdatei, kann auch mit mknod erstellt werden (Beispiele siehe /dev)
  • d: Verzeichnis, kann mit mkdir erstellt werden
  • l: symbolischer Link, kann mit ln -s erstellt werden.
  • p: Named Pipe, kann mit mkfifo erstellt werden
  • s: Socket, kann mit nc -U erstellt werden.
  • D: door , erstellt von einigen Serverprozessen unter Solaris/openindiana.

Berechtigungen

chmod 0777 Wird verwendet, um alle Berechtigungen in einer chmod Ausführung festzulegen, anstatt Änderungen mit u+ Usw. zu kombinieren. Jede der vier Ziffern ist ein Oktalwert, der eine Reihe von Berechtigungen darstellt ::

  • suid, sgid und "klebrig" (siehe unten)
  • benutzerberechtigungen
  • gruppenberechtigungen
  • "Andere" Berechtigungen

Der Oktalwert wird als Summe der Berechtigungen berechnet:

  • "Lesen" ist 4
  • "Schreiben" ist 2
  • "Ausführen" ist 1

Für die erste Ziffer:

  • suid ist 4; Binärdateien mit diesem gesetzten Bit werden als Eigentümer ausgeführt (normalerweise root).
  • sgid ist 2; Binärdateien mit diesem Bit-Set werden als Eigentümergruppe ausgeführt (dies wurde für Spiele verwendet, damit hohe Punktzahlen gemeinsam genutzt werden können, aber in Kombination mit Schwachstellen in den Spielen ist dies häufig ein Sicherheitsrisiko), und Dateien, die in Verzeichnissen mit diesem Bit-Set erstellt wurden, gehören zu Standardmäßig die Eigentümergruppe des Verzeichnisses (dies ist praktisch, um freigegebene Ordner zu erstellen).
  • "Sticky" (oder "Restricted Deletion") ist 1; Dateien in Verzeichnissen mit diesem gesetzten Bit können nur von ihrem Eigentümer, dem Eigentümer des Verzeichnisses oder root gelöscht werden (ein allgemeines Beispiel hierfür finden Sie unter /tmp).

Siehe die Manpage chmod für Details. Beachten Sie, dass ich bei all dem andere Sicherheitsfunktionen ignoriere, die die Berechtigungen der Benutzer für Dateien ändern können (SELinux, Datei-ACLs ...).

Spezielle Bits werden je nach Dateityp (reguläre Datei oder Verzeichnis) und dem zugrunde liegenden System unterschiedlich behandelt. (Dies wird in der Manpage chmod erwähnt.) Auf dem System habe ich dies getestet (mit coreutils 8.23 ​​auf einem ext4 - Dateisystem, auf dem der Linux-Kernel 3.16.7-ckt2 ausgeführt wird ) ist das Verhalten wie folgt. Bei einer Datei werden die speziellen Bits immer gelöscht, sofern sie nicht explizit festgelegt wurden. chmod 0777 Entspricht also chmod 777, Und beide Befehle löschen die speziellen Bits und erteilen allen die vollständigen Berechtigungen für die Datei. Bei einem Verzeichnis werden die speziellen Bits niemals vollständig mit der vierstelligen numerischen Form gelöscht. Daher entspricht chmod 0777 Im Endeffekt auch chmod 777, Ist jedoch irreführend, da einige der speziellen Bits unverändert bleiben -ist. (Eine frühere Version dieser Antwort hat dies falsch verstanden.) Um spezielle Bits in Verzeichnissen zu löschen, müssen Sie u-s, g-s Und/oder o-t Explizit verwenden oder eine negative Zahl angeben Wert, also löscht chmod -7000 alle speziellen Bits in einem Verzeichnis.

In der Ausgabe von ls -l Werden suid, sgid und "sticky" anstelle des Eintrags x angezeigt: suid ist s oder S anstelle des x des Benutzers, sgid ist s oder S anstelle des x der Gruppe und "klebrig" ist t oder T anstelle des x anderer. Ein Kleinbuchstabe zeigt an, dass sowohl das spezielle Bit als auch das ausführbare Bit gesetzt sind. Ein Großbuchstabe zeigt an, dass nur das spezielle Bit gesetzt ist.

Die verschiedenen Formen von chmod

Aufgrund des oben beschriebenen Verhaltens kann die Verwendung der vollständigen vier Ziffern in chmod verwirrend sein (zumindest stellte sich heraus, dass ich verwirrt war). Dies ist nützlich, wenn Sie sowohl spezielle als auch Berechtigungsbits setzen möchten. Andernfalls werden die Bits gelöscht, wenn Sie eine Datei bearbeiten. Sie bleiben erhalten, wenn Sie ein Verzeichnis bearbeiten. chmod 2750 Stellt also sicher, dass Sie mindestens sgid und genau u=rwx,g=rx,o= Erhalten. chmod 0750 löscht jedoch nicht unbedingt die speziellen Bits.

Die Verwendung von numerischen Modi anstelle von Textbefehlen ([ugo][=+-][rwxXst]) Ist wahrscheinlich eher ein Gewohnheitsfall und das Ziel des Befehls. Sobald Sie an die Verwendung numerischer Modi gewöhnt sind, ist es oft einfacher, den vollständigen Modus auf diese Weise anzugeben. und es ist nützlich, über Berechtigungen im numerischen Modus nachdenken zu können, da viele andere Befehle sie verwenden können (install, mknod...).

Einige Textvarianten können nützlich sein: Wenn Sie einfach sicherstellen möchten, dass eine Datei von jedem ausgeführt werden kann, wird chmod a+x Dies tun, unabhängig von den anderen Berechtigungen. Ebenso fügt +X Die Ausführungsberechtigung nur hinzu, wenn eine der Ausführungsberechtigungen bereits festgelegt ist oder die Datei ein Verzeichnis ist. Dies kann nützlich sein, um Berechtigungen global wiederherzustellen, ohne dass Sonderfalldateien oder Verzeichnisse erforderlich sind. Somit entspricht chmod -R ug=rX,u+w,o= Der Anwendung von chmod -R 750 Auf alle Verzeichnisse und ausführbaren Dateien und chmod -R 640 Auf alle anderen Dateien.

124
Stephen Kitt

Berechtigungen unter Linux sind daher sehr wichtig. Ich werde versuchen, eine kurze Erklärung abzugeben.

Für Teile eines Dateimodus

Jede Unix-Datei verfügt über eine Reihe von Berechtigungen, die bestimmen, ob Sie die Datei lesen, schreiben oder ausführen können. Wenn Sie ls -l ausführen, werden die Berechtigungen angezeigt. Hier ist ein Beispiel für eine solche Anzeige:

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

Ich hänge ein Bild von Teilen eines Dateimodus an:

enter image description here

Typ kann etwas anderes sein. Zum Beispiel:

  • d (directory)
  • c (character device)
  • l (symlink)
  • p (named pipe)
  • s (socket)
  • b (block device)
  • D (door, not common on Linux systems, but has been ported)

Wenn Sie einige Berechtigungen für alle Verzeichnisse festlegen möchten, können Sie das R-Attribut verwenden, zum Beispiel:

chmod -R 777 /some/directory/

Für chmod 777 vs 0777

Der Befehl chmod erwartet normalerweise, dass die Eingabe eine Oktalzahl ist. Die führende Null bezieht sich auf den Wert des Sticky/Sgid/Suid-Bit-Tripletts. In C würde es jedoch einen Unterschied machen, da 777 In 01411 (Oktal) übersetzt würde, wodurch das Sticky-Bit gesetzt würde (siehe die Manpage chmod(2)). Leseberechtigungen für Eigentümer und ausführbares Bit für Gruppen und andere (was eine ziemlich seltsame Kombination ist).

EDIT 1

Ich habe ein anderes Bild über Linux-Berechtigungen gefunden und werde es anhängen, um es einfacher zu verstehen: UNIX file permissions

43
ValeriRangelov

d bedeutet, dass es sich um ein Verzeichnis handelt. Wenn Sie eine Datei haben, ist dies - und wenn es sich um einen Link handelt, finden Sie ein l. Es kann nicht gesetzt/deaktiviert werden.

Wenn Sie 0777 als Berechtigungen verwenden, geben Sie jedem Benutzer/jeder Gruppe des Systems die volle Kontrolle (Lesen + Schreiben + Ausführen). Es ist eine träge Möglichkeit, Probleme zu lösen, wenn Sie Benutzer/Gruppen haben, die nicht auf Verzeichnisse/Dateien zugreifen können.

Wenn Sie beispielsweise den Inhalt eines Verzeichnisses auflisten und Folgendes erhalten:

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

prestoadable_libintl.so ist eine Datei, die dem Benutzer root und dem Gruppenstamm gehört. Der Eigentümer hat Lese- und Schreibzugriff, der Gruppe hat nur Lesezugriff und jeder anderer Benutzer hat Lesezugriff. Dies kann als 644 übersetzt werden.

Wenn ich es auf 777 ändere, sieht es so aus:

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

10
jcbermu

Nachdem ich meine Frage hier beantwortet und einige Nachforschungen über das Ergebnis angestellt hatte, fand ich einen Artikel, der alles sehr gut erklärt. Ich möchte einige Teile dieses Artikels hier für zukünftige Referenzen teilen.

Berechtigungen anzeigen

Um mit chmod die Berechtigungen einer Datei oder eines Verzeichnisses zu ändern, müssen Sie zunächst den aktuellen Zugriffsmodus kennen. Sie können den Inhalt eines Verzeichnisses im Terminal anzeigen, indem Sie cd in dieses Verzeichnis eingeben und dann Folgendes verwenden:

$ ls -l

Der Schalter -l Ist wichtig, da bei Verwendung von ls ohne ihn nur die Namen der Dateien oder Ordner im Verzeichnis angezeigt werden.

Unten finden Sie ein Beispiel für die Verwendung von ls -l In meinem Home-Verzeichnis:

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

Was die Spalten bedeuten

Die erste Spalte ist der Typ jeder Datei:

  • - Bezeichnet eine normale Datei.
  • d bezeichnet ein Verzeichnis, d. h. einen Ordner, der andere Dateien oder Ordner enthält.
  • p bezeichnet eine Named Pipe (auch bekannt als FIFO).
  • l bezeichnet eine symbolische Verknüpfung.

Die Buchstaben danach sind die Berechtigungen. Diese erste Spalte ist das, woran wir am meisten interessiert sind. Die zweite Spalte gibt an, wie viele Links in einer Datei vorhanden sind. Wir können sie ignorieren. Die dritte Spalte hat zwei Werte/Namen: Der erste (in meinem Beispiel 'peter') ist der Name des Benutzers, dem die Datei gehört. Der zweite Wert (im Beispiel 'Benutzer') ist die Gruppe, zu der der Eigentümer gehört (Weitere Informationen zu Gruppen).

Die nächste Spalte gibt die Größe der Datei oder des Verzeichnisses in Bytes an. Danach sind die Daten und Zeiten angegeben, zu denen die Datei oder das Verzeichnis zuletzt geändert wurde, und natürlich der Name der Datei oder des Verzeichnisses.

Was die Berechtigungen bedeuten

Die ersten drei Buchstaben nach dem ersten - Oder d sind die Berechtigungen des Besitzers. Die nächsten drei Buchstaben sind Berechtigungen, die für die Gruppe gelten. Die letzten drei Buchstaben sind die Berechtigungen, die für alle anderen gelten.

Jeder Satz von drei Buchstaben besteht aus rw und x. r ist immer an der ersten Position, w ist immer an der zweiten Position und x ist immer an der dritten Position. r ist die Leseberechtigung, w ist die Schreibberechtigung und x ist die Ausführungsberechtigung. Wenn anstelle eines dieser Buchstaben ein Bindestrich (-) Steht, bedeutet dies, dass die Erlaubnis nicht erteilt wurde. Wenn der Buchstabe vorhanden ist, wird sie erteilt.

Ordner

Bei Ordnern können die Modusbits wie folgt interpretiert werden:

  • r (read) steht für die Fähigkeit, das Inhaltsverzeichnis des angegebenen Verzeichnisses zu lesen.
  • w (write) steht für die Fähigkeit, das Inhaltsverzeichnis des angegebenen Verzeichnisses (neue Dateien, Ordner erstellen; umbenennen, vorhandene Dateien, Ordner löschen) genau dann zu schreiben, wenn das Ausführungsbit gesetzt ist. Andernfalls ist diese Erlaubnis bedeutungslos.
  • x (execute) steht für die Möglichkeit, das angegebene Verzeichnis mit dem Befehl cd einzugeben und auf Dateien und Ordner in diesem Verzeichnis zuzugreifen.

Ändern von Berechtigungen mit dem Befehl chmod

chmod ist ein Befehl unter Linux und anderen Unix-ähnlichen Betriebssystemen. Hier können Sie die Berechtigungen (oder den Zugriffsmodus) einer Datei oder eines Verzeichnisses ändern.

Sie können Berechtigungen auf zwei verschiedene Arten ändern: - Textbasiertes chmod - Zahlenbasiertes chmod

Textmethode

Um den Berechtigungs- oder Zugriffsmodus einer Datei zu ändern, verwenden wir den Befehl chmod in einem Terminal. Unten ist die allgemeine Struktur des Befehls:

chmod who=permissions filename

Wo Wer ist einer aus einer Reihe von Buchstaben, und jeder bedeutet, wem Sie die Erlaubnis geben werden. Sie sind wie folgt:

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.

Die Berechtigungen sind die gleichen wie bereits beschrieben (r, w und x).

Mit dem Befehl chmod können wir Berechtigungen mit + oder - anstelle von = zu einer vorhandenen Menge hinzufügen und von dieser entfernen. Dies unterscheidet sich von den obigen Befehlen, bei denen die Berechtigungen im Wesentlichen neu geschrieben werden (dh um eine Berechtigung von r-- In rw- Zu ändern, müssen Sie weiterhin r sowie einschließen w nach dem Befehl = im Befehl chmod. Wenn Sie r verpasst haben, wird die Berechtigung r unverändert entfernt wird mit dem = neu geschrieben. Verwenden Sie + und -, um dies zu vermeiden, indem Sie die aktuellen Berechtigungen hinzufügen oder entfernen.

Zahlenmethode

chmod kann Berechtigungen auch mithilfe von Zahlen festlegen.

Die Verwendung von Zahlen ist eine weitere Methode, mit der Sie die Berechtigungen für alle drei Eigentümer, Gruppen und andere gleichzeitig bearbeiten können. Diese Grundstruktur des Codes lautet wie folgt:

chmod xxx file/directory

Wobei xxx eine dreistellige Zahl ist, wobei jede Ziffer zwischen 1 und 7 liegen kann. Die erste Ziffer gilt für Berechtigungen für den Eigentümer, die zweite Ziffer gilt für Berechtigungen für die Gruppe und die dritte Ziffer gilt für Berechtigungen für alle anderen.

In dieser Notation haben die Werte r, w und x einen eigenen Zahlenwert:

r=4
w=2
x=1

Um eine dreistellige Zahl zu erhalten, müssen Sie überlegen, über welche Berechtigungen ein Eigentümer, eine Gruppe und ein Benutzer verfügen sollen, und dann deren Werte addieren. Angenommen, ich wollte dem Eigentümer eines Verzeichnisses Lese-/Schreib- und Ausführungsberechtigungen erteilen, und ich wollte alle anderen gruppieren, um nur Lese- und Ausführungsberechtigungen zu haben. Ich würde mir die numerischen Werte wie folgt einfallen lassen:

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

Dies entspricht der Verwendung von Folgendem:

chmod u=rwx filename
chmod go=rx filename

Die meisten Ordner/Verzeichnisse sind auf 755 eingestellt, um das Lesen und Schreiben und Ausführen für den Eigentümer zu ermöglichen, verweigern jedoch das Schreiben für alle anderen, und Dateien sind normalerweise 644, um das Lesen und Schreiben für den Eigentümer zu ermöglichen, aber nur das Lesen für alle anderen, siehe den letzten Hinweis zum Fehlen von x-Berechtigungen bei nicht ausführbaren Dateien - hier gilt das Gleiche.

7
Peter

Für die d Fragen

Hier erfahren Sie den Unix-Dateityp. Standardmäßig hat Unix nur 3 Dateitypen. Sie sind:

  • - - Normale Datei
  • d - Verzeichnisdatei
  • Spezielle Datei (mit 5 Untertypen):
    • b - Blockdatei
    • c - Zeichengerätedatei
    • p - Benannte Pipe-Datei oder nur Pipe-Datei
    • l - Symbolische Linkdatei
    • s - Socket-Datei

Lesen Sie hier mehr: Dateitypen in Linux/Unix ausführlich erklärt

0777 vs 777

Sticky Bit angegeben oder nicht. Wenn das Sticky-Bit eines Verzeichnisses gesetzt ist, behandelt das Dateisystem die Dateien in solchen Verzeichnissen auf besondere Weise, sodass nur der Eigentümer der Datei, der Eigentümer des Verzeichnisses oder der Root-Benutzer die Datei umbenennen oder löschen können. Ohne das gesetzte Sticky-Bit kann jeder Benutzer mit Schreib- und Ausführungsberechtigungen für das Verzeichnis enthaltene Dateien umbenennen oder löschen, unabhängig vom Eigentümer der Datei.

0777 setzt 777 Dateiberechtigungen und das Sticky-Bit auf 0 - keine speziellen Modi.

777 setzt 777 Dateiberechtigungen, ohne das Sticky-Bit zu ändern.

Lesen Sie mehr: klebriges Bit und chmod

0
csny

Zwei verwandte Dinge, die ich immer als verwirrend empfunden und oben nicht angesprochen habe, sind :


I) was ein '1' macht:

In chmod: Jede '1' en ermöglicht eine Berechtigung, z. chmod 777 en kann alles, aber pass auf, weil
in umask: Jede '1' dis ermöglicht eine Erlaubnis, z. umask 777 dis fähig alle.


II) Datei 'Eigentümer' vs. Datei 'Benutzer':

Mit anderen Worten, es gibt Benutzer, die 'besitzen' und Benutzer, die 'verwenden'.

Jede Datei ist im Besitz gleichzeitig von zwei Entitäten:

  • ein einzelnes, spezifisches Benutzer und
  • eine einzelne, spezifische Gruppe (von einem oder mehreren Benutzern).

Daher kann jede Datei von einem bestimmten Benutzer auf drei Arten verwendet sein:

1) Direkt als Benutzer, dem die Datei gehört,
2) in direkt als Mitglied der Gruppe, der die Datei gehört, und
3) möglicherweise als jemand anderes.


Sonst , die obigen Antworten, machen einen tollen Job! Vielen Dank an alle.

0
Elliptical view