Me refiero a lo siguienteDocumentación de Arch Linux Access_Control_Lists
Afirma:
Otorgar permisos de ejecución para archivos privados a un servidor web
La siguiente técnica describe cómo a un proceso como un servidor web se le puede otorgar acceso a archivos que residen en el directorio de inicio de un usuario, sin comprometer la seguridad al otorgar acceso a todo el mundo.
A continuación asumimos que el servidor web se ejecuta como el usuario http y le otorgamos acceso al directorio de inicio de geoffrey /home/geoffrey.
El primer paso es otorgar permisos de ejecución al usuario http:
setfacl -m "u:http:--x" /home/geoffrey
Nota: Los permisos de ejecución de un directorio son necesarios para que un proceso enumere el contenido del directorio.
Entonces, en el ejemplo anterior, están configurando los permisos de ejecución para el usuario http en el directorio /home/geoffrey. Según tengo entendido, otorgar solo el bit de ejecución en un directorio NO le permitirá enumerar el contenido de un directorio, pero le permitirá acceder a los archivos (si conoce sus nombres + los permisos de los archivos determinados dentro del directorio tendrían los permisos correctos). conjuntos). Entonces, ¿cómo es posible que con setfacl -m "u:http:--x" /home/geoffrey
el usuario http (o el proceso al que se refieren) pueda enumerar el contenido del directorio? ¿Qué me estoy perdiendo?
¡Gracias de antemano!
Respuesta1
Necesita -x
permiso en un directorio para poder acceder a él y a cualquier archivo que contenga. Sin embargo, su acceso a los archivos del directorio depende de los permisos de los archivos, no del directorio en sí. Siempre que tenga derechos de ejecución en el directorio principal (el directorio), no necesitará nada más para acceder a los archivos que contiene. Esto se demuestra más fácilmente con un ejemplo:
$ sudo mkdir dir1 && echo "Hello world!" | sudo tee dir1/file1 && sudo chmod 700 dir1
Hello world!
$ ls -ld dir1/
drwx------ 2 root root 4096 Apr 12 16:09 dir1/
$ sudo ls -l dir1/
total 4
-rw-r--r-- 1 root root 13 Apr 12 16:09 file1
Solo root
tiene acceso, por lo que si intentamos enumerar el contenido del directorio o capturar el archivo, fallará:
$ ls dir1/
ls: cannot open directory 'dir1/': Permission denied
$ cat dir1/file1
cat: dir1/file1: Permission denied
Observe cómo cat
falla a pesar de que tengo acceso de lectura al archivo. Ahora, si le doy a mi usuario acceso de ejecución al directorio y lo intento nuevamente, puedo leer el archivo:
$ sudo chmod 711 dir1/
$ ls -l
total 4
drwx--x--x 2 root root 4096 Apr 12 16:09 dir1
$ cat dir1/file1
Hello world!
Todavía no puedo enumerar el contenido del directorio ya que eso requeriría acceso de lectura al directorio, pero ahora puedo leer cualquier archivo en el directorio siempre que conozca su ruta.
Entonces, la idea básica es sólida aquí, es sólo esa nota final la que resulta confusa. Necesita acceso de lectura para enumerar el contenido, pero el acceso de ejecución es suficiente si solo necesita darle al http
usuario acceso a archivos específicos cuya ruta se conoce.
Si bien está mal redactada, la nota no es exactamente incorrecta, sino simplemente incompleta. De hecho, necesita permisos de ejecución para podercompletamenteenumerar el contenido de un directorio. Sin ellos, puedes ver los nombres de los archivos pero no los atributos:
$ ls -l
total 4
drwxr--r-- 2 root root 4096 Apr 12 16:09 dir1
$ ls -l dir1/
ls: cannot access 'dir1/file1': Permission denied
total 0
-????????? ? ? ? ? ? file1
Respuesta2
No te falta nada: si bien la mayor parte de este documento es correcta, la nota es incorrecta.
Puede cruzar su directorio de inicio a otro directorio. Ese otro directorio puede ser legible y cruzable y, por lo tanto, tener su contenido listado.
Creo que hacer que tu casa sea solo transitable es una buena idea, pero también creo que tienes razón, la descripción de lo que hace está mal.
- Necesita permiso de lectura para enumerar los nombres de archivos en un directorio.
- Necesita permiso cruzado para
stat
el archivo (descubra cualquier cosa sobre el archivo o ábralo).
¿Ha enviado un informe de error?