desarrollo-web-br-bd.com

Ejecutar vs Leer bit. ¿Cómo funcionan los permisos de directorio en Linux?

En mi CMS, noté que los directorios necesitan el bit ejecutable (+x) configurado para que el usuario los abra. ¿Por qué se requiere el permiso de ejecución para leer un directorio y cómo funcionan los permisos de directorio en Linux?

402
Nick.h

Al aplicar permisos a directorios en Linux, los bits de permiso tienen significados diferentes que en los archivos normales.

  • El bit de lectura (r) permite al usuario afectado enumerar los archivos dentro del directorio
  • bit de escritura (w) permite al usuario afectado crear, renombrar o eliminar archivos dentro del directorio, y modificar los atributos del directorio
  • El bit de ejecución (x) permite al usuario afectado ingresar al directorio y acceder a los archivos y directorios dentro
  • El bit fijo (T, o t si el bit de ejecución está configurado para otros) establece que los archivos y directorios dentro de ese directorio solo pueden ser eliminados o renombrados por sus propietario (o root)
378
Chris Down

Primero, piense: ¿Qué es un directorio? Es solo una lista de elementos (archivos y otros directorios) que viven dentro. Entonces: directorio = lista de nombres.

Leer bit = Si está configurado, puede leer esta lista. Entonces, por ejemplo, si tiene un directorio llamado poems:

  • Usted puede ls poems y obtendrás una lista de elementos que viven dentro de (-l no revelará ningún detalle!).
  • Puede usar la finalización de la línea de comandos, es decir, touch poems/so <TAB> poems/somefile.
  • No puede convertir poems en su directorio de trabajo (es decir, cd en él).

Escribir bit = Si está configurado, puede modificar esta lista, es decir, puede {agregar, renombrar, eliminar} nombres en ella. ¡Pero! En realidad, puede hacerlo solo si el bit de ejecución también está configurado.

Ejecutar bit = Convierta este directorio en su directorio de trabajo, es decir, cd en él. Necesita este permiso si desea:

  • acceder (leer, escribir, ejecutar) elementos que viven dentro.
  • modifique la lista en sí, es decir, agregue, cambie el nombre, elimine nombres en ella (por supuesto, el bit de escritura debe establecerse en el directorio).

Caso interesante 1: Si tiene permisos de escritura + ejecución en un directorio, puede {eliminar, renombrar} elementos que viven dentro, incluso si no tiene permisos de escritura en esos elementos. (use un poco adhesivo para evitar esto)

Caso interesante 2: Si tiene permiso de ejecución (pero no escritura) en un directorio Y tiene permiso de escritura en un archivo que se encuentra dentro, no puede eliminar el archivo (porque implica eliminarlo de la lista) . Sin embargo, puede borrar su contenido, p. si es un archivo de texto, puede usar vi para abrirlo y eliminar todo. El archivo seguirá allí, pero estará vacío.

Resumen:

Leer bit = Puedes leer los nombres en la lista.
Escribir bit = Puede {agregar, renombrar, eliminar} nombres en la lista SI el bit de ejecución también está configurado.
Ejecutar bit = Puede hacer de este directorio su directorio de trabajo.

PD: El artículo mencionado por Kusalananda es una buena lectura.

274
Baldrick

He preparado esta tabla con todos los permisos posibles y sus efectos prácticos.

linux directory permissions

(*) ¡Solo nombres de archivos: otros atributos como el tamaño o la fecha no son accesibles. P.ej. puede usar la tecla tab para autocompletar pero no el comando ls.

Algunas ideas :

  • Con X desarmado , R y W son en su mayoría inútiles.
  • [~ # ~] x [~ # ~] solo deshabilitando RW le da una falsa sensación de seguridad ya que puede leer y escribir ciegamente contenidos de archivos y acceder a subdirectorios. Debe asegurarse de que todos los elementos secundarios directos del directorio tengan permisos explícitos.
  • Raramente usará otros valores que no sean:
    • 0 : Sin acceso.
    • 1 : Acceso mínimo que permite el desplazamiento.
    • 5 : permite leer/escribir, pero no altera la estructura del árbol de directorios.
    • 7 : Acceso completo.
49
David

Aquí hay un buen artículo sobre esto.

Resumen:

Un directorio con su conjunto de bits x permite al usuario cd (cambiar el directorio) en este directorio y acceder a los archivos que contiene.

Detalles:

  • Leer (r)

    La capacidad de leer los nombres de los archivos almacenados en este directorio.

  • Escribir (w)

    La capacidad de renombrar archivos en el directorio, crear archivos nuevos o eliminar archivos existentes, si también tiene permisos de Ejecución. Si no tiene permisos de ejecución, los permisos de escritura no tienen sentido.

  • Ejecutar (x)

    La capacidad de cd en este directorio y acceder a los archivos en este directorio.

Aquí hay algunos ejemplos que deberían facilitar su comprensión:

# "Full Access".  Reegen can list, create, delete, rename, delete,
# and stat any files in dir.
# Access to file contents is subject to the permissions
# of the file itself.
# New files can be created, any file can be deleted, regardless of
# file permissions.
drwx------  1 reegen    reegen          4096 Jan 01 2003  dir

# Reegen can do everything in the "Full Access" list except create,
# delete, or rename files in this directory.
dr-x------  1 reegen    reegen          4096 Jan 01 2003  dir

# Reegen can do everything in the "Full Access" list except list the
# filenames in this directory.  If she suspects there is a file
# named "program" she can list it, but cannot do an 'ls'
# of the directory itself.  She can access any file (file
# permissions permitting) if she knows its name.  She can
# create new files, or rename/delete existing ones.
d-wx------  1 reegen    reegen          4096 Jan 01 2003  dir

# Reegen cannot create or delete any files in this directory.
# She can access any file (permissions permitting) if she
# knows its name already.
d--x------  1 reegen    reegen          4096 Jan 01 2003  dir

Hay incluso más información en el Hacking Linux Exposed article .

45
Kusalananda

Del libro de Robert Love '' Programación del sistema LINUX '', sección 1, permiso-

enter image description here

6
alhelal

Para cualquier operación que acceda a un archivo o directorio, primero debe resolver la ruta al archivo o directorio. La resolución requiere que el usuario tenga permiso de ejecución en todos los directorios a lo largo de la ruta, excepto el componente de ruta final. Entonces, para los directorios, puede pensar que el bit de ejecución significa "resoluble".

Tomar camino /a/b/c.txt como ejemplo, digamos que el usuario tiene 1) permiso de ejecución en / y /a; 2) tiene permiso de lectura en /a/b; 3) permiso de lectura y escritura en /a/b/c.txt.

  • El usuario no podrá leer (lista) /a, porque no tiene permiso de lectura. Pero la resolución del camino no falla.

  • El usuario podrá leer (lista) /a/b, porque el usuario tiene permiso de ejecución en /, /a y lea el permiso en /a/b. Tenga en cuenta que, al leer /a/b, el nombre de archivo c.txt es visible, pero los metadatos (por ejemplo, tamaño de archivo) y el contenido no lo son, porque el nombre de archivo se almacena con el directorio, no con el archivo, pero los metadatos se almacenan en el inodo del archivo.

  • El usuario no podrá leer /a/b/c.txt, porque al resolver la ruta desde / a /a a /a/b, falla en /a/b ya que el usuario no tiene permiso de ejecución.

Vea también cómo se resuelve un nombre de ruta en un archivo .

4
Dagang

Una analogía útil es pensar en cada archivo como un libro, y cada directorio como una habitación donde se guardan los libros.

Hay reglas para poder enumerar todos los nombres en una sala: el bit de lectura para directorios. Reglas para eliminar un libro de la sala: el bit de escritura para directorios. Y reglas para entrar en una sala y explorar: el directorio resultante ejecuta bit.

Esas reglas son separadas y diferentes a las reglas de cada libro. Hay reglas para permitir que alguien abra un libro y lea su contenido: los bits de lectura para cada archivo. Hay reglas para modificar el contenido de un libro: los bits de escritura para cada archivo. Y para ejecutar un archivo: los bits de ejecución para cada archivo.

Escribo bit (s) porque hay tres bits para cada acción. Hay un bit de lectura para el propietario, un bit de lectura para los grupos y un bit de lectura para todos los demás (otros). Si alguno de esos tres bits está configurado para un usuario específico, ese usuario tiene el bit de lectura activo. No importa cómo se descubrió que ese bit está activo, ya sea ser o g roup o o allí, tiene el mismo efecto resultados.

Por lo tanto, se podría permitir a un usuario ingresar a una habitación y eliminar libros de la biblioteca, pero no se le permitiría leer el contenido del mismo libro.

Es por eso que se requiere un lectura bit para directorios: para controlar quién tiene permitido enumerar el contenido de la sala (títulos de libros).

Y el bit ejecutar se usa para controlar quién puede entrar en la sala de libros.

2
Isaac

El significado de Ejecutar para directorios es bastante claro. Como no hay permiso de Traverse, a diferencia de Windows, debe sobrecargar algo. Los diseñadores eligieron Ejecutar, eso causa una confusión interminable. Como un tipo de seguridad informática que asigna derechos de Ejecución a algo que no tiene la intención de Ejecutar, parece dudoso.

0
NemoX