web-dev-qa-db-fra.com

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

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

Je souhaite conserver les autorisations d'utilisateur et de groupe de manière récursive pour tous les nouveaux dossiers et fichiers placés dans le répertoire parent. Je sais que cela implique de définir un problème persistant, 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 sur 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 aider s'il vous plaît?

En réalité, 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 des autorisations.
  2. les fichiers sont lisibles/inscriptibles par l'utilisateur et les membres de somegroup
  3. Les fichiers et dossiers dans /path/to/parent ne sont PAS lisibles par tout le monde.

Je cours sur Ubuntu 10.0.4 LTS.

Quelqu'un peut aider s'il vous plaît?

33
oompahloompah

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

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

par exemple.

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

Vous pouvez ensuite 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 à Apache groupe 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 de scripts HTML, jpg ou autres choses aléatoires exécutables. Vous devez modifier les autorisations si nécessaire. (Bien que le ramener à 660 ne soit pas la pire des idées.)

Quelque chose que vous pouvez aimer essayer est:

chmod o+w file

Le «o» signifie «autre» et «w» signifie «écrire». Vous pouvez également avoir "u" pour "utilisateur" et "g" pour "groupe", ainsi que "r" et "x" qui, espérons-le, vont de soi. Vous pouvez supprimer les autorisations en utilisant '-' plutôt que '+'.

9
PriceChild

Les autorisations que vous recherchez sont 0770 et 0660.

  • rw- permissions → 110 binaire → 6 octal

Le propriété du groupe peut être hérité par les nouveaux fichiers et dossiers créés dans votre dossier/chemin/vers/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 se verront attribuer le même groupe que celui défini sur/chemin/vers/parent.


Les autorisations de fichiers POSIX sont not inherited; elles sont données par le processus de création et combinées avec sa valeur umask actuelle.

Cependant, vous pouvez utiliser POSIX ACL pour y parvenir. Définissez la ACL par défaut sur un répertoire:

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

Ceci appliquera setfacl au répertoire/chemin/à/parent, -modifiant le-default ACLs - ceux qui seront appliqués aux éléments nouvellement créés. (X majuscule signifie que seuls les répertoires recevront le bit +x.)

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


Remarque: Sur les systèmes plus anciens utilisant ext3/ext4, vous deviez monter le système de fichiers avec l'option acl. Sinon, tous les ACL seraient ignorés et les nouveaux réglages ne seraient pas autorisés.

mount -o remount,acl /

Pour le définir de manière permanente, utilisez tune2fs -o acl <device> ou éditez /etc/fstab.

57
grawity

Je pense que vous compliquez exagérément la question. Si le répertoire de niveau supérieur n'est pas accessible aux autres, ceux-ci ne pourront pas créer de fichiers dans l'arborescence. L'accès en écriture au groupe n'est pas requis si seul Apache est en train d'écrire.

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

  • ajoutez umask 027 au script par défaut Apache /etc/default/Apache. Cela empêchera d’autres d’accéder aux fichiers ou répertoires créés par Apache.
  • exécutez chown www-data:www-data directory sur le répertoire dans lequel Apache doit pouvoir écrire.
  • exécutez chmod 750 directory sur le répertoire dans lequel Apache doit pouvoir écrire.

Autoriser Apache à écrire dans un répertoire ouvre la possibilité d'injecter toutes sortes de malwares dans le contenu que vous diffusez. Surveillez le contenu de cette arborescence de répertoires de manière appropriée.

2
BillThor