Ein Zugriffsverweigerung unter Linux stammt nicht immer von einem chmod, das vergessen wurde. Der fehlgeschlagene Befehl kann mit einer anderen UID ausgeführt werden oder sein Konto gehört nicht zur erwarteten Gruppe. Bevor Sie einen Besitzer ändern, sollten Sie zuerst das tatsächlich verwendete Konto identifizieren.
Der Befehl id zeigt die UID, die Hauptgruppe und die sekundären Gruppen des aktuellen Prozesses an. Dies ist der Ausgangspunkt, wenn ein Skript, ein Dienst oder eine SSH-Sitzung nicht dieselbe Datei sieht wie Sie.

Lesen der UID, GID und Gruppen mit id
Führen Sie id ohne Argumente in der problematischen Sitzung aus:
id
Eine Ausgabe wie uid=1000(alex) gid=1000(alex) groups=1000(alex),27(sudo),999(docker) beschreibt die Identität des Prozesses. uid ist die Benutzerkennung. gid ist die Hauptgruppe. groups fügt die sekundären Gruppen hinzu, oft diejenigen, die einen Zugang zu Docker, zu Protokollen oder zu einem Share ermöglichen.
Um nur einen Wert abzurufen, verwenden Sie die folgenden Optionen:
id -uzeigt die effektive UID an.id -gzeigt die effektive GID an.id -Gnlistet die Namen der Gruppen auf.id -unzeigt den Namen des effektiven Kontos an.
Der Unterschied zwischen realer und effektiver Identität wird besonders nach sudo, in einer SUID-Binärdatei oder bei bestimmten Werkzeugen, die den Benutzer wechseln, sichtbar. Für eine schnelle Überprüfung nur des Namens, lesen Sie auch unseren Artikel über whoami und das effektive Benutzerkonto.
Ein Konto ohne Anmeldung überprüfen
Fügen Sie den Kontonamen hinzu, um dessen lokale Akte abzufragen. Dieser Befehl liest die Benutzerdatenbank und meldet Sie nicht unter diesem Konto an:
id www-data
id -Gn www-data
Unter Debian und Ubuntu ist www-data oft das Konto für Webdienste. In einer anderen Distribution kann der Dienst apache, nginx oder ein anwendungsspezifisches Konto verwenden. Überprüfen Sie die Einheitendatei oder die Dienstkonfiguration, anstatt dieses Beispiel 그대로 zu übernehmen.
Nachdem Sie einen Benutzer zu einer Gruppe hinzugefügt haben, kann eine bereits geöffnete Sitzung ihre alte Gruppenzugehörigkeit beibehalten. Melden Sie sich ab und wieder an, bevor Sie zu dem Schluss kommen, dass die Änderung fehlgeschlagen ist. Der Befehl id benutzer liest die Datenbank, aber id allein beschreibt immer noch Ihren aktuellen Prozess.
Identität des Kontos und Dateirechte vergleichen
Es reicht nicht aus, die Gruppen zu kennen. Sie müssen auch den Eigentümer, die Gruppe und die Berechtigungen des betreffenden Pfads lesen:
id
stat -c '%U %G %A %n' /pfad/zur/datei
namei -l /pfad/zur/datei
stat zeigt an, wessen Datei es ist. namei -l zeigt auch die Rechte jedes Verzeichnisses des Pfades an. Eine lesbare Datei nützt nichts, wenn das Konto nicht in der Lage ist, das übergeordnete Verzeichnis zu durchqueren, was das Recht x auf diesem Verzeichnis erfordert.
Beheben Sie eine Verweigerung nicht mit chmod 777. Vergleichen Sie zuerst die Gruppe der Datei mit id -Gn, und passen Sie dann den Eigentümer, die Gruppe oder die erforderlichen Berechtigungen an. Um die Gruppen und deren Nutzung zu überprüfen, lesen Sie die Gruppenverwaltung unter Linux. Wenn Sie die Berechtigungen ändern müssen, erklärt unser Leitfaden über chmod rekursiv, warum ein zu großer Befehl viel mehr Dateien berühren kann als erwartet.
Testen Sie unter dem betroffenen Konto, bevor Sie sudo ändern
Wenn Sie Verwaltungsrechte haben, führen Sie die Prüfung nur unter dem Konto aus, das das Problem hat:
sudo -u www-data id
sudo -u www-data test -r /pfad/zur/datei && echo lesbar
sudo -u www-data test -x /pfad/zur/verzeichnis && echo durchquerbar
Der erste Aufruf bestätigt die effektive Identität. Die beiden folgenden antworten auf eine spezifische Frage, ob die Datei lesbar oder das Verzeichnis durchquert werden kann. Ersetzen Sie www-data und die Pfade vor der Ausführung. Verwenden Sie sudo -u nicht, um eine Produktionsanwendung nur zum Testen ihrer Rechte zu starten.
Wenn der Zugriff weiterhin verweigert wird, während UID, Gruppe und Unix-Berechtigungen korrekt zu sein scheinen, überprüfen Sie auch die ACL mit getfacl, Netzwerkmounts und SELinux oder AppArmor, je nachdem, welche Distribution Sie verwenden. Diese Mechanismen können eine Regel über die üblichen Rechte hinzufügen.
Mit id, stat und einem Test unter dem richtigen Konto wissen Sie, wo Sie suchen müssen, bevor Sie die Berechtigungen blind ändern.