¿Por qué chmod 644 hace que los directorios sean inaccesibles?

8

Tengo un montón de archivos multimedia (que solo necesitan ser 644) que eran una mezcla de varios permisos. Algunos eran de escritura grupal o global, así que pensé que, para estar seguros, los cambiaré a 644.

El problema es que existe una jerarquía de directorios y para todos los directorios que se capturaron en este se ls -lmuestra como:

d????????? ? ? ? ?            ? Dirname

Si modifico eso a 744, está arreglado.

Mi pregunta es: ¿qué está pasando aquí? ¿Los directorios deben ser ejecutables?

Oli
fuente

Respuestas:

7

Como se señala en la página de manual chmodcon relación a los permisos:

Las letras rwxXst seleccionan bits de modo de archivo para los usuarios afectados: leer (r), escribir (w), ejecutar (o buscar directorios) (x), ejecutar / buscar solo si el archivo es un directorio o ya tiene permiso de ejecución para algunos usuario (X)

El bit ejecutable en una carpeta se explica arriba como un permiso de 'búsqueda'; es decir, el bit de ejecución simplemente le permite acceder a la carpeta en un explorador de archivos o moverse a la carpeta desde el terminal ejecutando el cdcomando o ejecutándose ls ~/folderpara enumerar los archivos en la carpeta.

La carpeta debe ser ejecutable para el propietario , aunque el superusuario todavía podría acceder a la carpeta como cuando sudose puede acceder o eliminar cualquier archivo o directorio. Además, los permisos de directorio y archivo se explican con más detalle en este útil artículo en Stackoverflow .

También es importante tener en cuenta que 'ejecutar' la carpeta no significa que realmente esté ejecutando ningún código o comando, como cuando se ejecuta un binario o script ejecutable.

Para un usuario de escritorio doméstico (aunque tal vez no para su servidor), la mayoría de las carpetas $HOMEtienen el permiso de ejecución establecido para el usuario, el grupo y otros si se ven con stat ~/myfolder(extracto a continuación):

Access: (0755/drwxr-xr-x)  Uid: ( 1000/    mike)   Gid: ( 1000/    mike)

Los permisos estándar para las carpetas dentro $HOME son 755 o 775 y para los archivos son 644. Sin embargo, el resto del sistema de archivos será diferente. Nuevamente, las carpetas deben tener el bit de ejecución para el propietario o no podrán ser abiertas por él. Es importante tener cuidado chmodal cambiar los permisos y particularmente al hacerlo de forma recursiva ya que la situación puede desordenarse rápidamente.

Para obtener más información, consulte man chmodlas páginas de manual de Ubuntu en línea y este artículo en Superuser .

postre
fuente
0

Los directorios necesitan xun conjunto de bits (para que el directorio se vea como bit de búsqueda) para abrir. Muchas personas descubren que cuando eliminan el bit ejecutable chmod -Rde toda la carpeta, ya no pueden acceder a él. Para solucionar esto, utilizo treepara poder obtener solo el conjunto de carpetas y evitar la pesadilla de tener todos los archivos configurados como ejecutables (la opción para el árbol es -d List directories only.):

sudo tree -faid dirname | xargs -L1 -I{} sudo chmod +x "{}"

si no tienes tree:

find  dirname -type d -exec chmod +x {} 

¡¡¡Advertencia!!! deberías tener esto en consideración:

  • el uso de chmod o chown recursive en el /directorio raíz o en los directorios del sistema destruirá su sistema operativo (en realidad, cualquier cosa recursiva en el /directorio o directorios del sistema es peligrosa)

  • esta no es una buena práctica de seguridad para establecer permisos masivos como ese

Eduard Florinescu
fuente
@Melebius Ok, gracias, me alegra que hayamos llegado a un acuerdo
Eduard Florinescu