2011-03-30 09:02:50 +0000 2011-03-30 09:02:50 +0000
37
37

Comment définir les autorisations de fichiers afin que les nouveaux fichiers héritent des mêmes autorisations ?

J'ai un dossier dans lequel de nouveaux sous-dossiers et fichiers seront créés automatiquement, par un script.

Je veux maintenir les permissions des utilisateurs et des groupes de manière récursive pour tous les nouveaux dossiers et fichiers placés dans le répertoire parent. Je sais que cela implique la mise en place d'un “sticky bit”, mais je n'arrive pas à trouver une commande qui montre exactement ce dont j'ai besoin.

C'est ce que j'ai fait jusqu'à présent :

sudo mkdir -p /path/to/parent
sudo chmod -R 660 myself:somegroup /path/to/parent

Par la suite, je veux que les 660 permissions soient définies récursivement pour tous les dossiers et fichiers placés dans /path/to/parent.

Cependant, tout ce que j'ai essayé jusqu'à présent a échoué. Quelqu'un peut-il m'aider ?

En fait, le drapeau octal 660 n'est probablement même pas correct. Les autorisations que je veux sont :

  1. les répertoires placés sous /path/to/parent sont exécutables par les utilisateurs ayant les permissions
  2. les fichiers sont lisibles/écrivables par l'utilisateur lui-même et les membres de quelque groupe
  3. Les fichiers et dossiers placés sous /path/to/parent ne sont PAS lisibles par le monde

Je tourne sous Ubuntu 10.0.4 LTS.

Quelqu'un peut-il m'aider ?

Réponses (3)

64
64
64
2011-03-30 10:28:30 +0000

Les bits de permission que vous recherchez sont 0770 et 0660.

  • rw- permissions → 110 binaire → 6 octal

La propriété du groupe peut être héritée par les nouveaux fichiers et dossiers créés dans votre dossier /path/to/parent en définissant le bit setgid en utilisant chmod g+s comme ceci :

chmod g+s /path/to/parent

Maintenant, tous les nouveaux fichiers et dossiers créés sous /chemin/vers/parent auront le même groupe attribué que celui défini sur /chemin/vers/parent.


Les permissions des fichiers POSIX ne sont pas héritées ; elles sont données par le processus de création et combinées avec sa valeur umask actuelle.

Cependant, vous pouvez utiliser POSIX ACLs pour y parvenir. Définissez l'ACL default sur un répertoire :

setfacl -d -m u::rwX,g::rwX,o::- /path/to/parent

Cela appliquera setfacl au répertoire /path/to/parent, -mmodifiant les ACL -default - celles qui seront appliquées aux éléments nouvellement créés. (X en majuscules signifie que seuls les répertoires recevront le bit +x)

(Si nécessaire, vous pouvez ajouter un u:someuser:rwX ou g:someuser:rwX - de préférence un groupe - aux ACL.)


Note : sur les anciens systèmes utilisant ext3/ext4, vous aviez l'habitude de devoir monter le système de fichiers avec l'option acl, sinon il ignorait toutes les ACL et interdisait d'en définir de nouvelles.

mount -o remount,acl /

Pour définir cette option de façon permanente, utilisez tune2fs -o acl <device> ou modifiez /etc/fstab.

10
10
10
2011-03-30 12:09:01 +0000

Grawity donne une excellente réponse, mais je pense que la question modifiée a peut-être légèrement changé les choses.

Je suggère de laisser le répertoire appartenant à l'utilisateur/groupe apache. Ce sera probablement apache ou httpd selon votre distribution.

par exemple

chown -R apache:apache /path/to/parent

Vous pouvez alors faire quelque chose comme https://serverfault.com/questions/164078/is-adding-users-to-the-group-www-data-safe-on-debian ou même vous ajouter au groupe apache pour vous assurer que vous avez un accès de groupe au répertoire. (Quelque chose comme usermod -aG apache username)

Je ne voudrais pas chmod -R tout le répertoire parce que vous ne voulez pas que des scripts html ou jpg ou d'autres choses aléatoires soient exécutables. Vous devez modifier les permissions selon vos besoins.

Quelque chose que vous pourriez essayer est :

chmod o+w file

Le “o” signifie “autre” & “w” signifie “écrire”. Vous pouvez aussi avoir “u” pour “utilisateur” et “g” pour “groupe”, ainsi que “r” et “x” qui, nous l'espérons, s'expliquent d'eux-mêmes. Vous pouvez supprimer les autorisations en utilisant “-” plutôt que “+”.

2
2
2
2011-03-30 14:22:39 +0000

Je pense que vous compliquez trop la question. Si le répertoire de premier niveau n'est pas accessible aux autres, alors les autres ne pourront pas créer de fichiers dans l'arborescence. L'accès de groupe en écriture n'est pas nécessaire si seul apache fait l'écriture.

Ces étapes devraient faire ce que vous voulez (remplacer le répertoire dans les commandes par le répertoire que vous voulez utiliser) :

  • ajouter umask 027 au script par défaut d'apache /etc/default/apache. Cela empêchera d'autres personnes d'accéder aux fichiers ou aux répertoires créés par apache.
  • exécutez chown www-data:www-data directory sur le répertoire dans lequel vous voulez qu'apache puisse écrire.
  • exécutez chmod 750 directory sur le répertoire dans lequel vous voulez qu'apache puisse écrire.

Permettre à apache d'écrire dans un répertoire ouvre la possibilité d'injecter toutes sortes de logiciels malveillants dans le contenu que vous servez. Surveillez le contenu de cette arborescence de répertoires de manière appropriée.