1 votos

directorio tiene un modo de archivo ejecutable

Estoy aprendiendo permisos de modo de archivo

 666: for non-executable ordinary files 
777: for executable ordinary files 
777: for directories
 

Referencia al modo ejecutable,
Pude entender que un archivo de programa tiene modo ejecutable, pero tengo
no hay ideas acerca de por qué un directorio también tiene un 'modo ejecutable'.

Me pareció que no tiene sentido. una entrada de directorio no se puede ejecutar y no puede establecer todos los archivos dentro de un directorio 'ejecutable' simplemente configurando su directorio.

¿Cómo entender una entrada de directorio ejecutable?

2voto

Serg Puntos 17677

Este ha sido cubierto en un post relacionados en Unix Y Linux:

El bit de ejecución (x) permite que el usuario afectado para entrar en el directorio, y acceder a los archivos y directorios dentro de la

Un ejemplo:

$ chmod -x test_access/
$ cd test_access/
bash: cd: test_access/: Permission denied

Esto también previene la creación/eliminación de archivos:

$ rm test_access/new_file 
rm: cannot remove 'test_access/new_file': Permission denied
$ touch test_access/another_file
touch: cannot touch 'test_access/another_file': Permission denied

El permiso de ejecución en realidad debería llamarse "acceso" permiso, ya que cuando no hay x conjunto de bits en el archivo o directorio, los resultados en EACCES de error. Se puede ver que cuando se realizan strace bash -c 'cd test_access/

chdir("test_access")                    = -1 EACCES (Permission denied)

En el nivel inferior, con este permiso en stat.h estándar de Unix de la biblioteca se define como

S_IXUSR

Ejecutar/buscar permiso, el propietario.

Donde la búsqueda se refiere por supuesto a los directorios. Tenga en cuenta que la lectura de lo que el directorio contiene está cubierto por la r bits en los permisos. Por lo tanto, todavía puedo ls el directorio, pero no se puede navegar cuando no hay x poco, pero hay r poco:

$ ls -ld test_access
drw-r--r-- 2 admin admin 4096 Jan  4 15:18 test_access
$ ls test_access
test_file

Si miramos strace salida rm y touch, usted pronto descubrirá que estos comandos también utilizar la variación de stat() y openat() syscalls, que también volver EACCES


Nota sobre ls

Tenga en cuenta que en los sistemas Debian con defecto /bin/bash como usuario del shell interactivo, ls a menudo es un alias a ls --color=auto. Donde ese es el caso, verá un mensaje de error como este:

$ ls test_access 
ls: cannot access 'test_access/test_file': Permission denied
ls: cannot access 'test_access/new_file': Permission denied
new_file  test_file

$ ls -l test_access 
ls: cannot access 'test_access/test_file': Permission denied
ls: cannot access 'test_access/new_file': Permission denied
total 0
-????????? ? ? ? ?            ? new_file
-????????? ? ? ? ?            ? test_file

La razón detrás de que se encuentra en el POSIX definición de EACCES:

[EACCES] bits de Permiso del archivo de modo de no permitir que el solicitado el acceso, o buscar el permiso es denegado en un componente de la ruta prefijo

Específicamente, si usted ejecute strace ls --color=auto test_access/ verás que ls intenta realizar lstat() sistema de llamada para determinar el directorio tipo de entrada, que es donde se produce EACCES

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: