Kann ich meine Umask mithilfe von ACLs überschreiben, um alle in einer bestimmten Verzeichniswelt erstellten Dateien lesbar zu machen?

11

Angenommen, meine Umask ist 0077.

Ich habe ein Verzeichnis, fooauf das spezielle Berechtigungen angewendet werden sollen. Alle Dateien, in denen ich erstelle, foosollten weltweit lesbar sein, und alle Verzeichnisse sollten weltweit lesbar und ausführbar sein.

Wenn ich eine Datei erstelle, ist sie derzeit 0600 und ein Verzeichnis 0700:

$ cd foo/
$ touch file
$ mkdir directory
$ ls -l
drwx------ 2 nfm nfm 4096 2012-01-12 16:16 directory
-rw------- 1 nfm nfm    0 2012-01-12 16:15 file

Ich möchte, dass die Datei 0644 und das Verzeichnis 0755 ist, unabhängig von meiner Umask:

drwxr-xr-x 2 nfm nfm 4096 2012-01-12 16:16 directory
-rw-r--r-- 1 nfm nfm    0 2012-01-12 16:15 file

Wie kann ich das erreichen?

stickmangumby
quelle
Sie haben nicht versucht, "umask per directory" zu googeln, oder? Wenn ich die Berechtigungen hätte, würde ich Sie dafür ablehnen, denn der dritte Treffer ist ein Bash-Hack, um genau das zu tun, was Sie wollen (gewährt, nur für SIE, nicht für andere Benutzer.)
Brett Dikeman
3
@BeeDee Das habe ich gesehen. Ich bin auf andere Weise interessant, hoffentlich mit ACLs. Ich möchte meine Umask lieber nicht auf jeder CD überprüfen / ändern oder Bash-Funktionen überschreiben.
Stickmangumby

Antworten:

14

Ja, Acls können das.

  1. Stellen Sie sicher, dass Ihr Dateisystem mit acl gemountet ist. Um dies zu überprüfen, geben Sie ein mount. Sie sollten sehen, dass 'acl' unter anderen Berechtigungen aufgeführt ist, z.

    /dev/sda1 on / type ext4 (rw,errors=remount-ro,acl)
    

    Wenn es nicht mit acl gemountet ist, öffnen Sie / etc / fstab und fügen Sie 'acl' zur Liste der Optionen hinzu:

    # /etc/fstab: static file system information.
    #
    # <file system> <mount point>   <type>   <options>       <dump>  <pass>
    /dev/sda1       /          ext3     noatime,errors=remount-ro,acl 0       1
    

    Mounten Sie nun das laufende Dateisystem mit den neuen Optionen erneut:

    mount -v -o remount /
    
  2. Installieren Sie die acl-Dienstprogramme. Auf Ubuntu / Debian ist dies:

    sudo apt-get install acl
    
  3. Deine neuen Freunde sind setfaclund getfacl. Verwenden Sie setfacldiese Option, um die Standard-ACL für ein Verzeichnis zu ändern:

    setfacl -d -m o:r foo
    

    -d-mSetzt die Standardeinstellung, ändert acl und o:rgewährt "anderen" das Recht zum Lesen. Das Festlegen der Standardeinstellung für ein Verzeichnis entspricht in etwa dem Festlegen von setgid für ein Verzeichnis. Statt neu erstellter Dateien, die die Gruppe erben, erben sie jedoch die ACL. Setgid und acl können zusammen leistungsstark sein, da Sie einer Gruppe Standardberechtigungen erteilen und neu erstellte Dateien für diese Gruppe erhalten können, um eine effektive gruppenbasierte Umask pro Verzeichnis zu erhalten.

  4. Überprüfen Sie Ihre Arbeit: ls -lsollte jetzt ein zusätzliches "+" anzeigen, das das Vorhandensein von acl zusätzlich zu den Standarddateiberechtigungen anzeigt.

    % ls -la foo/
    drwxr--r--+
    

    Sie können detaillierte Informationen über die ACL mit erhalten getfacl.

    % getfacl foo
    # file: foo
    # owner: you
    # group: you
    user::rwx
    group::r--
    other::r--
    default:user::rwx
    default:group::---
    default:other::r--
    
user67641
quelle
1
Das scheint bei mir nicht zu funktionieren. setfaclund geben getfacldie erwartete Ausgabe zurück, aber nur Verzeichnisse (keine Dateien) im übergeordneten Verzeichnis erben die ACL, und selbst dann hat meine Umask Vorrang vor der Standardeinstellung (wenn sie nicht weltweit lesbar sind, default:other::r--lässt sie keinen anderen Benutzer zu Zugriff darauf). Habe ich etwas Offensichtliches verpasst?
Stickmangumby
Eine Sache, die ich gefunden habe (vielleicht ist dies das Problem): Die Facl scheint die erste zu verwenden (Benutzer, Gruppe, andere), mit der der aktuelle Benutzer übereinstimmt. Das heißt, wenn Sie zur Gruppe für die Datei gehören, wird die ACL für die Gruppe verarbeitet, nicht die ACL für andere. Die ACL sollte dennoch vererbt werden, wenn Sie das Verzeichnis mit -d angewendet haben ....
user67641
Hm, habe es einfach nochmal versucht und alles hat gut funktioniert. Entschuldigung, ich bin mir nicht sicher, was ich beim ersten Mal falsch gemacht habe! Danke :)
Stickmangumby
2

Sie können auch eine Umask für das Verzeichnis erzwingen, indem Sie die mask-ACL-Eigenschaft wie folgt festlegen:

setfacl -d -m mask:07 .
Saustrup
quelle
-4

Installieren Sie einfach OnDir und konfigurieren Sie es entsprechend Ihren Anforderungen. Ich habe ein ähnliches Problem hier beantwortet .

bintut
quelle
Die Frage erwähnt nichts über das Durchlaufen von Verzeichnissen mit einem Terminal, wofür OnDir gedacht ist.
Yarin