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í?
fuente
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
r
set puede usarls
para 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
x
está configurado, pero sinr
que no pueda descubrir sus nombres. Por supuesto, los permisos del archivo solicitado también afectan el acceso, por lo que inclusox
en el directorio no podrá leer un archivo a menos que también se lo ofrezcar
.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
w
set puede crear nuevos archivos en ese directorio o editar las entradas de directorio de los archivos existentes. Pero sinx
set, en realidad no puedes usar ningún archivo, y sinr
que 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,
r
significa que puede ver su contenido,x
significa que puede usarlo yw
significa que puede modificarlo incluso para directorios.fuente
mode_t
un poco más (especialmente la parte donde los permisos y el tipo de archivo se almacenan en el mismo campo de 32 bits)