facl ignoriert die Berechtigung "x", jedoch nur für Dateien

7

Wenn ich setfacl verwende, um zu verwalten, welche Berechtigungen die untergeordneten Dateien / Verzeichnisse haben sollen, haben die Dateien aus irgendeinem Grund alle Berechtigungen außer der Ausführung ("x").

someuser@someuser-MS-7816:/opt/lampp/htdocs/project$ getfacl .
# file: .
# owner: someuser
# group: webs
# flags: -s-
user::rwx
group::rwx
other::rwx
default:user::rwx
default:group::rwx
default:other::rwx

someuser@someuser-MS-7816:/opt/lampp/htdocs/project$ touch file
someuser@someuser-MS-7816:/opt/lampp/htdocs/project$ mkdir dir
someuser@someuser-MS-7816:/opt/lampp/htdocs/project$ ls -l
total 4
drwxrwsrwx+ 2 someuser webs 4096 paź 31 13:35 dir
-rw-rw-rw-  1 someuser webs    0 paź 31 13:35 file

Ich dachte, es hat etwas mit umask zu tun, aber wenn ich es auf verschiedene Arten ändere, ergibt sich nie das erwartete Ergebnis, es sei denn, ich vermisse etwas.

Wie kann das behoben werden?

user294034
quelle

Antworten:

8

Die Antwort von Hauke ​​Laging versucht zu sagen:

Jedes Programm, das eine Datei oder ein Verzeichnis erstellt, gibt den Modus (die Berechtigungen) an, über den diese Datei verfügen soll. Dies ist im C-Programm (oder in der verwendeten Sprache) fast immer fest codiert und für den Benutzer kaum direkt zugänglich. Dann können der umaskWert und die Standard-ACL Berechtigungsbits deaktivieren, aber nicht hinzufügen.

Ihr Problem ist, dass fast alle Programme, die Dateien erstellen, 666 ( ) angeben , obwohl mkdirsie einen Modus von 777 ( rwxrwxrwx) angeben rw-rw-rw-. Dies umfasst touch, die Schale (für E / A - Umleitung, zB ), die Herausgeber ( , , , etc ...), , , und so weiter. Daher erhalten Sie nicht sofort nach der Erstellung (mit einem dieser Programme) Berechtigungen für eine einfache Datei, unabhängig davon, was Sie mit ACLs tun. Sie müssen die Datei erstellen und dann .program > filevivimemacsddsplitrwxrwxrwxchmod

Es gibt einige Ausnahmen von dieser Regel:

  • cpund zugehörige Programme (zB cpio, tarusw.) , das das Kopieren oder neu erstellen eine Datei, die wird (Versuch) , um die neue Datei auf den gleichen Modus wie die Originaldatei gesetzt.
  • Compiler, die binäre ausführbare Dateien erstellen, geben einen Modus von 777 an (zumindest wenn die Kompilierung erfolgreich ist), damit der Benutzer das gerade kompilierte Programm tatsächlich ausführen kann.
Scott
quelle
Ich nehme an, dies gilt nur für die traditionelle Unix Erlaubnis Modi, die die entsprechen user, groupund otherACL - Einträge. Wenn Sie Standard-ACL-Einträge für benannte Benutzer oder Gruppen haben, werden diese wie angegeben vererbt, oder?
Barmar
Ist das ein Zitat von irgendwoher? Wenn ja, fügen Sie bitte die Quelle hinzu und entfernen Sie, falls nicht, die Formatierung des Angebots.
Terdon
@terdon: Es ist kein Zitat; es ist (wie beschrieben) eine Umschreibung der Antwort von Hauke ​​Laging . Wie soll damit umgegangen werden? (1) Ich hätte die andere Antwort bearbeiten können, aber ich weiß, dass massive Umschreibungen der Beiträge anderer Leute verpönt sind. (Und beachten Sie, FWIW, dass mein Vertreter auf dieser Website im Oktober 2014 <2000 war.) (2) Ich hätte es als Kommentar zu der anderen Antwort veröffentlichen können. Oder besser gesagt, ich hätte es als eine Reihe von drei Kommentaren posten können, da es> 1200 Zeichen sind. Dies entspricht jedoch nicht meinem Verständnis des Zwecks von Kommentaren. … (Fortsetzung)
Scott
(Fortsetzung)… Außerdem werden wir wiederholt darauf hingewiesen, dass Kommentare noch kurzlebiger sind als Beiträge. Ich wollte meine Perlen der Weisheit nicht auf Sand streuen, wo sie wegblasen könnten (oder weggeblasen werden könnten, wenn die Antwort von Hauke ​​Laging jemals gelöscht wird). (3) Ich hätte das Blockzitat einfach als schmucklose, freistehende Antwort veröffentlichen können. Aber das hätte sich wie ein Grenzplagiat angefühlt, da ich seine Antwort interpretiert (oder, wenn Sie es vorziehen, in klares Englisch übersetzt) ​​habe, geleitet von meinem (zumindest) ebenso gründlichen Verständnis des Themas. … (Fortsetzung)
Scott
(Fortsetzung)… Ich wollte darauf hinweisen, dass die Worte, obwohl sie mir gehörten, bereits von jemand anderem bereitgestellt wurden (wenn auch „chaotisch“). Im Nachhinein glaube , ich habe ich verknüpft in erster Linie auf die anderen Antwort, und nicht nur sagen , „die andere Antwort“. Mein Fehler. Es dauerte 4¾ Stunden, nachdem die Frage gestellt worden war, und es gab nur eine andere Antwort, daher hielt ich den Verweis für einzigartig und eindeutig. ………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………
Scott
4

Sie erwähnen nicht, was das "erwartete Ergebnis" ist. Ich nehme an, es sind die Dateien, bei denen die xBits gesetzt sind.

Sie können dies nicht erzwingen, da die Standard-ACL (wie umask) Berechtigungen nur verhindert, sie jedoch nicht selbst festlegt. Ein neues Verzeichnis oder eine neue Datei erhält nicht mehr Berechtigungen (für Benutzer, Gruppen und andere) als der Aufruf open()oder mkdir(), der die Anforderungen erstellt.

Für Dateien wird normalerweise nur eine Lese- und Schreibberechtigung angefordert. Wenn ein Compiler jedoch eine Binärdatei erstellt, fordert er auch die Ausführungsberechtigung an.

Hauke ​​Laging
quelle
Ihre Antwort ist aus englischer Sicht ziemlich chaotisch. Können Sie das bitte korrigieren? Ich bin mir auch nicht sicher, was du meinst. Schauen Sie sich meinen Code an. Für Verzeichnisse funktioniert es immer. Für Dateien funktioniert es auch immer außer dem "x" -Bit. Auch wenn dies nicht der richtige Weg ist, was ist dann außer dem Festlegen einer Umask bei jedem Zugriff auf ein Verzeichnis?
user294034
1

$ touch file && chmod a+x file

Die Erklärungen in anderen Antworten sind hervorragend. Ich möchte etwas hinzufügen, das tatsächlich eine Antwort auf die Frage gibt,

Wie kann das behoben werden?

mit spezifischem Code. @ Scott sagte, wie das geht,

Sie müssen die Datei erstellen und dann chmod.

Der Code in meiner Antwort zeigt, wie es geht, und hebt ihn hervor, indem er an erster Stelle steht.


Weitere Erläuterungen

Zu Beginn füge ich der Einfachheit halber einfach den touchBefehl hinzu, der vom OP gegeben touch filewird touch file && chmod a+x file.

someuser@someuser-MS-7816:/opt/lampp/htdocs/project$ touch file && chmod a+x file
someuser@someuser-MS-7816:/opt/lampp/htdocs/project$ mkdir dir
someuser@someuser-MS-7816:/opt/lampp/htdocs/project$ ls -l
total 4
drwxrwsrwx+ 2 someuser webs 4096 paź 31 13:35 dir
-rwxrwxrwx  1 someuser webs    0 paź 31 13:35 file

Hier richte ich dieselbe Situation auf meinem Computer (Cygwin) ein, um zu zeigen, dass sie funktioniert, und mache dann dasselbe auf einer virtuellen Ubuntu-Box, um die Unterschiede im Setup anzuzeigen. (Beachten Sie, dass sich der eigentliche Befehl zum Beheben von Problemen nicht ändert. Ich möchte lediglich einige mögliche Unterschiede setfaclaufzeigen und selbst überprüfen, ob er funktioniert.)

$ uname -a | head -n 1 
CYGWIN_NT-10.0 my_machine 2.10.0(0.325/5/3) 2018-02-02 15:16 x86_64 Cygwin
$ pwd
/home/me
$ mkdir user294034
$ setfacl -m u::rwx user294034/
$ setfacl -m d:u::rwx user294034/
$ setfacl -m g::rwX user294034/
setfacl: illegal acl entries
$ setfacl -m g::rws user294034/
setfacl: illegal acl entries
$ # I guess I don't know how to get the `flags: -s-` on Cygwin
$ setfacl -m g::rwx user294034/
$ setfacl -m d:g::rwx user294034/
$ setfacl -m o::rwx user294034/
$ setfacl -m d:o::rwx user294034/
$ cd user294034
$ getfacl .
# file: .
# owner: me
# group: my_group
user::rwx
group::rwx
other:rwx
default:user::rwx
default:group::rwx
default:other:rwx
$ # I admitted that I don't know how to get `# flags: -s-`
$ umask
0022
$ umask 0000
$ touch file
$ mkdir dir
$ # Here, we'll see the same problem
$ ls -l
total 0
drwxrwxrwx+ 1 me my_group 0 Sep 18 20:31 dir
-rw-rw-rw-  1 me my_group 0 Sep 18 20:31 file
$ # Here, we'll fix the problem
$ rm file
$ touch file && chmod a+x file
$ ls -l
total 0
drwxrwxrwx+ 1 me my_group 0 Sep 18 20:31 dir
-rwxrwxrwx  1 me my_group 0 Sep 18 20:32 file
bballdave025
quelle
0

Sie können versuchen, mit diesem einfachen Skript die ACL-Datensätze für jede Datei und jedes Verzeichnis zu ersetzen und die angegebenen Standardberechtigungen zu erteilen.

$ cd ~
$ mkdir .config
$ cat <<'EOF' >> .config/dacl
user::rwx
group::rwx
other:r-x
default:user::rwx
default:group::rwx
default:other:r-x
EOF
$ cat <<'EOF' >> .config/facl
user::rw-
group::rw-
other:r--
default:user::rw-
default:group::rw-
default:other:r--
EOF

$ cd /
$ find $1 -type d -exec setfacl -f ~/.config/dacl {} \;
$ find $1 -type f -exec setfacl -f ~/.config/facl {} \;

$ getfacl .
# file: .
# owner: MyUser
# group: Administrators
user::rwx
group::rwx
other::r-x
default:user::rwx
default:group::rwx
default:other::r-x
Chetabahana
quelle