Comment puis-je modifier de manière récursive les autorisations de fichiers et de répertoires?


65

Ubuntu est installé sur mon ordinateur local avec apache / php / mysql.

J'ai maintenant un répertoire dans / var / www - dans lequel j'ai plusieurs de mes projets en cours. Je travaille aussi avec opensource (drupal, magento, sugarcrm).

Le problème auquel je suis confronté est la modification de l'autorisation de fichier avec le terminal. Parfois, j'ai besoin de changer la permission de tout le dossier et de ses sous-dossiers et fichiers. Je dois changer individuellement en utilisant

sudo chmod 777 foldername

Comment puis-je faire cela récursivement.

Aussi, pourquoi dois-je toujours le faire 777 , j'ai essayé 755 pour les dossiers et 644 pour les fichiers, mais cela ne fonctionnera pas.

Réponses:


91

Il suffit d’ajouter l’ -Roption pour modifier de manière récursive les autorisations des fichiers. Par exemple, ajoutez de manière récursive des autorisations de lecture et d'écriture pour le propriétaire et le groupe sur foldername:

chmod -R ug+rw foldername

Les autorisations seront comme 664 ou 775.

La définition des autorisations sur 777 est fortement déconseillée . Vous obtenez des erreurs dans Apache ou dans votre éditeur concernant les autorisations, car Apache s'exécute sous un utilisateur ( www-data) différent de vous.

Si vous souhaitez écrire /var/www, ajoutez-vous au www-datagroupe et définissez les autorisations umask + en conséquence.

  • Ajoutez-vous au www-datagroupe:sudo adduser $USER www-data
  • Changer la propriété des fichiers dans /var/www:sudo chown -R www-data:www-data /var/www
  • Modifiez l'umask afin que les fichiers nouvellement créés par Apache accordent également des autorisations d'écriture au groupe. Ajouter umask 007à /etc/apache2/envvars.
  • Accordez - vous (techniquement, le groupe www-data) de droits d' écriture: sudo chmod -R g+w /var/www.

ouais j'ajoutais r flag au mauvais endroit, je l'ajoutais après le o + w pour chmod.
JohnMerlino

De plus, si vous essayez d'utiliser chmod -r blablabla(petit -r au lieu de -R), vous risquez peut-être de supprimer les autorisations de lecture pour tout le monde ...
Cyril Duchon-Doris

1
Après ces instructions, c'est une bonne idée de vérifier qu'il n'y a pas de .htaccessfichiers avec des autorisations en écriture pour apache. find /var/www/ | grep .htaccess | xargs ls -l.
reynoldsnlp

23

Force brute:

sudo find foldername -exec chmod a+rwx {} ";"

Qu'est-ce qui ne marche pas? Sois plus précis!

sudo find foldername -type d -exec chmod 755 {} ";"
sudo find foldername -type f -exec chmod 644 {} ";"

lorsque vous êtes dans le dossier, supprimez "nomdossier"
Enrique

4
... et le remplacer par.
djjeck

4

Vous ne devriez avoir besoin de 777 pour rien. Dans le pire des cas, vous devrez changer le propriétaire de certains fichiers et répertoires en utilisateur "www-data".

sudo find /var/www -type d -print0 | xargs -0 chmod 755
sudo find /var/www -type f -print0 | xargs -0 chmod 644
sudo find /var/www/some/subset -print0 | xargs -0 chown www-data:www-data

Si vous utilisez la méthode d'appartenance à un groupe de Lekensteyn, modifiez 755 à 775 et 644 à 664 respectivement ci-dessus, puis forcez le groupe à rester collant:

sudo find /var/www/some/subset -type d -print0 | xargs -0 chmod g+s

3

Vous pouvez modifier les sous-dossiers et les fichiers sur Nautilus. Comme vous pouvez le voir sur l'image ci-dessous. Afin d'avoir les permissons sur les boutons, vous pouvez activer l'option sur Ubuntu Tweak.

entrez la description de l'image ici


Utilisez LANG=C [command]pour obtenir les traductions anglaises.
Lekensteyn

1

Si vous souhaitez que tous vos fichiers soient lisibles dans le monde entier (c'est-à-dire qu'il ne s'agit que d'un ensemble statique de fichiers / images HTML), utilisez la commande suivante:

chmod -R a+r <base directory>

Cela va parcourir de manière récursive tous les fichiers et sous-répertoires et leur donner une permission de lecture.

AVERTISSEMENT : ne faites pas cela pour les fichiers qui sont exécutables! Seuls les fichiers qui devraient être visibles par tout le monde.


Voulez-vous dire "ne faites chmod -R a+xrien" ou "ne faites pas chmod -R a+rd'exécutables"?
aleclarson

Je l'ai corrigé. Le plus tard est vrai. Veillez à ne pas autoriser les autres utilisateurs à accéder aux exécutables que vous avez créés.
Ryan Shillington
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.