Par exemple, je veux donner à mes collègues un accès en écriture à certains répertoires. Supposons que les sous-répertoires contiennent des droits d'accès 775, les fichiers 664, ainsi que des fichiers exécutables dans le répertoire - 775.
Maintenant, je veux ajouter des autorisations d'écriture. Avec chmod, je pourrais essayer quelque chose comme
chmod o+w -R mydir/
Mais ce n'est pas cool, car je ne veux pas rendre le répertoire accessible en écriture - je veux donner accès uniquement à certains utilisateurs, donc je veux utiliser ACL. Mais existe-t-il un moyen simple de définir ces autorisations? Selon moi, je dois aborder au moins trois cas (répertoires, fichiers, fichiers exécutables) séparément:
find -type d -exec setfacl -m u:colleague:rwx {} \;
find -type f -executable -exec setfacl -m u:colleague:rwx {} \;
find -type f \! -executable -exec setfacl -m u:colleague:rw {} \;
Il semble que beaucoup de lignes de code pour une tâche aussi simple. Y a-t-il une meilleure façon?
la source
-X
ne fonctionne pas comme prévu dans inclus danssetfacl 2.2.49
.Comme mentionné par umläute, la commande
setfacl -R
avec "X" majuscule est le chemin à parcourir, comme:Cependant, pour ceux qui ont besoin de réappliquer ACL de manière récurrente (c'est-à-dire comme " réappliquer les autorisations sur les sous-répertoires" à la Windows).
Cette commande pourrait être divisée pour éviter des erreurs comme
setfacl: foobar: Only directories can have default ACLs
.Notez que la syntaxe
<( something )
est Process Substitution , qui est spécifique à bash. Vous devrez peut-être créer un fichier temporaire si vous utilisez un autre shell.la source
la source
for i in $(find …)
.find /data -mindepth 0 -type d -exec setfacl -m u:zabbix:r-X {} \;
$(find /data -mindepth 0 -type d)
ne retournera pas les résultats ligne par ligne, il mettra en tampon l'ensemble des résultats. S'il y a un espace dans une ligne, vous obtiendrez un enregistrement incorrect dans la$i
variable.