web-dev-qa-db-fra.com

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

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 de changer 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.

61
Nikhil

Ajoutez simplement l’option -R pour modifier de manière récursive les autorisations des fichiers. Par exemple, ajoutez récursivement des autorisations de lecture et d'écriture pour le propriétaire et le groupe sur foldernamename__:

chmod -R ug+rw foldername

Les autorisations seront comme 664 ou 775.

Définir les autorisations sur 777 est fortement déconseillé. Vous obtenez des erreurs dans Apache ou dans votre éditeur concernant les autorisations, car Apache s'exécute sous un autre utilisateur (www-data) que vous.

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

  • Ajoutez-vous au groupe www-data: Sudo adduser $USER www-data
  • Modifier 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. Ajoutez umask 007 à /etc/Apache2/envvars.
  • Accordez-vous (techniquement, le groupe www-data) des autorisations d'écriture: Sudo chmod -R g+w /var/www.
85
Lekensteyn

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 {} ";"
21
user unknown

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
4
Kees Cook

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.

enter image description here

3
Alfredo Hernández

Si vous voulez 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 cette commande:

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.

WARNING: Ne le faites pas pour les fichiers exécutables! Seuls les fichiers qui devraient être visibles par tout le monde.

1
Ryan Shillington