Rechte in Linux (chown, chmod, SUID, GUID, sticky bit, ACL, umask)

Hallo zusammen. Dies ist eine Übersetzung eines Artikels aus dem Buch RedHat RHCSA RHCE 7 RedHat Enterprise Linux 7 EX200 und EX300.

Von mir: Ich hoffe, dass der Artikel nicht nur für Anfänger hilfreich ist, sondern auch erfahrenen Administratoren dabei hilft, ihr Wissen zu ordnen.

Also, legen wir los.

Rechte in Linux (chown, chmod, SUID, GUID, sticky bit, ACL, umask)

Um auf Dateien in Linux zuzugreifen, werden Berechtigungen verwendet. Diese Berechtigungen werden drei Objekten zugewiesen: dem Datei-Eigentümer, der Gruppe des Eigentümers und einem anderen Objekt (also allen anderen). In diesem Artikel erfahren Sie, wie Sie Berechtigungen anwenden.

Der Artikel beginnt mit einer Übersicht der grundlegenden Konzepte, gefolgt von einer Diskussion über spezielle Berechtigungen (Special permissions) und Zugriffskontrolllisten (ACL). Am Ende dieses Artikels wird die Konfiguration von Standardzugriffsrechten über umask sowie die Verwaltung erweiterter Benutzerattribute behandelt.

Dateibesitzverwaltung

Bevor wir über Berechtigungen sprechen, müssen Sie die Rolle des Datei- und Verzeichnisbesitzers verstehen. Der Besitz von Dateien und Verzeichnissen ist entscheidend für die Arbeit mit Berechtigungen. In diesem Abschnitt erfahren Sie zunächst, wie Sie den Besitzer sehen können. Danach erfahren Sie, wie Sie den Gruppen- und Benutzerbesitzer von Dateien und Verzeichnissen ändern können.

Anzeige des Besitzers einer Datei oder eines Verzeichnisses

In Linux hat jede Datei und jedes Verzeichnis zwei Eigentümer: den Benutzer und die Gruppenbesitzer.

Diese Eigentümer werden beim Erstellen einer Datei oder eines Verzeichnisses festgelegt. Der Benutzer, der eine Datei erstellt, wird der Besitzer dieser Datei, und die primäre Gruppe, zu der dieser Benutzer gehört, wird ebenfalls der Eigentümer dieser Datei. Um festzustellen, ob Sie als Benutzer Zugriffsrechte auf eine Datei oder ein Verzeichnis haben, überprüft die Shell den Besitz.

Dies geschieht in folgender Reihenfolge:

  1. Die Shell prüft, ob Sie der Besitzer der Datei sind, auf die Sie zugreifen möchten. Wenn Sie der Besitzer sind, erhalten Sie die Berechtigungen und die Shell stoppt die Überprüfung.
  2. Wenn Sie nicht der Besitzer der Datei sind, prüft die Shell, ob Sie Mitglied der Gruppe sind, die Berechtigungen für diese Datei hat. Wenn Sie Mitglied dieser Gruppe sind, erhalten Sie Zugang zur Datei mit den für die Gruppe festgelegten Berechtigungen, und die Shell unterbricht die Überprüfung.
  3. Wenn Sie weder Nutzer noch Eigentümer einer Gruppe sind, haben Sie die Rechte anderer Nutzer (Andere).

Um die aktuellen Zuweisungen des Eigentümers zu sehen, können Sie den Befehl verwenden ls -l. Dieser Befehl zeigt den Benutzer und den Eigentümer der Gruppe an. Weiter unten sehen Sie die Einstellungen des Eigentümers für die Verzeichnisse im Verzeichnis /home.

[root@server1 home]# ls -l
total 8
drwx------. 3  bob            bob            74     Feb   6   10:13 bob
drwx------. 3  caroline       caroline       74     Feb   6   10:13 caroline
drwx------. 3  fozia          fozia          74     Feb   6   10:13 fozia
drwx------. 3  lara           lara           74     Feb   6   10:13 lara
drwx------. 5  lisa           lisa           4096   Feb   6   10:12 lisa
drwx------. 14 user           user           4096   Feb   5   10:35 user

Mit dem Befehl ls Sie können den Eigentümer von Dateien in diesem Verzeichnis anzeigen. Manchmal kann es nützlich sein, eine Liste aller Dateien im System zu erhalten, bei denen dieser Benutzer oder diese Gruppe als Eigentümer angegeben ist. Dazu können Sie verwenden find. Das Argument find -user kann für diesen Zweck verwendet werden. Zum Beispiel zeigt der folgende Befehl alle Dateien an, bei denen der Benutzer linda als Eigentümer angegeben ist:

find / -user linda

Sie können auch verwenden find um nach Dateien zu suchen, deren Eigentum eine bestimmte Gruppe ist.

Zum Beispiel sucht der folgende Befehl nach allen Dateien, die zur Gruppe gehören users:

find / -group users

Ändern des Eigentümers

Um die entsprechenden Berechtigungen anzuwenden, ist das erste, was zu berücksichtigen ist, der Besitz. Dafür gibt es den Befehl chown. Die Syntax dieses Befehls ist einfach zu verstehen:

chown wer was

Zum Beispiel ändert der folgende Befehl den Eigentümer des Verzeichnisses /home/account in den Benutzer linda:

chown linda /home/account

Der Befehl chown hat mehrere Optionen, von denen eine besonders nützlich ist: -R. Sie können erraten, was es tut, da diese Option auch für viele andere Befehle verfügbar ist. Damit können Sie den Eigentümer rekursiv festlegen, was bedeutet, dass Sie den Eigentümer des aktuellen Verzeichnisses und alles, was darunter fällt, festlegen können. Der folgende Befehl ändert den Eigentümer für das Verzeichnis /home und alles, was darunter liegt, in den Benutzer linda:

Jetzt sieht die Eigentumsstruktur so aus:

[root@localhost ~]# ls -l /home
total 0
drwx------. 2 account account 62 Sep 25 21:41 account
drwx------. 2 lisa    lisa    62 Sep 25 21:42 lisa

Lass uns das ausführen:

[root@localhost ~]# chown -R lisa /home/account
[root@localhost ~]#

Jetzt ist die Benutzerin lisa die Eigentümerin des Verzeichnisses account:

[root@localhost ~]# ls -l /home
total 0
drwx------. 2 lisa account 62 Sep 25 21:41 account
drwx------. 2 lisa lisa    62 Sep 25 21:42 lisa

Ändern des Eigentümers der Gruppe

Es gibt zwei Möglichkeiten, den Besitz einer Gruppe zu ändern. Sie können dies tun, indem Sie chown, aber es gibt einen speziellen Befehl mit dem Namen chgrp, der diese Aufgabe ausführt. Wenn Sie den Befehl verwenden möchten, chownhinzufügen möchten, verwenden Sie den . oder : vor dem Gruppennamen.

Der folgende Befehl ändert den Besitzer der Gruppe /home/account in die Gruppe account:

chown .account /home/account

Sie können verwenden chown um den Besitzer von Benutzer und/oder Gruppe auf verschiedene Weise zu ändern. Hier sind einige Beispiele:

  • chown lisa myfile1 setzt den Benutzer lisa als Besitzer der Datei myfile1.
  • chown lisa.sales myfile setzt den Benutzer lisa als Besitzer der Datei myfile und macht die Gruppe sales zum Besitzer dieser Datei.
  • chown lisa:sales myfile ist dasselbe wie der vorherige Befehl.
  • chown .sales myfile macht die Gruppe sales zum Besitzer der Datei myfile, ohne den Benutzerbesitzer zu ändern.
  • chown :sales myfile ist dasselbe wie der vorherige Befehl.

Sie können den Befehl chgrp, um den Besitzer der Gruppe zu ändern. Betrachten wir das folgende Beispiel, bei dem Sie mit chgrp die Gruppe sales als Besitzer des Verzeichnisses account festlegen können:

chgrp .sales /home/account

Wie im Fall von chown, können Sie die Option -R mit chgrpverwenden, um den Gruppenbesitzer rekursiv zu ändern.

Verständnis des Standardbesitzers

Sie haben vielleicht bemerkt, dass beim Erstellen einer Datei die Standardbesitzrechte angewendet werden.
Der Benutzer, der eine Datei erstellt, wird automatisch der Eigentümer dieser Datei, und die primäre Gruppe dieses Benutzers wird ebenfalls Eigentümer dieser Datei. In der Regel handelt es sich um die Gruppe, die in der Datei /etc/passwd als primäre Gruppe des Benutzers angegeben ist. Wenn der Benutzer jedoch Mitglied mehrerer Gruppen ist, kann er die effektive primäre Gruppe ändern.

Um die aktuelle effektive primäre Gruppe anzuzeigen, kann der Benutzer den Befehl verwenden Gruppen:

[root@server1 ~]# groups lisa
lisa : lisa account sales

Wenn der aktuelle Benutzer linda die effektive primäre Gruppe ändern möchte, verwendet er den Befehl newgrp, gefolgt von dem Gruppennamen, den er als neue effektive primäre Gruppe festlegen möchte. Nach der Verwendung des Befehls newgrp bleibt die primäre Gruppe aktiv, bis der Benutzer den Befehl exit oder sich abmeldet.

Im Folgenden wird gezeigt, wie der Benutzer linda diesen Befehl verwendet, wodurch die primäre Gruppe auf die Gruppe sales gesetzt wurde:

lisa@server1 ~]$ groups
lisa account sales
[lisa@server1 ~]$ newgrp sales
[lisa@server1 ~]$ groups
sales lisa account
[lisa@server1 ~]$ touch file1
[lisa@server1 ~]$ ls -l
total 0
-rw-r--r--. 1 lisa sales 0 Feb 6 10:06 file1

Nach der Änderung der aktiven Hauptgruppe erhalten alle neuen Dateien, die vom Benutzer erstellt werden, diese Gruppe als Eigentümer. Um zur ursprünglichen Einstellung der primären Gruppe zurückzukehren, verwenden Sie exit.

Um den Befehl newgrp, nutzen zu können, muss der Benutzer Mitglied der Gruppe sein, die er als primäre Gruppe verwenden möchte. Außerdem kann ein Gruppenpasswort für die Gruppe mit dem Befehl gpasswd. Wenn der Benutzer den Befehl newgrp, aber nicht Mitglied der Zielgruppe ist, fordert die Shell zur Eingabe des Gruppenpassworts auf. Nachdem Sie das richtige Gruppenpasswort eingegeben haben, wird die neue effektive primäre Gruppe festgelegt.

Verwaltung der grundlegenden Berechtigungen

Das Linux-Berechtigungssystem wurde in den 1970er Jahren entwickelt. Da die Rechenbedürfnisse in diesen Jahren begrenzt waren, war das grundlegende Berechtigungssystem recht eingeschränkt. Dieses Berechtigungssystem verwendet drei Berechtigungen, die auf Dateien und Verzeichnisse angewendet werden können. In diesem Abschnitt erfahren Sie, wie Sie diese Berechtigungen verwenden und ändern können.

Verständnis der Lese-, Schreib- und Ausführungsrechte

Die drei grundlegenden Berechtigungen ermöglichen es Ihnen, Dateien zu lesen, zu schreiben und auszuführen. Die Auswirkungen dieser Berechtigungen variieren, je nachdem, ob sie auf Dateien oder Verzeichnisse angewendet werden. Bei einer Datei gibt Ihnen das Leserecht das Recht, die Datei zum Lesen zu öffnen. Folglich können Sie deren Inhalt lesen, was bedeutet, dass Ihr Computer die Datei öffnen kann, um etwas damit zu tun.

Eine Programmdatei, die Zugriff auf eine Bibliothek benötigt, muss beispielsweise über Leseberechtigungen für diese Bibliothek verfügen. Daraus folgt, dass das Leserecht die grundlegendste Berechtigung ist, die Sie benötigen, um mit Dateien zu arbeiten.

In Bezug auf das Verzeichnis ermöglicht das Lesen die Anzeige des Inhalts dieses Verzeichnisses. Sie sollten jedoch wissen, dass diese Berechtigung Ihnen nicht erlaubt, Dateien im Verzeichnis zu lesen. Das Berechtigungssystem von Linux kennt kein Erbe, und der einzige Weg, eine Datei zu lesen, besteht darin, Leseerlaubnisse für diese Datei zu besitzen.

Wie Sie wahrscheinlich erraten können, erlaubt die Schreibberechtigung, sofern sie auf eine Datei angewendet wird, das Schreiben in die Datei. Mit anderen Worten, sie ermöglicht es, den Inhalt bestehender Dateien zu ändern. Sie erlaubt jedoch nicht, neue Dateien zu erstellen oder zu löschen oder die Zugriffsrechte auf die Datei zu ändern. Dafür müssen Sie die Schreibberechtigung für das Verzeichnis erteilen, in dem Sie die Datei erstellen möchten. In Verzeichnissen erlaubt diese Berechtigung auch das Erstellen und Löschen neuer Unterverzeichnisse.

Die Ausführungsberechtigung ist erforderlich, um eine Datei auszuführen. Sie wird niemals standardmäßig gesetzt, was Linux nahezu vollständig immun gegen Viren macht. Nur jemand mit Schreibrechten auf das Verzeichnis kann die Ausführungsberechtigung anwenden.

Nachfolgend finden Sie eine Zusammenfassung der Verwendung der grundlegenden Berechtigungen:

Rechte in Linux (chown, chmod, SUID, GUID, sticky bit, ACL, umask)

Verwendung von chmod

Um die Berechtigungen zu verwalten, verwenden Sie den Befehl chmod. Bei der Verwendung von chmod können Sie Berechtigungen für den Benutzer (user), die Gruppe (group) und andere (other) festlegen. Sie können diesen Befehl in zwei Modi verwenden: relativer Modus und absoluter Modus. Im absoluten Modus werden drei Ziffern verwendet, um die grundlegenden Berechtigungen festzulegen.

Rechte in Linux (chown, chmod, SUID, GUID, sticky bit, ACL, umask)

Berechnen Sie beim Festlegen der Berechtigungen den benötigten Wert. Wenn Sie Lese-, Schreib- und Ausführungsberechtigungen für den Benutzer, Lese- und Ausführungsberechtigungen für die Gruppe sowie Lese- und Ausführungsberechtigungen für andere in der Datei /somefile festlegen möchten, verwenden Sie den folgenden Befehl chmod:

chmod 755 /somefile

Wenn Sie chmod auf diese Weise verwenden, werden alle aktuellen Berechtigungen durch die von Ihnen festgelegten Berechtigungen ersetzt.

Wenn Sie die Berechtigungen im Verhältnis zu den aktuellen Berechtigungen ändern möchten, können Sie chmod im relativen Modus verwenden. Bei der Verwendung von chmod im relativen Modus arbeiten Sie mit drei Indikatoren, um anzugeben, was Sie tun möchten:

  1. Zuerst geben Sie an, für wen Sie die Berechtigungen ändern möchten. Dazu können Sie zwischen dem Benutzer (u), der Gruppe (g) und anderen (o).
  2. Anschließend verwenden Sie den Operator, um Berechtigungen aus dem aktuellen Modus hinzuzufügen oder zu entfernen oder sie absolut festzulegen.
  3. Am Ende verwenden Sie r, w und x, um anzugeben, welche Berechtigungen Sie festlegen möchten.

Wenn Sie Berechtigungen im relativen Modus ändern, können Sie den Teil «wer» weglassen, um eine Berechtigung für alle Objekte hinzuzufügen oder zu entfernen. Zum Beispiel fügt dieser Befehl die Ausführungsberechtigung für alle Benutzer hinzu:

chmod +x somefile

Im relativen Modus können Sie auch komplexere Befehle verwenden. Beispielsweise fügt dieser Befehl die Schreibberechtigung zur Gruppe hinzu und entfernt das Lesen für andere:

chmod g+w,o-r somefile

Bei der Nutzung chmod -R o+rx /data Sie setzen die Ausführungsberechtigung für alle Verzeichnisse sowie für Dateien im Verzeichnis /data. Um die Ausführungsberechtigung nur für Verzeichnisse und nicht für Dateien festzulegen, verwenden Sie chmod -R o+rX /data.

Die Großschreibung von X stellt sicher, dass Dateien keine Ausführungsberechtigungen erhalten, wenn die Datei nicht bereits für bestimmte Objekte Ausführungsberechtigungen festgelegt hat. Dadurch wird X zu einer vernünftigen Methode zur Handhabung von Ausführungsberechtigungen; dies ermöglicht zu vermeiden, dass diese Berechtigung für Dateien gesetzt wird, wo sie nicht erforderlich ist.

Erweiterte Berechtigungen

Neben den grundlegenden Berechtigungen, die Sie gerade gelesen haben, gibt es in Linux auch eine Reihe von erweiterten Berechtigungen. Diese sind nicht die Berechtigungen, die Sie standardmäßig festlegen, bieten aber manchmal eine nützliche Ergänzung. In diesem Abschnitt erfahren Sie, was sie sind und wie Sie sie konfigurieren können.

Verständnis der erweiterten Berechtigungen SUID, GUID und Sticky Bit

Es gibt drei erweiterte Berechtigungen. Die erste ist die Berechtigung zur Festlegung der Benutzer-ID (SUID). In bestimmten speziellen Fällen können Sie diese Berechtigung für ausführbare Dateien anwenden. Standardmäßig wird die ausführbare Datei vom Benutzer, der sie startet, mit dessen eigenen Berechtigungen ausgeführt.

Für gewöhnliche Nutzer bedeutet dies in der Regel, dass die Nutzung des Programms eingeschränkt ist. In manchen Fällen benötigt der Nutzer jedoch spezielle Berechtigungen, um eine bestimmte Aufgabe auszuführen.

Betrachten wir zum Beispiel die Situation, in der ein Nutzer sein Passwort ändern muss. Dazu muss der Nutzer sein neues Passwort in die Datei /etc/shadow eintragen. Diese Datei ist jedoch für Nutzer ohne Root-Zugriffsrechte nicht beschreibbar:

root@hnl ~]# ls -l /etc/shadow
----------. 1 root root 1184 Apr 30 16:54 /etc/shadow

Die SUID-Berechtigung bietet hierfür eine Lösung. In der Dienstprogramm /usr/bin/passwd wird diese Berechtigung standardmäßig angewendet. Das bedeutet, dass der Nutzer bei der Passwortänderung vorübergehend Root-Rechte erhält, die es ihm ermöglichen, in die Datei /etc/shadow zu schreiben. Sie können die SUID-Berechtigung an sehen: ls -l als s an der Stelle, an der Sie normalerweise bei x den Benutzerberechtigungen erwarten:

[root@hnl ~]# ls -l /usr/bin/passwd
-rwsr-xr-x. 1 root root 32680 Jan 28 2010 /usr/bin/passwd

Das SUID-Recht mag nützlich erscheinen (und in manchen Fällen ist es das auch), birgt jedoch gleichzeitig potenzielle Gefahren. Bei falscher Anwendung könnten Sie versehentlich Root-Rechte vergeben. Daher empfehle ich, es nur mit äußerster Vorsicht zu verwenden.

Die meisten Administratoren werden es nie nutzen müssen; Sie werden es nur in einigen Dateien sehen, in denen das Betriebssystem es standardmäßig setzen sollte.

Das zweite spezielle Recht ist das Gruppen-ID-Recht (SGID). Dieses Recht hat zwei Effekte. Wenn es auf eine ausführbare Datei angewendet wird, gewährt es dem Benutzer, der die Datei ausführt, die Berechtigungen des Eigentümers der Gruppe dieser Datei. Somit kann SGID mehr oder weniger dasselbe tun wie SUID. Allerdings wird SGID zu diesem Zweck praktisch nicht verwendet.

Wie beim SUID-Recht wird SGID auf einigen Systemdateien als Standardeinstellung angewendet.

Wenn es um ein Verzeichnis geht, kann SGID nützlich sein, da Sie es verwenden können, um den Standardbesitzer der Gruppe für Dateien und Unterverzeichnisse festzulegen, die in diesem Verzeichnis erstellt werden. Standardmäßig wird beim Erstellen einer Datei durch einen Benutzer seine effektive primäre Gruppe als Gruppenbesitzer für diese Datei festgelegt.

Das ist nicht immer sehr hilfreich, insbesondere weil Benutzer von Red Hat/CentOS als Hauptgruppe die Gruppe mit demselben Namen wie der Benutzer haben, und der Benutzer ist der einzige Teilnehmer. Daher werden die Dateien, die der Benutzer standardmäßig erstellt, gruppenspezifisch für den gemeinsamen Zugriff sein.

Stellen Sie sich eine Situation vor, in der die Benutzer linda und lori in der Buchhaltungsabteilung arbeiten und Mitglieder der Gruppe accountsind. Standardmäßig sind diese Benutzer Mitglieder einer privaten Gruppe, deren einziges Mitglied sie selbst sind. Dennoch sind beide Benutzer auch Mitglieder der Gruppe account, aber zusätzlich auch als sekundäre Gruppe.

Standardmäßig wird der Ersteller einer Datei der Besitzer der Hauptgruppe. Das bedeutet, dass Linda standardmäßig keinen Zugriff auf die von Lori erstellten Dateien hat und umgekehrt. Wenn Sie jedoch ein gemeinsames Gruppenverzeichnis (zum Beispiel /gruppen/account) erstellen und sicherstellen, dass die SGID-Berechtigung auf dieses Verzeichnis angewendet wird und die Gruppe als Gruppenbesitzer festgelegt ist, erhalten alle Dateien, die in diesem Verzeichnis und seinen Unterverzeichnissen erstellt werden, standardmäßig die Gruppe account als Gruppenbesitzer.

Deshalb ist die SGID-Berechtigung sehr nützlich, um sie in Gruppenverzeichnissen zu setzen.

Die SGID-Berechtigung wird in der Ausgabe angezeigt ls -l als s an der Stelle, an der Sie normalerweise die Berechtigung für die Gruppe finden:

[root@hnl data]# ls -ld account
drwxr-sr-x. 2 root account 4096 Apr 30 21:28 account

Das dritte der speziellen Berechtigungen ist das Sticky Bit. Diese Berechtigung ist nützlich, um Dateien vor versehentlichem Löschen in Umgebungen zu schützen, in denen mehrere Benutzer Schreibrechte für dasselbe Verzeichnis haben. Wird das Sticky Bit angewendet, kann ein Benutzer eine Datei nur dann löschen, wenn er der Eigentümer der Datei oder des Verzeichnisses ist, in dem sich die Datei befindet. Aus diesem Grund wird es standardmäßig für das Verzeichnis /tmp verwendet und kann auch für Gruppenverzeichnisse nützlich sein.

Ohne Sticky Bit kann jeder Benutzer, der Dateien in einem Verzeichnis erstellen kann, auch Dateien aus diesem Verzeichnis löschen. In einer öffentlich zugänglichen Gruppenumgebung kann das frustrierend sein. Stellen Sie sich die Benutzer linda und lori vor, die beide Schreibrechte für das Verzeichnis /data/account haben, da sie Mitglied der Gruppe account sind. Daher kann linda Dateien löschen, die von lori erstellt wurden, und umgekehrt.

Wenn Sie das Sticky Bit anwenden, kann ein Benutzer Dateien nur dann löschen, wenn eine der folgenden Bedingungen erfüllt ist:

  • Der Benutzer ist der Eigentümer der Datei;
  • Der Benutzer ist der Eigentümer des Verzeichnisses, in dem sich die Datei befindet.

Bei der Nutzung ls -l, Sie können das Sticky-Bit sehen als t an der Stelle, an der Sie normalerweise die Ausführungsberechtigung für andere sehen:

[root@hnl data]# ls -ld account/
drwxr-sr-t. 2 root account 4096 Apr 30 21:28 account/

Anwendung erweiterter Berechtigungen

Um SUID, SGID und das Sticky-Bit anzuwenden, können Sie auch verwenden chmod. SUID hat den numerischen Wert 4, SGID hat den numerischen Wert 2, und das Sticky-Bit hat den numerischen Wert 1.

Wenn Sie diese Berechtigungen anwenden möchten, müssen Sie ein vierstelliges Argument in chmod, wobei die erste Ziffer sich auf die speziellen Berechtigungen bezieht. Die folgende Zeile beispielsweise fügt die SGID-Berechtigung für das Verzeichnis hinzu und setzt rwx für den Benutzer sowie rx für die Gruppe und andere:

chmod 2755 /somedir

Das ist ziemlich unpraktisch, wenn Sie die aktuellen Zugriffsrechte einsehen möchten, bevor Sie mit chmod im absoluten Modus arbeiten. (Sie riskieren, die Berechtigungen zu überschreiben, wenn Sie das nicht tun.) Daher empfehle ich, im relativen Modus zu arbeiten, wenn Sie eine der speziellen Berechtigungen anwenden möchten:

  1. Für SUID verwenden Sie chmod u+s.
  2. Für SGID verwenden Sie chmod g+s.
  3. Für das Sticky-Bit verwenden Sie chmod +t, gefolgt vom Dateinamen oder Verzeichnisnamen, für den Sie die Berechtigungen festlegen möchten.

In dieser Tabelle finden Sie alle wichtigen Informationen zur Verwaltung von speziellen Berechtigungen.

Rechte in Linux (chown, chmod, SUID, GUID, sticky bit, ACL, umask)

Beispiel für die Arbeit mit speziellen Rechten

In diesem Beispiel verwenden Sie spezielle Berechtigungen, um es Mitgliedern der Gruppe zu erleichtern, Dateien im gemeinsamen Gruppenverzeichnis auszutauschen. Sie setzen die ID-Bits der Gruppenzugehörigkeit und des Sticky-Bits und sehen, dass nach deren Festlegung Funktionen aktiviert werden, die die Zusammenarbeit der Gruppenmitglieder erleichtern.

  1. Öffnen Sie ein Terminal, in dem Sie als Benutzer linda angemeldet sind. Einen Benutzer erstellen Sie mit dem Befehl useradd linda, um ein Passwort hinzuzufügen, passwd linda.
  2. Erstellen Sie im Wurzelverzeichnis den Ordner /data und das Unterverzeichnis /data/sales mit dem Befehl mkdir -p /data/sales. Führen Sie cd /data/sales, um in das Verzeichnis sales zu wechseln. Führen Sie touch linda1 und touch linda2aus, um zwei leere Dateien zu erstellen, deren Eigentümer linda ist.
  3. Führen Sie su - lisa um den aktuellen Benutzer auf den Benutzer lisa zu wechseln, der ebenfalls Mitglied der Gruppe sales ist.
  4. Führen Sie cd /data/sales Führen Sie von diesem Verzeichnis aus ls -laus. Sie werden zwei Dateien sehen, die von Benutzer linda erstellt wurden und der Gruppe linda gehören. Führen Sie rm -f linda*. Dies löscht beide Dateien.
  5. Führen Sie touch lisa1 und touch lisa2, um zwei Dateien zu erstellen, die dem Benutzer lisa gehören.
  6. Führen Sie su — um Ihre Berechtigungen auf Root-Niveau zu erhöhen.
  7. Führen Sie chmod g+s,o+t /data/sales, um das Gruppenidentifikationsbit (GUID) sowie das Sticky-Bit im gemeinsamen Gruppenverzeichnis festzulegen.
  8. Führen Sie su — linda. Führen Sie dann aus touch linda3 und touch linda4. Jetzt sollten Sie sehen, dass die beiden von Ihnen erstellten Dateien der Gruppe sales gehören, die der Eigentümer des Verzeichnisses /data/sales ist.
  9. Führen Sie rm -rf lisa*. Das Sticky-Bit verhindert, dass diese Dateien im Namen des Benutzers linda gelöscht werden, da Sie nicht der Eigentümer dieser Dateien sind. Beachten Sie, dass der Benutzer linda die Dateien dennoch löschen kann, wenn er Eigentümer des Verzeichnisses /data/sales ist!

Verwaltung von ACL (setfacl, getfacl) in Linux

Selbst wenn die oben genannten erweiterten Berechtigungen nützliche Funktionalitäten hinzufügen, wie Linux mit Berechtigungen umgeht, erlaubt es Ihnen nicht, Berechtigungen für mehr als einen Benutzer oder eine Gruppe in einer einzelnen Datei zu gewähren.

Zugriffslisten bieten diese Funktion. Darüber hinaus ermöglichen sie Administratoren, Berechtigungen auf komplexe Weise zu setzen, bei der die festgelegten Berechtigungen in verschiedenen Verzeichnissen unterschiedlich sein können.

Verständnis von ACL

Obwohl das ACL-Subsystem hervorragende Funktionen zu Ihrem Server hinzufügt, hat es einen Nachteil: Nicht alle Dienstprogramme unterstützen es. Daher können Sie die ACL-Einstellungen beim Kopieren oder Verschieben von Dateien verlieren, und die Backup-Software könnte die ACL-Einstellungen möglicherweise nicht sichern.

Das tar-Dienstprogramm unterstützt keine ACL. Um sicherzustellen, dass die ACL-Einstellungen beim Erstellen eines Backups nicht verloren gehen, verwenden Sie star anstatt von tar. star Es funktioniert mit denselben Optionen wie tar; es fügt lediglich die Unterstützung für ACL-Einstellungen hinzu.

Sie können auch die ACL mit Hilfe von getfacl, die mit dem Befehl setfacl wiederhergestellt werden kann, sichern. Um ein Backup zu erstellen, verwenden Sie getfacl -R /directory > file.acls. Um die Einstellungen aus der Backup-Datei wiederherzustellen, verwenden Sie setfacl --restore=file.acl.

Das Fehlen der Unterstützung durch bestimmte Werkzeuge sollte kein Problem darstellen. ACL-Listen werden häufig als strukturelle Maßnahme auf Verzeichnisse und nicht auf einzelne Dateien angewendet.
Daher wird es nicht viele davon geben, sondern nur einige wenige, die an cleveren Stellen im Dateisystem angewendet werden. Daher ist es relativ einfach, die ursprünglichen ACL-Listen, mit denen Sie gearbeitet haben, wiederherzustellen, selbst wenn Ihre Backup-Software diese nicht unterstützt.

Vorbereitung des Dateisystems für ACL

Bevor Sie mit ACL arbeiten, müssen Sie möglicherweise das Dateisystem für die Unterstützung von ACL vorbereiten. Da die Metadaten des Dateisystems erweitert werden müssen, gibt es nicht immer standardmäßig Unterstützung für ACL im Dateisystem. Wenn Sie bei der Konfiguration der ACL-Listen für das Dateisystem die Meldung „operation not supported“ erhalten, fehlt möglicherweise die Unterstützung für ACL in Ihrem Dateisystem.

Um dies zu beheben, müssen Sie die Option acl mount in die Datei /etc/fstab einfügen, damit das Dateisystem standardmäßig mit ACL-Unterstützung gemountet wird.

Ändern und Anzeigen von ACL-Einstellungen mit setfacl und getfacl

Um ACL festzulegen, benötigen Sie den Befehl setfacl. Um die aktuellen ACL-Einstellungen zu sehen, benötigen Sie getfacl. Der Befehl ls -l wird keine vorhandenen ACL angezeigt; es zeigt lediglich ein + nach der Liste der Berechtigungen an, das darauf hinweist, dass ACL-Listen auf die Datei angewendet werden.

Es ist immer hilfreich, die aktuellen ACL-Einstellungen mit Hilfe von getfaclanzuzeigen. Unten im Beispiel sehen Sie die aktuellen Zugriffsrechte, wie sie durch ls -langezeigt werden, sowie wie es mit getfaclaussehen kann. Wenn Sie genau hinschauen, werden Sie feststellen, dass die angezeigten Informationen genau gleich sind.

[root@server1 /]# ls -ld /dir
drwxr-xr-x. 2 root root 6 Feb 6 11:28 /dir
[root@server1 /]# getfacl /dir
getfacl: Entferne führendes '/' von absoluten Pfadnamen
# Datei: dir
# Eigentümer: root
# Gruppe: root
user::rwx
group::r-x
other::r-x

Das Ergebnis der Ausführung des Befehls getfacl zeigt unten, dass die Berechtigungen für drei verschiedene Objekte angezeigt werden: Benutzer, Gruppe und andere. Lassen Sie uns nun ACL hinzufügen, um der Gruppe sales Lese- und Ausführungsrechte zu geben. Der Befehl dafür lautet setfacl -m g:sales:rx /dir. In diesem Befehl -m wird angegeben, dass die aktuellen ACL-Einstellungen geändert werden müssen. Danach g:sales:rx berichtet dem Befehl, die ACL für Lese- und Ausführungsrechte (rx) für die Gruppe (g) Sales. Unten sehen Sie, wie das Team aussieht, sowie die Ausgabe des Befehls getfacl nach der Änderung der aktuellen ACL-Einstellungen.

[root@server1 /]# setfacl -m g:sales:rx /dir
[root@server1 /]# getfacl /dir
getfacl: Entferne führendes '/' von absoluten Pfadnamen
# Datei: dir
# Eigentümer: root
# Gruppe: root
user::rwx
group::r-x
group:sales:r-x
mask::r-x
other::r-x

Jetzt, da Sie verstehen, wie Sie eine Gruppen-ACL festlegen, ist es ganz einfach, ACL für Benutzer und andere Benutzer zu verstehen. Zum Beispiel der Befehl setfacl -m u:linda:rwx /data gibt Benutzer linda im Verzeichnis /data Berechtigungen, ohne ihn Eigentümer zu machen und ohne den aktuellen Eigentümer zu ändern.

Der Befehl setfacl bietet viele Möglichkeiten und Optionen. Eine Option ist besonders wichtig, nämlich der Parameter -R. Wenn er verwendet wird, macht die Option die ACL-Einstellung für alle Dateien und Unterverzeichnisse, die derzeit im Verzeichnis existieren, in dem Sie die ACL festlegen. Es wird empfohlen, diese Option immer zu verwenden, wenn Sie ACL-Listen für bestehende Verzeichnisse ändern.

Arbeiten mit Standard-ACLs

Einer der Vorteile der Verwendung von ACL-Listen besteht darin, dass Sie mehreren Benutzern oder Gruppen im Verzeichnis Berechtigungen erteilen können. Ein weiterer Vorteil ist, dass Sie bei der Arbeit mit Standard-ACLs Vererbung aktivieren können.

Durch die Festlegung der Standard-ACL definieren Sie die Berechtigungen, die für alle neuen Elemente, die im Verzeichnis erstellt werden, festgelegt werden. Beachten Sie, dass die Standard-ACL die Berechtigungen für vorhandene Dateien und Unterverzeichnisse nicht ändert. Um diese zu ändern, müssen Sie zudem eine reguläre ACL hinzufügen!

Das ist wichtig zu wissen. Wenn Sie ACLs verwenden möchten, um den Zugriff mehrerer Benutzer oder Gruppen auf dasselbe Verzeichnis zu steuern, müssen Sie die ACL zweimal festlegen. Zuerst verwenden Sie setfacl -R -m, um die ACL für die aktuellen Dateien zu ändern. Dann verwenden Sie setfacl -m d:, um sich um alle neuen Elemente zu kümmern, die ebenfalls erstellt werden.

Um die Standard-ACL festzulegen, müssen Sie lediglich die Option d nach der Option -m hinzufügen (die Reihenfolge ist wichtig!). Daher verwenden Sie setfacl -m d:g:sales:rx /data, wenn Sie möchten, dass die Verkaufsgruppe alles, was künftig im Verzeichnis /data erstellt wird, lesen und ausführen kann.

Bei der Verwendung von Standard-ACL-Listen kann es auch nützlich sein, ACLs für andere festzulegen. In der Regel macht das nicht viel Sinn, da Sie die Berechtigungen für andere auch ändern können, indem Sie chmod. Allerdings können Sie nicht tun, was Sie nicht tun können, chmod, nämlich die Berechtigungen festzulegen, die anderen Benutzern für jede neue Datei, die jemals erstellt wird, gewährt werden sollen. Wenn Sie möchten, dass andere keinerlei Berechtigungen für etwas erhalten, das in /data erstellt wurde, verwenden Sie setfacl -m d:o::- /data.

ACLs und herkömmliche Berechtigungen sind nicht immer gut integriert. Es können Probleme auftreten, wenn Sie standardmäßig ACLs auf ein Verzeichnis anwenden und anschließend Elemente in dieses Verzeichnis hinzugefügt werden, und Sie versuchen, die herkömmlichen Berechtigungen zu ändern. Änderungen, die an herkömmlichen Berechtigungen vorgenommen werden, werden möglicherweise nicht gut in der ACL-Übersicht reflektiert. Um Probleme zu vermeiden, setzen Sie zuerst die herkömmlichen Berechtigungen und wenden dann die standardmäßigen ACLs an (und versuchen Sie danach, diese nicht erneut zu ändern).

Beispiel für die Verwaltung erweiterter Berechtigungen mit ACLs

In diesem Beispiel arbeiten Sie weiter mit den Verzeichnissen /data/account und /data/sales, die Sie zuvor erstellt haben. In den vorherigen Beispielen haben Sie sichergestellt, dass die Gruppe sales Berechtigungen für /data/sales hat und die Gruppe account Berechtigungen für /data/account hat.

Stellen Sie zunächst sicher, dass die Gruppe account Leserechte im Verzeichnis /data/sales hat, und dass die Gruppe sales Leserechte im Verzeichnis /data/account erhält.

Dann setzen Sie die Standard-ACLs, um sicherzustellen, dass für alle neuen Dateien die richtigen Berechtigungen für alle neuen Elemente festgelegt sind.

  1. Öffnen Sie das Terminal.
  2. Führen Sie setfacl -m g:account:rx /data/sales und setfacl -m g:sales:rx /data/account.
  3. Führen Sie getfacl, um sicherzustellen, dass die Zugriffsrechte wie beabsichtigt gesetzt wurden.
  4. Führen Sie setfacl -m d:g:account:rwx,g:sales:rx /data/sales, um die Standard-ACL für das Verzeichnis sales festzulegen.
  5. Fügen Sie die Standard-ACL für das Verzeichnis /data/account hinzu, mit setfacl -m d:g:sales:rwx,g:account:rx /data/account.
  6. Stellen Sie sicher, dass die ACL-Einstellungen wirksam sind, indem Sie eine neue Datei in /data/sales hinzufügen. Führen Sie aus touch /data/sales/newfile und führen Sie aus getfacl /data/sales/newfile um die aktuellen Berechtigungen zu überprüfen.

Festlegen der Standardrechte mit umask

Oben haben Sie gelernt, wie man mit Standard-ACLs arbeitet. Wenn Sie keine ACL verwenden, gibt es eine Shell-Option, die die Standardberechtigungen festlegt, die Sie erhalten: umask (Umkehrmaske). In diesem Abschnitt lernen Sie, wie Sie die Standardberechtigungen ändern. umask.

Sie haben wahrscheinlich bemerkt, dass beim Erstellen einer neuen Datei bestimmte Standardberechtigungen festgelegt werden. Diese Berechtigungen werden durch die Einstellung bestimmt, umask. Diese Shell-Option gilt für alle Benutzer nach dem Anmelden im System. In der Einstellung umask wird ein Zahlenwert verwendet, der von den maximalen Berechtigungen subtrahiert wird, die automatisch für eine Datei festgelegt werden können; die maximale Einstellung für Dateien ist 666 und für Verzeichnisse 777.

Es gibt jedoch einige Ausnahmen von dieser Regel. Eine vollständige Übersicht über die Einstellungen finden Sie umask in der Tabelle unten.

Von den in umask, wie bei den numerischen Argumenten für den Befehl chmod, bezieht sich die erste Ziffer auf die Berechtigungen des Benutzers, die zweite Ziffer auf die Berechtigungen der Gruppe und die letzte auf die standardmäßig für andere festgelegten Berechtigungen. Der Wert umask Standard 022 ergibt 644 für alle neuen Dateien und 755 für alle neuen Verzeichnisse, die auf Ihrem Server erstellt werden.

Eine vollständige Übersicht über alle numerischen Werte umask und deren Ergebnisse finden Sie in der Tabelle unten.

Rechte in Linux (chown, chmod, SUID, GUID, sticky bit, ACL, umask)

Eine einfache Möglichkeit, zu sehen, wie der umask-Parameter funktioniert, ist wie folgt: Beginnen Sie mit den Standardberechtigungen für eine Datei, die auf 666 eingestellt sind, und ziehen Sie umask ab, um die effektiven Berechtigungen zu erhalten. Machen Sie dasselbe für ein Verzeichnis mit den Standardberechtigungen von 777.

Es gibt zwei Möglichkeiten, die umask-Einstellung zu ändern: für alle Benutzer und für einzelne Benutzer. Wenn Sie umask für alle Benutzer festlegen möchten, müssen Sie sicherstellen, dass die umask-Einstellung beim Starten von Shell-Umgebungsdateien berücksichtigt wird, wie in /etc/profile angegeben. Der richtige Ansatz ist, ein Shell-Skript namens umask.sh im Verzeichnis /etc/profile.d zu erstellen und die umask, die Sie verwenden möchten, in diesem Shell-Skript anzugeben. Wenn in dieser Datei die umask geändert wird, gilt dies für alle Benutzer nach dem Anmelden am Server.

Eine Alternative zur Konfiguration der umask über /etc/profile und zugehörige Dateien, die für alle Benutzer gilt, die sich anmelden, besteht darin, die umask-Einstellungen in einer Datei namens .profile zu ändern, die im Home-Verzeichnis jedes Benutzers erstellt wird.

Die in dieser Datei vorgenommenen Einstellungen gelten nur für einzelne Benutzer; daher ist dies eine gute Methode, wenn Sie mehr Details benötigen. Persönlich finde ich diese Funktion nützlich, um den Standardwert von umask für den Benutzer root auf 027 zu ändern, während normale Benutzer mit dem Standardwert von umask 022 arbeiten.

Arbeiten mit erweiterten Benutzerattributen

Dies ist der abschließende Abschnitt über Berechtigungen in Linux.

Beim Arbeiten mit Berechtigungen besteht immer ein Zusammenhang zwischen dem Benutzer- oder Gruppenobjekt und den Berechtigungen, die diese Benutzer- oder Gruppenobjekte für eine Datei oder ein Verzeichnis haben. Eine alternative Methode zum Schutz von Dateien auf einem Linux-Server ist die Arbeit mit Attributen.
Attribute funktionieren unabhängig von dem Benutzer, der auf die Datei zugreift.

Wie bei ACLs kann es erforderlich sein, eine Option für Dateiattribute zu aktivieren. mount.

Dies ist die Option user_xattr. Wenn Sie die Meldung „Operation nicht unterstützt“ erhalten, während Sie mit erweiterten Benutzerattributen arbeiten, stellen Sie sicher, dass Sie die Option mount in der Datei /etc/fstab gesetzt haben.

Viele Attribute sind dokumentiert. Einige Attribute sind verfügbar, wurden jedoch noch nicht implementiert. Verwenden Sie diese nicht; sie bringen Ihnen nichts ein.

Hier sind die nützlichsten Attribute, die Sie anwenden können:

A Dieses Attribut stellt sicher, dass die Zugriffszeit auf die Datei nicht verändert wird.
Normalerweise sollte jedes Mal, wenn eine Datei geöffnet wird, die Zugriffszeit in den Metadaten der Datei protokolliert werden. Dies hat negative Auswirkungen auf die Leistung; daher kann das Attribut A verwendet werden, um diese Funktion zu deaktivieren.

a Dieses Attribut ermöglicht das Hinzufügen, jedoch nicht das Löschen von Dateien.

c Wenn Sie ein Dateisystem verwenden, das die volumenbasierte Kompression unterstützt, sorgt dieses Datei-Attribut dafür, dass die Datei beim ersten Aktivieren der Kompression komprimiert wird.

OS-Angriffen Dieses Attribut gewährleistet, dass Änderungen an Dateien sofort auf die Festplatte geschrieben werden und nicht zuerst in den Cache. Dies ist ein nützliches Attribut für kritische Datenbankdateien, um sicherzustellen, dass sie nicht zwischen dem Dateicache und der Festplatte verloren gehen.

d Dieses Attribut stellt sicher, dass die Datei nicht in Backups gespeichert wird, die mit dem Dump-Utility erstellt werden.

I Dieses Attribut aktiviert die Indizierung für das Verzeichnis, in dem es eingeschaltet ist. Dies ermöglicht einen schnelleren Zugriff auf Dateien für primitive Dateisysteme wie Ext3, die keine B-tree-Datenbank für den schnellen Zugriff auf Dateien verwenden.

i Dieses Attribut macht die Datei unveränderlich. Daher kann die Datei nicht geändert werden, was nützlich ist für Dateien, die zusätzlichen Schutz benötigen.

j Dieses Attribut gewährleistet, dass in einem ext3-Dateisystem die Datei zunächst im Journal und dann in die Datenblöcke auf der Festplatte geschrieben wird.

s Schreibe die Blöcke, in denen die Datei gespeichert wurde, nach dem Löschen der Datei mit 0 über. Dies stellt sicher, dass eine Wiederherstellung der Datei unmöglich ist, nachdem sie gelöscht wurde.

u Dieses Attribut speichert Informationen über das Löschen. Dies ermöglicht die Entwicklung eines Tools, das mit diesen Informationen arbeitet, um gelöschte Dateien wiederherzustellen.

Wenn Sie die Attribute anwenden möchten, können Sie den Befehl verwenden chattr. Zum Beispiel verwenden Sie chattr +s somefile, um Attribute auf somefile anzuwenden. Möchten Sie das Attribut entfernen? Dann verwenden Sie chattr -s somefile, und es wird entfernt. Um eine Übersicht über alle derzeit angewendeten Attribute zu erhalten, verwenden Sie den Befehl lsattr.

Zusammenfassung

In diesem Artikel haben Sie gelernt, wie man mit Berechtigungen arbeitet. Sie haben über die drei grundlegenden Berechtigungen, erweiterte Berechtigungen und die Anwendung von ACL-Listen im Dateisystem gelesen. Außerdem haben Sie erfahren, wie Sie den umask-Parameter verwenden, um Standardberechtigungen anzuwenden. Am Ende dieses Artikels wussten Sie, wie man benutzerdefinierte erweiterte Attribute anwendet, um ein zusätzliches Sicherheitsniveau im Dateisystem zu gewährleisten.

Wenn Ihnen diese Übersetzung gefallen hat, lassen Sie es mich bitte in den Kommentaren wissen. Das wird mir mehr Motivation geben, nützliche Übersetzungen zu erstellen.

Im Artikel habe ich einige Tippfehler und grammatikalische Fehler korrigiert. Ich habe einige umfangreiche Absätze in kleinere umformuliert, um die Lesbarkeit zu verbessern.

Anstelle von „Nur jemand mit administrativen Rechten auf das Verzeichnis kann die Ausführungsberechtigung erteilen.“ habe ich es in „Nur jemand mit Schreibrechten auf das Verzeichnis kann die Ausführungsberechtigung erteilen.“ geändert, was korrekter ist.

Vielen Dank für den Hinweis. berez.

Ersetzt durch:
Wenn Sie nicht der Besitzer des Benutzers sind, prüft die Shell, ob Sie Mitglied einer Gruppe sind, die ebenfalls als Datei-Gruppe bezeichnet wird.

Auf:
Wenn Sie nicht der Besitzer der Datei sind, prüft die Shell, ob Sie Mitglied der Gruppe sind, die Berechtigungen für diese Datei hat. Wenn Sie Mitglied dieser Gruppe sind, erhalten Sie Zugang zur Datei mit den für die Gruppe festgelegten Berechtigungen, und die Shell unterbricht die Überprüfung.

Danke für den Hinweis. CryptoPirate

Quelle: habr.com

Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server 🔥 Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server | ProHoster