web-dev-qa-db-fra.com

Définition des autorisations par défaut pour les fichiers et sous-répertoires nouvellement créés dans un répertoire sous Linux?

J'ai un tas de scripts et d'applications à exécution longue qui stockent les résultats de sortie dans un répertoire partagé par quelques utilisateurs. Je voudrais un moyen de m'assurer que tous les fichiers et répertoires créés sous ce répertoire partagé ont automatiquement u=rwxg=rwxo=r autorisations.

Je sais que je pourrais utiliser umask 006 à la tête de mes divers scripts, mais je n’aime pas cette approche car beaucoup d’utilisateurs écrivent leurs propres scripts et peuvent oublier de définir eux-mêmes l’umask.

Je veux vraiment juste que le système de fichiers définisse les fichiers et les répertoires nouvellement créés avec une certaine permission s'il se trouve dans un certain dossier. Est-ce possible?

Mise à jour : I pense cela peut être fait avec POSIX ACLs , à l'aide de la liste de contrôle d'accès par défaut fonctionnalité, mais tout est un peu au dessus de ma tête pour le moment. Si quelqu'un peut expliquer comment utiliser les ACL par défaut, il répondra probablement bien à cette question.

96
David Dean

Pour obtenir le droit de propriété, vous pouvez définir le bit setuid de groupe sur le répertoire avec

chmod g+rwxs dirname

Cela garantira que les fichiers créés dans le répertoire appartiennent au groupe. Vous devez ensuite vous assurer que tout le monde fonctionne avec umask 002 ou 007 ou quelque chose de ce genre - c'est pourquoi Debian et de nombreux autres systèmes Linux sont configurés avec des groupes par utilisateur par défaut.

Je ne connais pas de moyen de forcer les autorisations que vous souhaitez si l'umask de l'utilisateur est trop fort.

73
Norman Ramsey

Voici comment procéder à l'aide des listes de contrôle d'accès par défaut, du moins sous Linux.

Tout d'abord, vous peut-être devez activer le support ACL sur votre système de fichiers. Si vous utilisez ext4, il est déjà activé. Les autres systèmes de fichiers (par exemple, ext3) doivent être montés avec l'option acl. Dans ce cas, ajoutez l'option à votre /etc/fstab. Par exemple, si le répertoire se trouve sur votre système de fichiers racine:

/dev/mapper/qz-root   /    ext3    errors=remount-ro,acl   0  1

Puis remontez le:

mount -oremount /

Maintenant, utilisez la commande suivante pour définir la liste de contrôle d'accès par défaut:

setfacl -dm u::rwx,g::rwx,o::r /shared/directory

Tous les nouveaux fichiers dans /shared/directory devrait maintenant obtenir les autorisations souhaitées. Bien entendu, cela dépend aussi de l'application qui crée le fichier. Par exemple, la plupart des fichiers ne seront exécutables par personne du début (en fonction de l'argument mode de l'appel open (2) ou creat (2)), comme avec umask. Certains utilitaires tels que cp, tar et rsync essaieront de préserver les autorisations du ou des fichiers source, ce qui masquera votre liste de contrôle d'accès par défaut si le fichier source ne l'était pas. groupe inscriptible.

J'espère que cela t'aides!

57
pelle

dans votre script shell (ou .bashrc) vous pouvez utiliser quelque chose comme:

umask 022

umask est une commande qui détermine les paramètres d'un masque qui contrôle la manière dont les autorisations de fichiers sont définies pour les fichiers nouvellement créés.

4
user3270784

C'est moche, mais vous pouvez utiliser la commande setfacl pour obtenir exactement ce que vous voulez.

Sur un ordinateur Solaris, j’ai un fichier contenant les fichiers acls pour les utilisateurs et les groupes. Malheureusement, vous devez répertorier tous les utilisateurs (au moins, je ne pouvais pas trouver un moyen de faire fonctionner ce travail autrement):

user::rwx
user:user_a:rwx
user:user_b:rwx
...
group::rwx
mask:rwx
other:r-x
default:user:user_a:rwx
default:user:user_b:rwx
....
default:group::rwx
default:user::rwx
default:mask:rwx
default:other:r-x

Nommez le fichier acl.lst et entrez vos noms d'utilisateur réels au lieu de user_X.

Vous pouvez maintenant définir ces acls sur votre répertoire en lançant la commande suivante:

setfacl -f acl.lst /your/dir/here
4
innaM