GNU/Linux >> LINUX-Kenntnisse >  >> Linux

UNIX-Berechtigungen und Dateitypen verstehen

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

Dateitypen

Das erste Zeichen in ls -l Ausgabe repräsentiert den Dateityp; d bedeutet, dass es sich um ein Verzeichnis handelt. Es kann nicht gesetzt oder nicht gesetzt werden, es hängt davon ab, wie die Datei erstellt wurde. Die vollständige Liste der Dateitypen finden Sie in der ls-Dokumentation; diejenigen, denen Sie wahrscheinlich begegnen werden, sind

  • - :„normale“ Datei, erstellt mit jedem Programm, das eine Datei schreiben kann
  • b :Spezielle Blockdateien, typischerweise Platten- oder Partitionsgeräte, können mit mknod erstellt werden
  • c :zeichenspezifische Datei, kann auch mit mknod erstellt werden (siehe /dev für Beispiele)
  • 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 auf Solaris/openindiana.

Berechtigungen

chmod 0777 wird verwendet, um alle Berechtigungen in einem chmod festzulegen Ausführung, anstatt Änderungen mit u+ zu kombinieren usw. Jede der vier Ziffern ist ein Oktalwert, der einen Satz 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 ihr Eigentümer ausgeführt (üblicherweise root )
  • sgid ist 2; Binärdateien mit diesem Bit-Set laufen als ihre Eigentümergruppe (dies wurde für Spiele verwendet, damit Highscores geteilt werden konnten, aber es ist oft ein Sicherheitsrisiko, wenn es mit Schwachstellen in den Spielen kombiniert wird), und Dateien, die in Verzeichnissen mit diesem Bit-Set erstellt wurden, gehören zu den standardmäßig die Eigentümergruppe des Verzeichnisses (dies ist praktisch, um freigegebene Ordner zu erstellen)
  • „sticky“ (oder „eingeschränkte Löschung“) 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 (siehe /tmp für ein allgemeines Beispiel dafür).

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

Spezielle Bits werden je nach Dateityp (normale Datei oder Verzeichnis) und dem zugrunde liegenden System unterschiedlich behandelt. (Dies wird im chmod erwähnt Manpage.) Auf dem System, mit dem ich das getestet habe (mit coreutils 8.23 auf einem ext4 Dateisystem, auf dem 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 gesetzt sind, also chmod 0777 entspricht chmod 777 , und beide Befehle löschen die speziellen Bits und geben jedem die vollen Berechtigungen für die Datei. Bei einem Verzeichnis werden die speziellen Bits niemals vollständig gelöscht, wenn die vierstellige numerische Form verwendet wird, also chmod 0777 entspricht auch chmod 777 aber es ist irreführend, da einige der speziellen Bits unverändert bleiben. (Eine frühere Version dieser Antwort hat dies falsch verstanden.) Um spezielle Bits in Verzeichnissen zu löschen, müssen Sie u-s verwenden , g-s und/oder o-t explizit oder geben Sie einen negativen numerischen Wert an, also chmod -7000 löscht alle speziellen Bits in einem Verzeichnis.

In ls -l Ausgabe, suid , sgid und „sticky“ erscheinen anstelle von x Eintrag:suid ist s oder S anstelle des x des Benutzers , sgid ist s oder S anstelle des x der Gruppe , und „sticky“ ist t oder T anstelle von 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 werden die vollen vier Ziffern in chmod verwendet kann verwirrend sein (zumindest stellt sich heraus, dass ich verwirrt war). Es ist nützlich, wenn Sie sowohl spezielle Bits als auch Berechtigungsbits setzen möchten; Andernfalls werden die Bits gelöscht, wenn Sie eine Datei bearbeiten, und beibehalten, wenn Sie ein Verzeichnis bearbeiten. Also chmod 2750 stellt sicher, dass Sie mindestens sgid erhalten und genau u=rwx,g=rx,o=; aber chmod 0750 löscht nicht unbedingt die speziellen Bits.

Verwenden von numerischen Modi anstelle von Textbefehlen ([ugo][=+-][rwxXst] ) ist wohl eher Gewohnheitssache und Ziel des Befehls. Sobald Sie sich an die Verwendung numerischer Modi gewöhnt haben, ist es oft einfacher, einfach den vollständigen Modus auf diese Weise anzugeben. und es ist nützlich, sich Berechtigungen mit numerischen Modi vorstellen zu können, da viele andere Befehle sie verwenden können (install , mknod ...).

Einige Textvarianten können sich als nützlich erweisen:Wenn Sie einfach sicherstellen möchten, dass eine Datei von jedem ausgeführt werden kann, chmod a+x wird dies tun, unabhängig von den anderen Berechtigungen. Ebenso +X fügt die Ausführungsberechtigung nur hinzu, wenn eine der Ausführungsberechtigungen bereits festgelegt ist oder die Datei ein Verzeichnis ist; Dies kann praktisch sein, um Berechtigungen global wiederherzustellen, ohne dass Dateien im Vergleich zu Verzeichnissen in Sonderfällen behandelt werden müssen. Also chmod -R ug=rX,u+w,o= entspricht der Anwendung von chmod -R 750 zu allen Verzeichnissen und ausführbaren Dateien und chmod -R 640 zu allen anderen Dateien.


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

Für Teile eines Dateimodus

Jede Unix-Datei hat eine Reihe von Berechtigungen, die bestimmen, ob Sie die Datei lesen, schreiben oder ausführen können. Runningls -l zeigt die Berechtigungen an. 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:

Typ kann unterschiedlich sein. Zum Beispiel:

  • d (Verzeichnis)
  • c (Zeichengerät)
  • l (symlink)
  • p (benannte Pipe)
  • s (Buchse)
  • b (Gerät blockieren)
  • D (Tür, auf Linux-Systemen nicht üblich, wurde aber portiert)

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 chmod Der Befehl 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 würde zu 01411 übersetzt werden (oktal) und setzt damit das Sticky-Bit (siehe chmod(2) Manpage), Leseberechtigungen für Besitzer und ausführbares Bit für Gruppe und andere (was eine ziemlich seltsame Kombination ist).

BEARBEITEN 1

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


d bedeutet, es ist ein Verzeichnis, wenn Sie eine Datei haben, ist es - und wenn es sich um einen Link handelt, finden Sie einen l . Es kann nicht aktiviert/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 ein fauler Weg, 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

preloadable_libintl.so ist eine Datei, die dem Benutzer root und der Gruppe root gehört. Der Eigentümer Lese- und Schreibzugriff hat, die Gruppe hat nur Lesezugriff und alle anderen Benutzer Lesezugriff hat. 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


Linux
  1. Linux-Berechtigungen:Eine Einführung in chmod

  2. Linux chmod und chown – So ändern Sie Dateiberechtigungen und Eigentumsrechte in Linux

  3. Linux – Unix-Berechtigungen und Dateitypen verstehen?

  4. Vorrang von Benutzer- und Gruppeneigentümern bei Dateiberechtigungen?

  5. UNIX / Linux:Leitfaden für Anfänger zu Datei- und Verzeichnisberechtigungen (umask, chmod, lesen, schreiben, ausführen)

Chmod-Befehl in Linux (Dateiberechtigungen)

Chmod-Befehl – ​​So ändern Sie Dateiberechtigungen in Linux

Grundlegendes zu Linux-Dateiberechtigungen

Linux-Chmod-Befehlsbeispiele

Verwalten Sie Verzeichnis- und Dateiberechtigungen mit chmod Recursive

Grundlegende Dateiberechtigungen und Eigentumsrechte in Linux verstehen