GNU/Linux >> Tutoriels Linux >  >> Linux

Définition d'ACL différentes sur les répertoires et les fichiers

Comme le souligne Gilles, setfacl les autorisations par défaut spécifient les autorisations maximales, remplaçant essentiellement le umask . Ainsi, les fichiers nouvellement créés seront rw sauf si l'application qui a créé le fichier a spécialement demandé qu'il soit exécutable.

$ mkdir test
$ touch test/oldfile
$ getfacl test/oldfile
# file: test/oldfile
# owner: myuser
# group: myuser
user::rw-
group::r--
other::r--

$ setfacl -m d:g:mygroup:rwx test
$ touch test/newfile
$ getfacl test/newfile
# file: test/newfile
# owner: myuser
# group: myuser
user::rw-
group::r-x                         #effective:r--
group:mygroup:rwx                  #effective:rw-
mask::rw-
other::r--

Notez les permanentes efficaces ci-dessus. (Il n'y a que quelques programmes qui demanderont de définir le bit d'exécution sur les fichiers qu'il crée, par exemple gcc pour les exécutables et cp si le fichier copié était exécutable.)

Ou vouliez-vous dire que la première commande setfacl fonctionnait comme vous le souhaitiez, mais pas la seconde ? En d'autres termes, vous cherchez à corriger les autorisations sur les anciens fichiers, en vous assurant que les répertoires sont traversables, sans donner d'autres autorisations d'exécution aux fichiers normaux ?

Ma version de setfacl autorise X exactement comme vous le souhaitez, par exemple :

setfacl g:mygroup:rwX

$ setfacl --version
setfacl 2.2.49
$ rm -r test
$ mkdir test
$ mkdir test/olddir
$ touch test/oldfile
$ find test -ls
107513    4 drwxr-xr-x   3 myuser    myuser        4096 Dec 22 01:56 test
107539    0 -rw-r--r--   1 myuser    myuser           0 Dec 22 01:56 test/oldfile
107529    4 drwxr-xr-x   2 myuser    myuser        4096 Dec 22 01:56 test/olddir
$ setfacl -Rm g:somegroup:rwx test
$ find test -ls
107513    4 drwxrwxr-x   3 myuser    myuser        4096 Dec 22 01:56 test
107539    0 -rw-rwxr--   1 myuser    myuser           0 Dec 22 01:56 test/oldfile
107529    4 drwxrwxr-x   2 myuser    myuser        4096 Dec 22 01:56 test/olddir
$ rm -r test
$ mkdir test
$ mkdir test/olddir
$ touch test/oldfile
$ setfacl -Rm g:somegroup:rwX test
$ find test -ls
107513    4 drwxrwxr-x   3 myuser    myuser        4096 Dec 22 01:56 test
107539    0 -rw-rw-r--   1 myuser    myuser           0 Dec 22 01:56 test/oldfile
107529    4 drwxrwxr-x   2 myuser    myuser        4096 Dec 22 01:56 test/olddir

Si votre version de setfacl ne supporte pas cela, pourquoi ne pas utiliser find ?

écraser les autorisations, en les définissant sur rw pour les fichiers et rwx pour les répertoires

$ find . \( -type f -exec setfacl -m g:mygroup:rw '{}' ';' \) \
      -o \( -type d -exec setfacl -m g:mygroup:rwx '{}' ';' \)

définir les autorisations mygroup ACL en fonction des autorisations de groupe existantes

$ find . \( -perm -g+x -exec setfacl -m g:mygroup:rw '{}' ';' \) \
      -o \( -exec setfacl -m g:mygroup:rwx '{}' ';' \)

Vous voudrez probablement vérifier que le masque de groupe fournit des autorisations effectives. Sinon, vous devrez également exécuter ceci :

$ find . -type d -exec chmod g+rwX '{}' ';'

Pour les futurs lecteurs, utiliser setfacl sur les fichiers/dossiers existants sans ajouter le bit exécutable à vos fichiers, la solution est cette partie de la réponse de @Mikel :

Ma version de setfacl autorise X exactement comme vous le souhaitez, par exemple :

setfacl g:mygroup:rwX

Extrait pertinent du setfacl documents :

Le champ perms est une combinaison de caractères qui indique les autorisations :lire (r), écrire (w), exécuter (x), exécuter uniquement si le fichier est un répertoire ou a déjà une autorisation d'exécution pour un utilisateur (X) .


Pour autant que je comprenne les ACL Linux, setfacl -Rdm g:mygroup:rwx share_name fait exactement ce que vous voulez. Test :

umask 007
mkdir foo
chgrp mygroup foo
chmod 2700 foo
setfacl -d -m group:mygroup:rwx foo
setfacl -m group:mygroup:rwx foo
touch foo/data
echo '#!/bin/ls' >foo/exec
chmod +x foo/exec

Puis en tant qu'utilisateur différent dans le groupe mygroup :

$ cat foo/*
#!/bin/ls
#!/bin/ls
$ ./foo/data
ash: ./foo/data: Permission denied
$ ./foo/exec
./foo/exec

Que se passe-t-il ?

$ getfacl foo/data
# file: foo/data
# owner: myuser
# group: mygroup
user::rw-
group::---
group:mygroup:rwx                 #effective:rw-
mask::rw-
other::---

L'ACL effective pour mygroup est le résultat de and'ing le ACL_GROUP entrée pour mygroup (rwx ) avec l'entrée ACL_MASK (rw- ).

La page de manuel acl(5) explique ce calcul sous « Algorithmes de contrôle d'accès ». Il n'explique pas comment ACL_MASK des entrées sont générées, mais en pratique, la bonne chose semble se produire.


Linux
  1. Un moyen facile de masquer des fichiers et des répertoires sous Linux

  2. Trouver des fichiers et des répertoires sous Linux comme un pro

  3. Comment archiver des fichiers et des répertoires sous Linux [Partie 2]

  4. Trouvez les fichiers et répertoires les plus volumineux sous Linux

  5. Linux Supprimer des fichiers et des répertoires

Comment utiliser la commande cp pour copier des fichiers et des répertoires

Comment synchroniser des fichiers et des répertoires à l'aide de Zaloha.sh

3 façons de trouver des fichiers et des répertoires sous Linux

Compresser et archiver des fichiers et des répertoires

Trouvez facilement des fichiers et des répertoires sur Linux

Fichiers et répertoires par défaut dans cPanel