45 votes

Comment définir les permissions des fichiers de manière à ce que les nouveaux fichiers héritent des mêmes permissions ?

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

Je souhaite maintenir les autorisations de l'utilisateur et du groupe de manière récursive pour tous les nouveaux dossiers et fichiers placés dans le répertoire parent. Je sais qu'il s'agit de paramétrer une partie collante, mais je n'arrive pas à trouver une commande qui montre exactement ce dont j'ai besoin.

Voici 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 souhaite que les autorisations 660 soient définies de manière récursive pour tous les dossiers et fichiers placés dans le répertoire /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 souhaite obtenir sont les suivantes :

  1. Répertoires placés sous /path/to/parent sont exécutables par des utilisateurs disposant de permissions
  2. les fichiers sont accessibles en lecture/écriture à l'utilisateur myself et aux membres d'un certain groupe
  3. Fichiers et dossiers dans /path/to/parent n'est PAS lisible dans le monde entier

Je travaille sous Ubuntu 10.0.4 LTS.

Quelqu'un peut-il m'aider ?

71voto

James Mertz Points 390

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

  • rw- autorisations 110 binaire 6 octal

En propriété du groupe peut être hérité par les nouveaux fichiers et dossiers créés dans votre dossier /path/to/parent en définissant le bit setgid à l'aide de la commande chmod g+s comme ceci :

chmod g+s /path/to/parent

Désormais, tous les nouveaux fichiers et dossiers créés sous /chemin/vers/parent se verront attribuer le même groupe que celui défini pour /chemin/vers/parent.


Les autorisations de fichiers POSIX sont les suivantes pas héritées ; elles sont données par le processus créateur et combinées à sa valeur umask actuelle.

Toutefois, vous pouvez utiliser ACL POSIX pour y parvenir. Fixer le ACL par défaut sur un répertoire :

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

Cette disposition s'appliquera setfacl dans le répertoire /path/to/parent, -m odifier la -d défaut ACL - celles qui seront appliquées aux éléments nouvellement créés. (En majuscules X signifie que seuls les répertoires recevront le +x bit.)

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


Remarque : sur les anciens systèmes utilisant ext3/ext4, vous deviez monter le système de fichiers avec l'option acl sinon il ignorerait toutes les ACL et interdirait d'en définir de nouvelles.

mount -o remount,acl /

Pour fixer cette valeur de manière permanente, utilisez tune2fs -o acl <device> ou éditer /etc/fstab .

11voto

Pricey Points 4504

Grawity donne une excellente réponse, mais je soupçonne que la question modifiée a légèrement changé les choses.

Je suggérerais de laisser le répertoire appartenir à l'utilisateur/groupe apache. Il s'agira probablement de apache o httpd en fonction de 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 le ferais pas chmod -R le répertoire entier parce que vous ne voulez pas que les html scripts ou les jpg ou d'autres choses aléatoires soient exécutables. Vous devez modifier les autorisations comme il se doit. (bien que la réinitialisation à 660 ne soit pas la pire des idées).

Vous pouvez essayer de faire quelque chose :

chmod o+w file

Le "o" signifie "autre" et le "w" signifie "écrire". Vous pouvez également utiliser 'u' pour 'user' et 'g' pour 'group', ainsi que 'r' et 'x' qui sont, je l'espère, explicites. Vous pouvez supprimer des autorisations en utilisant "-" plutôt que "+".

2voto

DisgruntledGoat Points 21368

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

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

  • ajouter umask 027 aux valeurs par défaut d'Apache script /etc/default/apache . Cela empêchera d'autres personnes d'accéder aux fichiers ou aux répertoires créés par Apache.
  • exécuter chown www-data:www-data directory sur le répertoire dans lequel vous voulez qu'Apache puisse écrire.
  • exécuter 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 manière appropriée.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X