Warum wird mir die Berechtigung für ein Verzeichnis verweigert, für das die ACL für den Eigentümer des Verzeichnisses festgelegt ist (nachdem alle Standard-POSIX-Berechtigungen entfernt wurden)?

Warum wird mir die Berechtigung für ein Verzeichnis verweigert, für das die ACL für den Eigentümer des Verzeichnisses festgelegt ist (nachdem alle Standard-POSIX-Berechtigungen entfernt wurden)?

Ich versuche, den Befehl in einem Verzeichnis auszuführen ls, das über ACL-Berechtigungen für den Eigentümer und die Gruppe des Verzeichnisses verfügt (ohne dass Standard-POSIX-Berechtigungen festgelegt sind). Dies führt zu einer verweigerten Berechtigung, obwohl getfaclangegeben wird, dass der Benutzer dazu in der Lage sein sollte.

Folgendes mache ich:

  1. Erstellen Sie ein Verzeichnis und eine Datei darin.

mkdir /tmp/mydir && touch /tmp/mydir/myfile

  1. lsÜberprüfen Sie, ob ich in diesem Verzeichnis ausführen kann .
jgazula@gazula:/tmp$ ls -al /tmp/mydir/
total 896
drwxrwxr-x  2 jgazula jgazula   4096 Nov  1 11:57 .
drwxrwxrwt 25 root    root    909312 Nov  1 11:57 ..
-rw-rw-r--  1 jgazula jgazula      0 Nov  1 11:57 myfile
  1. Entfernen wir nun alle Standard-POSIX-Berechtigungen für dieses Verzeichnis.

chmod 000 /tmp/mydir

  1. Überprüfen Sie die Berechtigungen.
jgazula@gazula:/tmp$ ls -al /tmp | grep mydir
d---------  2 jgazula jgazula   4096 Nov  1 11:57 mydir
  1. Dazu sollten wir lsjetzt nicht in der Lage sein.
jgazula@gazula:/tmp$ ls -al /tmp/mydir/
ls: cannot open directory '/tmp/mydir/': Permission denied
  1. Legen Sie die ACL-Berechtigungen für den jgazulaBenutzer und die Gruppe fest.

sudo setfacl --mask -Rm u:jgazula:rwx,g:jgazula:rwx /tmp/mydir/

  1. Überprüfen Sie die ACL-Berechtigungen.
jgazula@gazula:/tmp$ getfacl -ep /tmp/mydir/
# file: /tmp/mydir/
# owner: jgazula
# group: jgazula
user::---
user:jgazula:rwx        #effective:rwx
group::---          #effective:---
group:jgazula:rwx       #effective:rwx
mask::rwx
other::---
  1. Da die ACL-Berechtigungen (einschließlich der effektiven Berechtigungen) gut aussehen, sollte ich in der Lage sein, lsdas Verzeichnis auszuführen?
jgazula@gazula:/tmp$ ls -al /tmp/mydir/
ls: cannot open directory '/tmp/mydir/': Permission denied

Aber ich kann nicht und ich verstehe nicht, warum.

  1. Interessanterweise wurden die Gruppenberechtigungsbits gesetzt, als ich die Standard-POSIX-Berechtigungen überprüfte. Ich bin mir nicht sicher, warum nur die Gruppenberechtigungen aktualisiert wurden.
jgazula@gazula:/tmp$ ls -al /tmp | grep mydir
d---rwx---+  2 jgazula jgazula   4096 Nov  1 12:13 mydir
  1. Lassen Sie uns die ACL-Berechtigungen für den Besitzer und die Gruppe festlegen (d. h. den Besitzer/die Gruppe aus dem Befehl weglassen).

sudo setfacl --mask -Rm u::rwx,g::rwx /tmp/mydir/

  1. Überprüfen Sie die ACL-Berechtigungen erneut.
jgazula@gazula:/tmp$ getfacl -ep /tmp/mydir/
# file: /tmp/mydir/
# owner: jgazula
# group: jgazula
user::rwx
user:jgazula:rwx        #effective:rwx
group::rwx          #effective:rwx
group:jgazula:rwx       #effective:rwx
mask::rwx
other::---
  1. Überprüfen Sie, ob ich jetzt ausführen kann ls.
jgazula@gazula:/tmp$ ls -al /tmp/mydir/
total 896
drwxrwx---+  2 jgazula jgazula   4096 Nov  1 11:57 .
drwxrwxrwt  25 root    root    909312 Nov  1 11:57 ..
-rwxrwxr--+  1 jgazula jgazula      0 Nov  1 11:57 myfile

Warum funktioniert Schritt 6 nicht von alleine? Ich lege die ACL-Berechtigungen explizit für einen Benutzer und eine Gruppe fest. Warum muss ich Schritt 11 ausführen?

Antwort1

Wenn Sie ausführen sudo setfacl --mask -Rm u:jgazula:rwx,g:jgazula:rwx /tmp/mydir/, erstellen Sie einen ACL_USEREintrag für den Benutzer jgazula. Der Eintrag ACL_USER_OBJfür den Eigentümer der Datei ist jedoch immer noch ---. (Sie können dies in der getfaclAusgabe in Schritt 7 sehen.)

Laut lautet man ACLder Algorithmus zur Zugriffsprüfung:

1.   If the effective user ID of the process matches the user ID of the file object owner, then
           if the ACL_USER_OBJ entry contains the requested permissions, access is granted,
           else access is denied.

2.   else if the effective user ID of the process matches the qualifier of any entry of type ACL_USER, then
           if the matching ACL_USER entry and the ACL_MASK entry contain the requested permissions, access is granted,
           else access is denied.

Der ACL_USEREintrag wird also nicht einmal überprüft.

Im Wesentlichen gibt es die gleiche Frage zu Serverfault:ACL: Erteilen von - - - Berechtigungen für den Besitzer der Datei. (Aber es sieht so aus, als wäre die Antwort dort ACL_USERumgekehrt ACL_USER_OBJ.)

verwandte Informationen