Puis-je remplacer mon umask en utilisant des ACL pour rendre tous les fichiers créés dans un répertoire donné lisible?

11

Supposons que mon umask soit 0077.

J'ai un répertoire,, fooque je souhaite que des autorisations spéciales lui soient appliquées. Tous les fichiers que je crée foodoivent être lisibles par tous et tous les répertoires doivent être lisibles et exécutables par tous.

Actuellement, si je crée un fichier, ce sera 0600, et un répertoire sera 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

Je veux que le fichier soit 0644 et le répertoire 0755, quel que soit mon 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

Comment puis-je atteindre cet objectif?

stickmangumby
la source
Vous n'avez pas essayé de googler "umask par répertoire", n'est-ce pas? Si j'avais les autorisations, je vous voterais pour cela, car le troisième coup est un hack bash pour faire exactement ce que vous voulez (accordé, seulement pour VOUS, pas pour les autres utilisateurs.)
Brett Dikeman
3
@BeeDee J'ai vu ça. Je suis intéressant à d'autres égards pour le faire, j'espère utiliser des ACL. Je préfère ne pas vérifier / changer mon umask sur chaque cd, ou remplacer les fonctions bash.
stickmangumby

Réponses:

14

Oui, les acl peuvent le faire.

  1. Assurez-vous que votre système de fichiers est monté avec acl. Pour vérifier cela, tapez mount. Vous devriez voir «acl» répertorié parmi d'autres autorisations, par exemple:

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

    S'il n'est pas monté avec acl, ouvrez / etc / fstab et ajoutez 'acl' à la liste des options:

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

    Maintenant, remontez le système de fichiers en cours d'exécution avec les nouvelles options:

    mount -v -o remount /
    
  2. Installez les utilitaires acl. Sur ubuntu / debian, c'est:

    sudo apt-get install acl
    
  3. Vos nouveaux amis sont setfaclet getfacl. Utilisez setfaclpour modifier l'acl par défaut pour un répertoire:

    setfacl -d -m o:r foo
    

    -ddéfinit la valeur par défaut, -mmodifie acl et o:raccorde à "other" le droit de lire. La définition de la valeur par défaut sur un répertoire est à peu près équivalente à la définition de setgid sur un répertoire, mais au lieu de fichiers nouvellement créés héritant du groupe, ils héritent de l'acl. Ensemble, setgid et acl peuvent être puissants, car vous pouvez accorder des autorisations par défaut à un groupe et obtenir que les fichiers nouvellement créés appartiennent à ce groupe, pour un umask efficace par répertoire basé sur le groupe.

  4. Vérifiez votre travail: ls -ldevrait maintenant afficher un "+" supplémentaire indiquant la présence de acl en plus des autorisations de fichier standard.

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

    Vous pouvez obtenir des informations détaillées sur l'ACL en utilisant getfacl.

    % getfacl foo
    # file: foo
    # owner: you
    # group: you
    user::rwx
    group::r--
    other::r--
    default:user::rwx
    default:group::---
    default:other::r--
    
user67641
la source
1
Cela ne semble pas fonctionner pour moi. setfaclet getfaclretournent la sortie attendue, mais seuls les répertoires (pas les fichiers) dans le répertoire parent héritent de l'acl, et même alors, mon umask a priorité sur la valeur par défaut (s'ils ne sont pas lisibles par le monde, le default:other::r--ne laisse pas un autre utilisateur y accéder). Ai-je raté quelque chose d'évident?
stickmangumby
Une chose que j'ai trouvée (c'est peut-être le problème): la facl semble utiliser le premier (utilisateur, groupe, autre) auquel l'utilisateur actuel correspond. Autrement dit, si vous appartenez au groupe pour le fichier, l'ACL pour le groupe sera traité, pas l'ACL pour l'autre. L'acl devrait toujours être hérité si vous avez appliqué le répertoire avec -d, cependant ...
user67641
Hm, j'ai juste réessayé et tout a bien fonctionné. Désolé, je ne sais pas ce que j'ai fait de mal la première fois! Merci :)
stickmangumby
2

Vous pouvez également forcer un umask pour le répertoire en définissant la propriété ACL du masque comme ceci:

setfacl -d -m mask:07 .
Saustrup
la source
-4

Installez simplement OnDir et configurez-le correctement selon vos besoins. J'ai répondu à un problème similaire situé ici .

bintut
la source
La question ne mentionne rien sur la traversée des répertoires avec un terminal, à quoi sert OnDir.
Yarin