Comment puis-je modifier récursivement les autorisations des fichiers et des répertoires?

58

J'ai Ubuntu installé sur mon ordinateur local avec apache / php / mysql.

J'ai maintenant un répertoire sur / var / www - dans lequel j'ai plusieurs 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, je dois modifier l'autorisation de l'ensemble du dossier et de ses sous-dossiers et fichiers. Je dois changer individuellement en utilisant

sudo chmod 777 foldername

Comment puis-je le faire récursivement?

Pourquoi dois-je toujours le faire 777 , j'ai essayé 755 pour les dossiers et 644 pour les fichiers, mais cela ne sera pas le cas. travailler.

    
posée Nikhil 16.03.2011 - 15:45
la source

5 réponses

80

Ajoutez simplement l’option -R pour modifier récursivement les permissions 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.

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

Si vous souhaitez écrire dans /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
  • Modifiez la propriété des fichiers dans /var/www : sudo chown -R www-data:www-data /var/www
  • Modifiez le umask, de sorte 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 droits en écriture: sudo chmod -R g+w /var/www .
réponse donnée Lekensteyn 16.03.2011 - 16:06
la source
20

bruteforce:

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

Qu'est-ce qui ne fonctionne pas? Soyez plus précis!

sudo find foldername -type d -exec chmod 755 {} ";"
sudo find foldername -type f -exec chmod 644 {} ";"
    
réponse donnée user unknown 16.03.2011 - 16:05
la source
4

Vous ne devriez pas avoir besoin de 777 pour quoi que ce soit. Dans le pire des cas, vous devrez remplacer le propriétaire de certains fichiers et répertoires par l’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 au groupe de Lekensteyn, modifiez respectivement 755 à 775 et 644 à 664 ci-dessus, puis forcez l'adhérence du groupe:

sudo find /var/www/some/subset -type d -print0 | xargs -0 chmod g+s
    
réponse donnée Kees Cook 17.03.2011 - 08:02
la source
3

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

    
réponse donnée Alfredo Hernández 16.03.2011 - 16:12
la source
0

Si vous voulez que tous vos fichiers soient lisibles au monde (c’est-à-dire qu’il ne soit qu’un ensemble statique de fichiers / images HTML), utilisez cette commande:

chmod -R a+r <base directory>

Cela va parcourir récursivement tous les fichiers & amp; sous-répertoires et leur accorder une autorisation de lecture.

AVERTISSEMENT : ne faites pas cela pour du code qui s'exécute! Seuls les fichiers devant être visibles par tout le monde.

    
réponse donnée Ryan Shillington 26.01.2015 - 18:46
la source

Lire d'autres questions sur les étiquettes