chmod -R hace que los archivos en carpetas secundarias sean legibles por alguna razón

22

Estaba ajustando los permisos al configurar algunos temas de WordPress, y ejecuté chmod 664 -R theme-dir/*Funcionó bien en los archivos en la raíz del directorio, pero todos los archivos en subdirectorios ahora se leen así cuando ls -l:

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

No puedo cd a ninguno de los subdirectorios, y tampoco puedo eliminarlos. Nunca he visto algo así, ¿alguien se ha encontrado con algo similar?

Sal
fuente
parece un sistema de archivos dañado ..
alexus
1
ejecutarchmod -R u+rwX,go+rX,go-w theme-dir/*
Dusan Bajic
@ dusan.bajic Eso funcionó, gracias. Sin embargo, todavía no tengo idea de por qué sucedió.
Sal
55
@alexus sin corrupción, solo permanentes
chicas
Creo que vi algo así cuando hice Chown 644 (o lo que sea) versus chmod, pero realmente no tengo ganas de volver a probar en un sistema en funcionamiento
Foon

Respuestas:

49

Para acceder al contenido (o más específicamente a los metadatos de archivo, excepto el nombre de archivo) de un directorio, se requiere que el directorio tenga el bit de ejecución establecido.

Su chmod recursivo eliminó ese permiso, por lo que perdió ese acceso. Si está usando la -Ropción de chmodes mejor evitar usar la versión numérica de los permisos, y en su lugar ejecutar (usando su estado deseado como ejemplo) chmod -R ug=rwX,o=rX. La X mayúscula significa establecer el bit X solo en directorios o archivos que tienen al menos un xconjunto. También es posible que desee usar 644 ( u=rwX,go=rX) a menos que realmente necesite usuarios de grupo para escribir.

Kevin Cathcart
fuente
66
X significa establecer X en directorios y archivos que ya tienen permiso de ejecución para algún usuario (que generalmente es lo que desea)
tomclegg
1
@tomclegg: Correcto. Actualicé mi respuesta apropiadamente. Parece extraño que nunca agregaron una versión específica de directorio real, o incluso mejor una letra previa a la operación (como u, g, o, o a) que significa aplicar este cambio solo a los directorios.
Kevin Cathcart
13

De la documentación de Wordpress :

Si tiene acceso de shell a su servidor, puede cambiar los permisos de archivos de forma recursiva mediante los siguientes comandos:

Para directorios:

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

Para archivos:

find /path/to/your/wordpress/install/ -type f -exec chmod 644 {} \;
bentek
fuente
Una exageración para este problema en particular, pero muy útil en otros casos :)
nurchi
1
Me he dado cuenta en entornos más sensibles a la seguridad (Magento y Health Care Systems recientemente) que los proveedores y los sistemas de código abierto se están moviendo para recomendar SOLO usando el método de archivo, ya que le brinda un control granular de la cometa sobre la condición anterior y también permite un control detallado de aplicación de setuid, setgid y también el infame "sticky bit". Probablemente sea más trabajo planear esto para este caso de uso, pero la respuesta de la apuesta es siempre el método más seguro que logra el resultado deseado. Creo que la seguridad siempre debe ser la característica # 1 si es posible permitírselo.
Bryan 'BJ' Hoffpauir Jr.