SSD Nodes Learn Hosting plans →
Anleitungen Matt ConnorVon Matt Connor

drwxr-xr-x erklärt: Linux-Dateirechte lesen

Lesen Sie drwxr-xr-x Zeichen für Zeichen und ordnen Sie 755 zu. Erfahren Sie, warum x Verzeichnisse betretbar macht und chmod 777 keine Lösung ist.

Was drwxr-xr-x bedeutet

drwxr-xr-x beschreibt ein Verzeichnis, das sein Besitzer ändern kann und das jeder andere Benutzer lesen und betreten kann, ohne etwas zu ändern. Im Oktalformat lautet dieser Modus 755. Linux gibt diese zehn Zeichen am Anfang jeder Zeile der ls -l-Ausgabe aus. Sie bedeuten immer dasselbe und stehen immer in derselben Reihenfolge. Wenn Sie diese eine Zeichenfolge verstehen, können Sie alle entsprechenden Angaben lesen.

Eine Regel gilt vor allen anderen, weil sie bestimmt, ob Ihre eigenen Tests aussagekräftig sind. Der Benutzer root ignoriert die Berechtigungsbits. Der Kernel gewährt root die CAP_DAC_OVERRIDE-Fähigkeit (Außerkraftsetzung der obligatorischen Zugriffskontrolle), sodass root Dateien öffnet, deren Modus den Zugriff verbietet. Jedes Beispiel auf dieser Seite funktioniert für root unabhängig von den angegebenen Bits. Melden Sie sich als normaler Benutzer an, wenn Sie beobachten möchten, wie die Regeln greifen.

Die zehn Zeichen, einzeln erklärt

Erstellen Sie ein Verzeichnis und eine Datei zur Anzeige. Die folgenden Befehle ändern nichts außerhalb des neuen Verzeichnisses.

mkdir -p ~/permdemo/inner
printf 'hello\n' > ~/permdemo/inner/notes.txt
ls -ld ~/permdemo ~/permdemo/inner ~/permdemo/inner/notes.txt

Bei der üblichen Standard-umask von 022 beginnen die beiden Verzeichniszeilen mit drwxr-xr-x und die Dateizeile mit -rw-r--r--.

Zeichen 1 gibt den Dateityp an, nicht eine Berechtigung. d ist ein Verzeichnis. - ist eine reguläre Datei. l ist ein symbolischer Link. c und b sind Zeichen- bzw. Blockgeräteknoten. s ist ein Socket und p eine Named Pipe. Dieses Zeichen steht außerhalb des Oktalwerts. Deshalb wird drwxr-xr-x zu 755 und nicht zu einem Wert, der mit d beginnt.

Die neun folgenden Zeichen bestehen aus drei Gruppen mit jeweils drei Zeichen. Ihre Reihenfolge ändert sich nie.

  • Die Zeichen 2 bis 4 bilden die Besitzer-Gruppe. Sie gelten für den Benutzer, dem die Datei gehört.
  • Die Zeichen 5 bis 7 bilden die Gruppen-Gruppe. Sie gelten für die Gruppe der Datei.
  • Die Zeichen 8 bis 10 bilden die Andere-Gruppe. Sie gelten für alle übrigen Benutzer.

Innerhalb einer Gruppe stehen die Positionen immer in der Reihenfolge r, dann w und dann x. Ein Bindestrich bedeutet, dass dieses Bit deaktiviert ist. Die Buchstaben ändern ihre Position nie. r-x bedeutet Lesen ohne Schreiben. -w- bedeutet Schreiben ohne Lesen. Das ist zulässig, kommt aber selten vor.

Damit gliedert sich drwxr-xr-x wie folgt: d für das Verzeichnis, anschließend rwx für den Besitzer, r-x für die Gruppe und r-x für Andere.

Einige Systeme geben ein elftes Zeichen aus. Ein nachgestellter Punkt, drwxr-xr-x., bedeutet, dass die Datei einen SELinux-Kontext (security enhanced Linux) trägt. SELinux-Distributionen wie Fedora und Rocky geben diesen standardmäßig aus. Ein nachgestelltes Pluszeichen, drwxr-xr-x+, bedeutet, dass die Datei eine POSIX-ACL (access control list) mit zusätzlichen Regeln über diese neun Bits hinaus trägt. Lesen Sie diese zusätzlichen Regeln mit getfacl <path> aus.

r, w und x haben bei einem Verzeichnis unterschiedliche Aufgaben

Das ist die erste Regel, die Anfänger häufig falsch verstehen. Die Buchstaben sind bei einer Datei und bei einem Verzeichnis gleich. Die dadurch gewährten Berechtigungen sind jedoch unterschiedlich.

  • r auf einer Datei liest ihren Inhalt. r auf einem Verzeichnis listet die darin enthaltenen Namen auf. Genau das benötigt ein einfaches ls.
  • w auf einer Datei ändert ihren Inhalt. w auf einem Verzeichnis fügt Einträge hinzu und entfernt sie. Das Löschen einer Datei ändert das Verzeichnis. Daher entscheidet die Schreibberechtigung des Verzeichnisses. Der Modus der Datei selbst hat darauf keinen Einfluss.
  • x auf einer Datei führt sie als Programm aus. x auf einem Verzeichnis durchläuft es. Das bedeutet, dass der Kernel bei der Pfadauflösung einen Namen darin auflösen kann.

Das Durchlaufen ist der Teil, der viele überrascht. x auf einem Verzeichnis führt nichts aus. Zum Öffnen von /srv/site/index.html ist zunächst x auf / erforderlich, danach x auf /srv, dann x auf /srv/site und schließlich r auf der Datei. Fehlt Ihnen in dieser Kette bei einem Verzeichnis x, endet die Auflösung an dieser Stelle. Der Aufrufer erhält für den gesamten Pfad Permission denied, auch wenn die Datei am Ende für alle Benutzer lesbar ist. namei -l /srv/site/index.html gibt jeden Schritt der Kette mit Modus und Eigentümer aus. So sehen Sie, welches Glied die Auflösung stoppt.

Ein Verzeichnis mit r, aber ohne x, ist ein ungewöhnlicher Zwischenzustand, den Sie kennen sollten. Ein normaler Benutzer kann die Namen auflisten, weil dies durch r ermöglicht wird. Er kann jedoch keine Einträge mit stat auslesen. Daher füllt ls -l die Spalten für Größe und Modus mit Fragezeichen und gibt für jeden Eintrag ls: cannot access ...: Permission denied aus.

Die Buchstaben in 755 umwandeln

Jede Triade ist eine Dreierzahl aus Bits. r entspricht 4, w entspricht 2 und x entspricht 1. Addieren Sie die gesetzten Bits.

  • rwx entspricht 4 + 2 + 1 = 7
  • rw- entspricht 4 + 2 = 6
  • r-x entspricht 4 + 1 = 5
  • r-- entspricht 4
  • --- entspricht 0

drwxr-xr-x ist daher 7 für den Eigentümer, 5 für die Gruppe und 5 für andere: 755. -rw-r--r-- ist 6, 4, 4: 644. drwxrwxr-x ist 7, 7, 5: 775. Das entspricht 755 mit gesetztem Schreibrecht für die Gruppe. Sie müssen Zeichen nie manuell zählen, weil stat beide Darstellungen gleichzeitig ausgibt.

stat -c '%A %a %U %G %n' ~/permdemo ~/permdemo/inner/notes.txt

%A ist die Buchstabendarstellung, %a die Oktaldarstellung und %U sowie %G bezeichnen den Eigentümer und die Eigentümergruppe.

Die Berechtigungszeichenfolgen, nach denen häufig gesucht wird

Diese Modi finden Sie auf realen Servern. Angegeben sind jeweils der Oktalwert und typische Einsatzbereiche.

  • -rw-r--r-- entspricht 644. Gewöhnliche Dateien, die ein Dienst nur liest, beispielsweise eine Konfigurationsdatei oder eine HTML-Seite.
  • -rw------- entspricht 600. Geheimnisse wie ein privater SSH-Schlüssel oder die .env-Datei einer Anwendung.
  • -rw-rw-r-- entspricht 664. Eine Datei in einem für eine Gruppe freigegebenen Verzeichnis, in die Teammitglieder schreiben müssen.
  • -rwxr-xr-x entspricht 755. Skripte und Binärdateien wie /usr/local/bin/backup.sh und die meisten Dateien unter /usr/bin.
  • -rwx------ entspricht 700. Ein privates Skript, das nur sein Besitzer ausführen darf.
  • drwxr-xr-x entspricht 755. Fast jedes Systemverzeichnis und das Dokumentenstammverzeichnis einer Website.
  • drwx------ entspricht 700. ~/.ssh und Home-Verzeichnisse auf einem abgesicherten System.
  • drwxrwxr-x entspricht 775. Ein Verzeichnis, in das die Gruppe des Besitzers schreiben darf.
  • drwxrwsr-x entspricht 2775. Dasselbe, zusätzlich mit dem setgid-Bit, sodass neue Dateien darin die Gruppe des Verzeichnisses erben.
  • drwxrwxrwt entspricht 1777. /tmp. Das abschließende t ist das Sticky-Bit. Dadurch darf ein Benutzer nur seine eigenen Dateien löschen.
  • -rwsr-xr-x entspricht 4755. Eine setuid-Binärdatei, die mit den Rechten ihres Besitzers ausgeführt wird, beispielsweise /usr/bin/passwd und /usr/bin/sudo.
  • -rw-rw-rw- entspricht 666 und drwxrwxrwx entspricht 777. Weltweit beschreibbar. Auf einem Server ist das fast immer ein Fehler.
  • lrwxrwxrwx wird für jeden symbolischen Link angezeigt. Linux ignoriert die Modusbits eines Links und prüft stattdessen das Ziel. Daher hat diese Zeichenfolge keinerlei Bedeutung.

Welche Triade gilt für Sie?

Hier liegt die zweite Regel, die Anfänger häufig falsch anwenden. Der Kernel wählt genau eine Triade aus und beendet die Prüfung danach.

Wenn Ihre Benutzer-ID mit dem Eigentümer der Datei übereinstimmt, gilt die Eigentümer-Triade. Die Gruppen- und Other-Bits werden dann nicht geprüft. Andernfalls gilt die Gruppen-Triade, wenn die Gruppe der Datei eine Ihrer Gruppen ist. Andernfalls gilt die Other-Triade.

Daraus folgen zwei Punkte. Die Eigentümer-Triade gilt auch dann, wenn sie die restriktivste ist. Eine Datei mit dem Modus 0466, dargestellt als -r--rw-rw-, gewährt ihrem Eigentümer nur Leserechte, während alle anderen schreiben dürfen. Die Eigentümerprüfung war zuerst erfolgreich, und danach wurde kein weiterer Berechtigungssatz geprüft. Das ist zulässig und führt beim ersten Kontakt häufig zu Verwirrung.

Die Gruppen-Triade wird anhand der Gruppe der Datei ausgewählt, nicht anhand der Liste Ihrer Gruppen. ls -l gibt in jeder Zeile zwei Namen aus: zuerst den Eigentümer, dann die Gruppe. Nur diese zweite Gruppe ist für die Datei relevant. Die Mitgliedschaft in zwanzig Gruppen hilft nur, wenn die Datei eine davon verwendet.

id
stat -c '%U %G %A %n' ~/permdemo/inner/notes.txt

id gibt Ihren Benutzer und jede Gruppe aus, der Sie angehören. stat gibt den Eigentümer und die Gruppe der Datei aus. Vergleichen Sie beide Ausgaben. Dann wissen Sie, welche Triade der Kernel für Sie verwendet.

Deshalb erhält ein gemeinsam verwendetes Verzeichnis normalerweise eine Gruppe und das setgid-Bit. sudo chmod 2775 /srv/shared wird als drwxrwsr-x dargestellt. In diesem Verzeichnis erstellte Dateien übernehmen dann die Gruppe des Verzeichnisses statt der persönlichen Gruppe des Erstellers. Neue Unterverzeichnisse erhalten ebenfalls das setgid-Bit. Setgid legt die Gruppe fest, nicht den Modus. Mit der standardmäßigen umask 022 wird eine neue Datei darin weiterhin mit den Rechten 644 erstellt. Teammitglieder können sie also lesen, aber nicht ändern. Schreibrechte für die Gruppe erfordern eine umask von 002 für alle Benutzer, die dort arbeiten, oder eine Default-ACL für das Verzeichnis. Diese ersetzt die umask für darin erstellte Dateien. Jedem Dienst ein eigenes Konto zu geben, ist die andere Hälfte dieses Themas. Sie wird unter ein Linux-Benutzer pro Dienst auf einem VPS behandelt.

umask legt den Modus jeder neuen Datei fest

Eine neue Datei übernimmt ihren Modus nicht direkt von Ihnen. Sie übernimmt ihn vom Programm, das sie erstellt, abzüglich der Bits, die Ihre umask löscht. Die umask ist eine Maske zum Entfernen von Bits. Eine größere umask erzeugt daher Dateien mit stärker eingeschränkten Zugriffsrechten.

Die meisten Distributionen verwenden standardmäßig 022. Ein Programm fordert für eine reguläre Datei normalerweise 0666 an. Für ein Verzeichnis fordert es normalerweise 0777 an. Die umask löscht 022 aus beiden Anforderungen. Dadurch erhalten Dateien den Modus 644 und Verzeichnisse den Modus 755. Genau dieses Paar finden Sie auf einem frisch eingerichteten VPS überall.

umask
umask -S
touch ~/permdemo/new.txt && mkdir -p ~/permdemo/newdir
ls -ld ~/permdemo/new.txt ~/permdemo/newdir

umask -S gibt denselben Wert als Buchstaben aus. Das ist leichter zu lesen als 0022. Setzen Sie umask 027 in ~/.profile auf einen restriktiveren Standardwert: 640 für Dateien und 750 für Verzeichnisse. Dadurch kann Ihre Gruppe Ihre Dateien lesen, während alle anderen keinen Zugriff erhalten. Diese Ergebnisse setzen die üblichen Anforderungen 0666 und 0777 voraus.

Zwei Einschränkungen sind wichtig. Die umask kann nur Bits löschen, niemals hinzufügen. Eine Datei, die mit 0666 angefordert wird, wie es touch tut, ist unabhängig von der Einstellung niemals ausführbar. Ein Programm, das nur Zugriff für den Eigentümer anfordert, behält diese Einschränkung bei: mktemp erstellt unter einer umask von 022 oder 027 gleichermaßen Dateien mit dem Modus 600 und Verzeichnisse mit dem Modus 700. Außerdem liest ein systemd-Dienst niemals Ihr Shell-Profil. Setzen Sie den Wert stattdessen in der Unit-Datei.

[Service]
UMask=0027

Ein Fall umgeht die umask vollständig. Wenn das übergeordnete Verzeichnis über eine Standard-ACL verfügt, wird die umask ignoriert. Die Berechtigungsbits der neuen Datei stammen stattdessen aus der geerbten ACL.

Warum Webdateien 644 und Webverzeichnisse 755 haben

Ein Webserver läuft unter einem eigenen Benutzerkonto: www-data unter Debian und Ubuntu, nginx unter Rocky und Alma. Dieser Prozess benötigt Leserechte für die bereitgestellten Dateien sowie das Ausführungsrecht für die übergeordneten Verzeichnisse. Er muss diese Dateien und Verzeichnisse nicht schreiben können. Bei einer statischen Website sollte er das niemals dürfen.

644 für eine Datei gibt dem Eigentümer Schreibrechte und allen Benutzern Leserechte. Dadurch kann der Deployment-Benutzer Dateien veröffentlichen, und der Webbenutzer kann sie ausliefern. 755 für ein Verzeichnis gibt dem Eigentümer Schreibrechte und allen Benutzern das Ausführungsrecht. Der Webbenutzer kann den Pfad dadurch durchlaufen, aber nichts hinzufügen oder löschen. Ein Fehler in der Anwendung kann die ausgelieferten Seiten dann nicht überschreiben.

Das Ausführungsrecht für Verzeichnisse ist genau hier entscheidend. Wenn die Website in /home/deploy/site liegt, /home/deploy auf 750 gesetzt ist und der Webbenutzer nicht zur Gruppe des Verzeichnisses gehört, kann der Webbenutzer das Home-Verzeichnis überhaupt nicht betreten. Die Anfrage endet dann mit HTTP 403. In /var/log/nginx/error.log steht beispielsweise folgende Zeile:

open() "/home/deploy/site/index.html" failed (13: Permission denied), client: 203.0.113.5

Die 13 steht für EACCES, also für die vom Kernel verweigerte Berechtigung. Mit dem Netzwerk ist alles in Ordnung: Der Port lauscht, und die Anfrage ist angekommen. Das ist verwirrend, solange Sie noch lernen, wie lauschende Ports unter Linux funktionieren. Führen Sie namei -l /home/deploy/site/index.html aus und prüfen Sie die Verzeichniskette. Suchen Sie nach dem ersten Verzeichnis ohne x für andere Benutzer.

Ein Verzeichnis, in das die Anwendung schreibt, beispielsweise ein Upload-Pfad, ist eine Ausnahme. Gewähren Sie diese Berechtigung über den Eigentümer und nicht über einen weiteren Modus: sudo chown -R www-data:www-data /srv/site/uploads. Lassen Sie den Modus auf 755 gesetzt. Beschränken Sie den Schreibzugriff auf das eine Verzeichnis, das ihn benötigt.

chmod, ohne den gesamten Verzeichnisbaum zu vereinheitlichen

chmod unterstützt beide Schreibweisen. Mit der Oktalschreibweise setzen Sie alle neun Bits gleichzeitig: chmod 644 notes.txt. Die symbolische Schreibweise ändert nur die angegebenen Berechtigungen und lässt den Rest unverändert: chmod u+x deploy.sh fügt dem Eigentümer die Ausführberechtigung hinzu, und chmod go-w notes.txt entfernt die Schreibberechtigung für Gruppe und andere.

Bei rekursiven Änderungen können Verzeichnisbäume beschädigt werden. chmod -R 755 . markiert jedes Bild und jede Konfigurationsdatei als ausführbar, weil chmod nicht zwischen einem Skript und einer JPEG-Datei unterscheiden kann. Verwenden Sie stattdessen das große X.

chmod -R u=rwX,go=rX ~/permdemo
stat -c '%a %n' ~/permdemo ~/permdemo/inner/notes.txt

Das große X setzt die Ausführberechtigung für Verzeichnisse und für Dateien, bei denen bereits irgendwo ein Ausführungsbit gesetzt war. Verzeichnisse erhalten 755, gewöhnliche Dateien 644, und bereits ausführbare Skripte behalten diese Berechtigung. Wenn eine Datei bereits einen passenden Modus besitzt, kopiert chmod --reference=good.sh other.sh diesen auf die anderen Dateien.

Die Meldungen bei falschen Berechtigungen

bash: ./deploy.sh: Permission denied bedeutet, dass das Skript im für Sie geltenden Berechtigungstriad kein x-Bit besitzt oder ein Verzeichnis in seinem Pfad kein x besitzt. chmod u+x deploy.sh behebt den ersten Fall.

bash: ./deploy.sh: cannot execute: required file not found bezeichnet einen anderen Fehler mit einer irreführenden Bezeichnung. Das x-Bit ist korrekt gesetzt, aber der in der ersten Zeile angegebene Interpreter fehlt. Die übliche Ursache sind Windows-Zeilenenden. Deshalb sucht der Kernel nach einem Interpreter namens /bin/bash\r. Beheben Sie das mit sed -i 's/\r$//' deploy.sh.

Permissions 0644 for '/home/deploy/.ssh/id_ed25519' are too open. stammt vom SSH-Client. Er verweigert die Verwendung eines privaten Schlüssels, den andere Konten lesen können. Für den Schlüssel ist 600 erforderlich, für ~/.ssh 700. Die vollständige Verwaltung von Schlüsseln finden Sie unter SSH-Schlüssel und ihre Dateiberechtigungen verwalten.

Authentication refused: bad ownership or modes for directory /home/deploy/.ssh erscheint im Journal des Servers, wenn ein Home-Verzeichnis oder dessen .ssh für die Gruppe beschreibbar ist. Die sshd-Einstellung StrictModes weist den Schlüssel zurück. Auf der Clientseite sieht das wie eine unerwartete Kennwortabfrage ohne Erklärung aus.

sudo: /etc/sudoers is world writable, gefolgt von sudo: no valid sudoers sources found, quitting, bedeutet, dass sudo die Berechtigungen seiner eigenen Konfigurationsdatei geprüft und die Ausführung verweigert hat. Diese Datei sollte 0440 haben und darf niemals für alle Benutzer beschreibbar sein. Das ist die typische Folge eines weitreichenden rekursiven chmod. Der Fehler kann zusammen mit der oben genannten sshd-Meldung auftreten. Dann bleibt nur die Konsole des Providers als Zugriffsmöglichkeit.

Warum 777 keine Lösung ist

777 gewährt jedem Benutzer auf dem System und jedem Prozess unter einem dieser Benutzer Schreibzugriff. Ein Server führt Dienste unter eigenen Benutzern aus. Daher umfasst „jeder“ auf einem VPS deutlich mehr Konten als auf einem Laptop. Ein kompromittierter Dienst kann überall dort schreiben, wo 777 dies erlaubt.

Unterhalb eines Webroots ist der Schaden unmittelbar. Ein für alle beschreibbares Verzeichnis, das der Server ebenfalls ausliefert, macht aus einer Sicherheitslücke beim Datei-Upload eine Möglichkeit, ein Skript abzulegen und anschließend abzurufen.

777 ist bei einer Frage zu Besitzrechten fast immer die falsche Antwort. Das Symptom lautet: „Die Anwendung kann nicht in dieses Verzeichnis schreiben.“ Die Ursache ist, dass das Verzeichnis dem falschen Benutzer gehört. sudo chown -R appuser:appuser /srv/app/storage mit dem Modus 755 behebt das Problem: Die Anwendung kann dort schreiben, während alle anderen Konten das Verzeichnis weiterhin auflisten und betreten, aber nicht in es schreiben können. Diese Konten sollten eingerichtet werden, bevor etwas bereitgestellt wird. Das gehört in die ersten zehn Minuten auf einem neuen VPS.

Weltweiter Schreibzugriff ist an einer bekannten Stelle legitim: /tmp. Er wird drwxrwxrwt geschrieben. Das abschließende t ist das Sticky Bit: Das Verzeichnis ist für alle beschreibbar, aber ein Benutzer darf nur Dateien löschen, die ihm gehören. Ohne dieses Bit könnte jedes Konto die temporären Dateien eines anderen Kontos löschen.

Lesen Sie einen Modus, bevor Sie ihn ändern

Diese Befehle lesen nur den Status. Sie können daher überall sicher ausgeführt werden.

id
umask
stat -c '%A %a %U %G %n' ~/permdemo ~/permdemo/inner/notes.txt
namei -l ~/permdemo/inner/notes.txt
find ~/permdemo -perm -0002

find <path> -perm -0002 listet alles unterhalb eines Pfads auf, dessen Schreibbit für alle Benutzer gesetzt ist. Das ist die schnellste Möglichkeit, einen Server zu prüfen, nachdem jemand mit chmod 777 Reparaturen durchgeführt hat.

Um zu prüfen, ob ein bestimmtes Dienstkonto ein Verzeichnis betreten kann, führen Sie die Abfrage als dieses Konto aus. sudo -u www-data test -x /srv/site && echo yes || echo no gibt yes aus, wenn dieser Benutzer über das Durchsuchungsrecht für das Verzeichnis verfügt, und no, wenn dies nicht der Fall ist. Eine Abfrage als root liefert keine aussagekräftige Information, weil root die Prüfung umgeht und die Antwort immer yes lautet.

FAQ

Was bedeutet drwxr-xr-x unter Linux?

Es handelt sich um ein Verzeichnis, erkennbar am führenden d, mit dem Modus 755. Die Besitzertrias ist rwx. Der Besitzer hat daher alle Berechtigungen für das Verzeichnis. Die Gruppentrias ist r-x und die Trias für andere Benutzer ist r-x. Alle anderen können somit die enthaltenen Namen auflisten und das Verzeichnis durchqueren. Nur der Besitzer kann Einträge hinzufügen oder entfernen. Mit stat -c '%A %a %U %G %n' <path> können Sie jeden Pfad prüfen. Der Befehl gibt die symbolische und die oktale Darstellung nebeneinander aus.

Warum haben Webdateien den Modus 644 und Webverzeichnisse den Modus 755?

Der Webserver läuft unter einem anderen Konto, unter Ubuntu unter www-data. Er benötigt Leserechte für die bereitgestellten Dateien sowie das Durchquerungsrecht für jedes übergeordnete Verzeichnis. Schreibrechte benötigt er dafür nicht. 644 gibt dem Besitzer Schreibrechte und allen anderen Leserechte. 755 gibt dem Besitzer Schreibrechte und allen anderen das Durchquerungsrecht. Ein Verzeichnis, in das die Anwendung tatsächlich schreiben muss, sollte mit chown an den Benutzer dieser Anwendung übergeben werden. Der Modus sollte dafür nicht für alle Benutzer erweitert werden.

Bedeutet das x-Bit, dass ich ein Verzeichnis ausführen kann?

Nein. Bei einem Verzeichnis bedeutet x das Durchquerungsrecht. Damit darf der Kernel beim Auflösen eines Pfads einen Namen innerhalb des Verzeichnisses auflösen. cd benötigt dieses Recht. Dasselbe gilt für jedes Öffnen einer Datei darunter. Jedes Verzeichnis im Pfad benötigt x. Eine Datei mit dem Modus 644 bleibt daher unerreichbar, wenn einem übergeordneten Verzeichnis x für Sie fehlt. namei -l /path/to/file gibt den Modus jedes Verzeichnisses in der Pfadkette aus. Dadurch sehen Sie, an welcher Stelle die Auflösung endet.

Ist chmod 777 jemals die richtige Lösung?

Auf einem Server fast nie. Der Modus gewährt jedem Konto auf dem System Schreibrechte, einschließlich der Konten, unter denen Dienste laufen. Ein kompromittierter Dienst kann die Datei dadurch ändern. Wenn eine Anwendung nicht in ein Verzeichnis schreiben kann, liegt das eigentliche Problem meist beim Besitzer: sudo chown -R appuser:appuser /srv/app/storage mit dem Modus 755 gibt der Anwendung Schreibrechte. Andere Konten können das Verzeichnis weiterhin lesen, aber nicht darin schreiben. Die bekannte Ausnahme ist /tmp mit dem Modus 1777. Das funktioniert nur, weil das Sticky-Bit verhindert, dass Benutzer die Dateien anderer Benutzer löschen.

Warum gibt ls einen Punkt oder ein Pluszeichen nach den Berechtigungen aus?

Das elfte Zeichen beschreibt Regeln zusätzlich zu den neun Berechtigungsbits. Ein Punkt wie in drwxr-xr-x. bedeutet, dass ein SELinux-Sicherheitskontext zugewiesen ist. Das ist unter Fedora und Rocky normal. Ein Pluszeichen wie in drwxr-xr-x+ bedeutet, dass eine POSIX-ACL (Access Control List) gesetzt ist. Dadurch besitzt ein Benutzer oder eine Gruppe Berechtigungen, die in den drei Trias nicht angezeigt werden. Führen Sie getfacl <path> aus, um diese zusätzlichen Einträge aufzulisten.

War dieser Artikel hilfreich?

#permissions#ls#chmod#linux-basics#octal