chmod -R rend les fichiers des dossiers enfants lisibles pour une raison quelconque

22

J'ajustais les autorisations lors de la configuration des thèmes WordPress et couru chmod 664 -R theme-dir/*Il a bien fonctionné sur les fichiers dans la racine du répertoire, mais tous les fichiers dans les sous - répertoires lu maintenant comme ça quand je ls -l:

?---------  ? ? ? ?            ? core_functions.php
?---------  ? ? ? ?            ? css
?---------  ? ? ? ?            ? custom_functions.php
?---------  ? ? ? ?            ? images
?---------  ? ? ? ?            ? import_settings.php
?---------  ? ? ? ?            ? js
?---------  ? ? ? ?            ? options_trim.php
?---------  ? ? ? ?            ? page_templates
?---------  ? ? ? ?            ? post_thumbnails_trim.php
?---------+ ? ? ? ?            ? shortcodes

Je ne peux pas accéder à l'un des sous-répertoires et je ne peux pas non plus les supprimer. Je n'ai jamais rien vu de tel, quelqu'un a-t-il déjà rencontré quelque chose de similaire?

Sal
la source
ressemble à un système de fichiers corrompu ..
alexus
1
runchmod -R u+rwX,go+rX,go-w theme-dir/*
Dusan Bajic
@ dusan.bajic Cela a fonctionné, merci. Mais je ne sais toujours pas pourquoi cela s'est produit en premier lieu.
Sal
5
@alexus pas de corruption, juste des permanentes
poussins
Je pense que j'ai vu quelque chose comme ça quand j'ai chown 644 (ou autre) contre chmod, mais je n'ai vraiment pas envie de tester à nouveau sur un système de travail
Foon

Réponses:

49

L'accès au contenu (ou plus précisément aux métadonnées de fichier, à l'exception du nom de fichier) d'un répertoire nécessite que le répertoire ait le bit d'exécution défini.

Votre chmod récursif a supprimé cette autorisation, vous avez donc perdu cet accès. Si vous utilisez l' -Roption de, il chmodvaut mieux éviter d'utiliser la version numérique des autorisations et exécuter à la place (en utilisant votre état souhaité comme exemple) chmod -R ug=rwX,o=rX. Le X majuscule signifie définir le bit X uniquement sur les répertoires ou les fichiers qui ont au moins un xensemble. Vous pouvez également utiliser 644 ( u=rwX,go=rX) à moins que vous n'ayez vraiment besoin des utilisateurs du groupe pour écrire.

Kevin Cathcart
la source
6
X signifie placer X sur des répertoires et des fichiers qui ont déjà l'autorisation d'exécution pour un utilisateur (ce qui est généralement ce que vous voulez)
tomclegg
1
@tomclegg: D'accord. J'ai mis à jour ma réponse de manière appropriée. Il semble étrange qu'ils n'aient jamais ajouté une véritable version spécifique au répertoire, ni même une lettre de pré-opération (comme les u, g, o ou a), ce qui signifie n'appliquer cette modification qu'aux répertoires.
Kevin Cathcart
13

De la documentation Wordpress :

Si vous disposez d'un accès shell à votre serveur, vous pouvez modifier les autorisations de fichier de manière récursive à l'aide des commandes suivantes:

Pour les répertoires:

find /path/to/your/wordpress/install/ -type d -exec chmod 755 {} \;

Pour les fichiers:

find /path/to/your/wordpress/install/ -type f -exec chmod 644 {} \;
bentek
la source
Une surpuissance pour ce problème particulier, mais très utile dans d'autres cas :)
nurchi
1
J'ai remarqué dans des environnements plus sensibles à la sécurité (Magento et Health Care Systems récemment) que les fournisseurs et les systèmes open source se tournent vers la recommandation UNIQUEMENT en utilisant la méthode de fichier car elle vous donne un contrôle granulaire du cerf-volant sur la condition ci-dessus et permet également un contrôle fin de application de setuid, setgid et aussi du fameux "sticky bit". Il est probablement plus difficile de cartographier cela pour ce cas d'utilisation, mais la réponse au pari est toujours la méthode la plus sûre qui atteint le résultat souhaité. Je crois que la sécurité devrait toujours être la fonctionnalité n ° 1 s'il est possible de se le permettre.
Bryan 'BJ' Hoffpauir Jr.