¿Cómo se supone que funcionan los permisos de directorio r— en Linux?

11

He creado un directorio creado con estos permisos: el otro usuario tiene

drwxr - r-- 5 usuario usuario 4096 2012-09-15 19:30 sitios

Cuándo hacer un ls -l en el directorio como otro usuario

ls -l / home / user / sites

Esta es la salida del directorio. Pensé que sin el bit x establecido en ese directorio los nombres de archivo no se mostrarían en absoluto.

d????????? ? ? ? ?                ? dev.user.com  
-????????? ? ? ? ?                ? user.20120914_082804.sql.gz   
d????????? ? ? ? ?                ? shared  
-????????? ? ? ? ?                ? shared.tar.gz  
-????????? ? ? ? ?                ? www.20120914_083256.tar.gz
d????????? ? ? ? ?                ? www.user.com

¿Hay alguna inconsistencia aquí?

vfclists
fuente

Respuestas:

16

xle da permiso para estar realmente en el directorio y acceder a los archivos en el directorio, rle da permiso para ver el contenido del directorio.

Si revierte la situación al darle al directorio el xbit y eliminar el rbit, entonces el usuario podría abrir shared.tar.gz(asumiendo los permisos adecuados en el archivo en sí) pero solo si conocía el nombre del archivo de antemano ya lsque no podría enumerar los archivos en el directorio .

DerfK
fuente
1
Probaré esto y te responderé. Siempre he encontrado este aspecto del intercambio de archivos de Linux confuso.
vfclists
Ese comportamiento no es exclusivo de Linux; se remonta a los primeros días de UNIX: Linux, al ser un sistema compatible con UNIX, funciona de esa manera, y las entradas de ACL de Windows NT tienen bits de permiso similares.
2

Esta interpretación de los permisos se remonta a los primeros sistemas de archivos Unix. Al principio, solo había archivos. (Bueno, y dispositivos, y tuberías, y ... pero estoy tratando de contar una historia aquí, no ser 100% estrictamente precisa; además, todo es cierto para dispositivos y tuberías y todo lo demás porque todo es un archivo, incluso directorios).

Los directorios son solo archivos que el sistema de archivos utiliza para contener los metadatos que describen el árbol de directorios y los archivos que contiene. Cada archivo en un directorio fue descrito por una estructura de datos simple que contenía espacio para un nombre de archivo (originalmente 14 caracteres, IIRC) junto con el número de inodo donde se almacenaron los datos, el tamaño del archivo, las marcas de tiempo y la palabra de permisos . Cada directorio comenzó con dos entradas nombradas .y .., la primera apuntando al inodo de este mismo directorio, y la segunda al inodo de su directorio padre.

La palabra de permisos tenía nueve bits para describir el tratamiento del propietario, otros miembros del mismo grupo y el mundo. Los tres bits para cada marca si el usuario relevante puede leer, escribir o ejecutar el archivo. (Puede notar que hay cinco bits más en la palabra de permisos de 16 bits que estoy ignorando. Esos eventualmente obtuvieron significados asignados pero eso no es relevante para esta parte de la historia). (Además, esta interpretación de los nueve bits se ha mantenido prácticamente igual en todos los descendientes de los primeros Unix, incluido Linux).

Entonces, si un directorio es realmente solo un tipo especial de archivo y se describe mediante una entrada en algún directorio, obviamente también tiene bits de permiso, y esos bits probablemente significan algo. Pero la pregunta es qué, exactamente. La forma más fácil de asignar significado a esos bits es no cambiar lo que significan en primer lugar. Y eso es esencialmente lo que se hizo.

Entonces, el bit de lectura significa que el usuario puede leer el directorio en sí. Clásicamente, esto le da al lector acceso al nombre del archivo, marcas de tiempo, tamaño y número de inodo de los datos de cada archivo. Específicamente, con rset puede usar lspara ver los nombres de todos los archivos en el directorio, pero eso no es suficiente para abrir (o usar de ninguna manera) ninguno de los archivos enumerados.

El bit de ejecución significa que el usuario puede "ejecutar" el directorio. Como los directorios son especiales, ejecutar realmente significa buscar una entrada por nombre y usarla. Eso significa que puede intentar abrir los archivos si xestá configurado, pero sin rque no pueda descubrir sus nombres. Por supuesto, los permisos del archivo solicitado también afectan el acceso, por lo que incluso xen el directorio no podrá leer un archivo a menos que también se lo ofrezca r.

El bit de escritura significa que el usuario puede escribir en el directorio, pero naturalmente solo está mediado por el propio sistema de archivos. Eso significa que con wset puede crear nuevos archivos en ese directorio o editar las entradas de directorio de los archivos existentes. Pero sin xset, en realidad no puedes usar ningún archivo, y sin rque tampoco puedas verlos.

A medida que los modelos más complicados de identidad del usuario han evolucionado en Unix y sus descendientes, estas mismas descripciones básicas han logrado mantenerse notablemente sin cambios.

En resumen, rsignifica que puede ver su contenido, xsignifica que puede usarlo y wsignifica que puede modificarlo incluso para directorios.

RBerteig
fuente
Supongo que puedes explicar mode_tun poco más (especialmente la parte donde los permisos y el tipo de archivo se almacenan en el mismo campo de 32 bits)
SaveTheRbtz
1
Fui activamente usuario y desarrollador de Unix en los años 80. No estaba tratando de contar la historia completa sobre lo que es verdad hoy, sino ponerlo en un contexto histórico, y exponer mi diversión de que el mismo enigma que enfrenté cuando aprendí Unix por primera vez puede ser preguntado hoy, y respondido sustancialmente por misma explicación que recibí de gurús locales en alrededor de 1983. el cambio más cosas, más siguen siendo lo mismo ....
RBerteig