GNU/Linux >> Tutoriales Linux >  >> Linux

¿Realmente necesito chmod recursivo para restringir el acceso a una carpeta?

Para un directorio, el acceso de "lectura" le permite listar los contenidos, y el acceso de "ejecutar" le permite atravesar el directorio para abrir uno de sus elementos secundarios (archivo o subdirectorio). Entonces, si eliminas:

  • solo el acceso de lectura, las personas aún pueden acceder a los subdirectorios adivinando sus nombres
  • solo el indicador de ejecución, las personas aún pueden enumerar los nombres de los contenidos incluso si no pueden acceder a ellos, y esto aún puede ser revelador
  • privilegios de lectura y ejecución en un directorio, todo lo que esté debajo se vuelve inalcanzable y no es necesario realizar un cambio recursivo.

Por supuesto, si realiza un cambio recursivo, un restablecimiento accidental no recursivo de los derechos de acceso al directorio superior tendrá menos consecuencias.


No hace falta decir que, si creó un archivo hace dos días (con un modo de lectura pública) y alguien leyó el archivo ayer o hizo una copia de él, entonces no hay nada que pueda hacer hoy para que ese archivo sea privado.

xenoid dice (de manera algo simplista) que, si elimina el grupo y otros permisos de su directorio (hoy, ahora), "cualquier cosa debajo de él se vuelve inalcanzable, y no necesita hacer un cambio recursivo". Acepto que, si chmod correctamente su directorio (de nivel superior), nadie más que usted mismo podrá acceder a él en el futuro (es decir, a partir de ahora). Pero hay algunas trampas.

Enlaces duros

¿Recuerdas el archivo que creaste hace dos días? Suponga que su adversario hizo un enlace duro a ese archivo ayer (en lugar de copiarlo). Si chmod solo su directorio (de nivel superior), entonces ese archivo seguirá teniendo los permisos de lectura pública que asignó cuando lo creó, por lo que el malo aún podrá leerlo en el futuro (potencialmente) incluso si lo modifica posteriormente. eso. Si haces un chmod recursivo ,que asegurará los permisos en el archivo,lo que afectará el enlace. El malo aún podrá hacer ls -l en él, para que puedan ver cuándo lo cambias y qué tan grande es, pero no podrán volver a leerlo.

Directorio de trabajo

Supongamos que, bajo su secret directorio, tienes un plans directorio, y también es de lectura pública. Y supongamos que, hace cinco minutos, el malo abrió una ventana de terminal y dijo

cd /home/clemisch/secret/plans

Ahora, después de hacer el chmod el secret ,el directorio de trabajo del malo sigue siendo  /home/clemisch/secret/plans , y pueden continuar enumerando ese directorio y acceder a los archivos allí, potencialmente para siempre. Por supuesto, una vez que cd en otro lugar, o cerrar esa ventana, o cerrar sesión, o la máquina se reinicia, luego pierden el acceso.

Si haces un chmod recursivo , que asegurará los permisos sobre todos los archivos y todos los directorios, haciendo que el ocupante ilegal pierda el acceso inmediatamente.

Esto podría no ser un riesgo muy grande si la máquina es una computadora personal a la que se accede solo a través de la consola. Pero, si el malo pudo haber dejado un screen o tmux sesión en segundo plano, entonces podrían usar este ataque. Y, si la máquina admite ssh (u otro acceso remoto; tal vez incluso FTP sería suficiente), se puede usar este ataque.

Error humano

Como señaló xenoid en su respuesta:si haces un chmod recursivo en secret hoy y pasado mañana accidentalmente chmod (solo) el directorio de nivel superior de vuelta a 755, entonces aún estará protegido por el chmod recursivo de hoy —todos los archivos y directorios bajo secret seguirá siendo ilegible. (Por supuesto, si crea un nuevo archivo en secret mañana, y permite que sea legible públicamente, entonces estará expuesto cuando abra los permisos en el secret directorio. Pero eso sería cierto sin importar si el chmod de hoy fue recursivo o no.)

mazunki hizo un comentario:"Creo que cp lleva permisos.” No estoy seguro de lo que querían decir, pero considere este escenario. Quieres hacer un diff entre dos archivos:

  • secret/plans/the/quick/brown/fox/file1
  • secret/jumps/over/the/lazy/dog/file2

Pero no está seguro de dónde están exactamente esos archivos y tiene que hurgar para encontrarlos. Podrías sentirte tentado a hacer

cd plans
cd the/quick                            # looking for file1
cd brown/fox                            # found it!
cp file1 /tmp
cd ../../../../..
cd jumps/over
cd the                                  # looking for file2
cd lazy/dog                             # found it!
diff /tmp/file1 file2

Si haces esto, entonces /tmp/file1 tendrá la misma protección que secret/plans/the/quick/brown/fox/file1 —así que esa es otra razón para hacer el recursivo chmod hoy.

UNA cosa más

Si el malo abrió uno de sus archivos secretos hace cinco minutos y lo mantiene abierto, podrá leerlo en el futuro, potencialmente incluso si lo modificas. La buena noticia es que este es un ataque algo complicado de ejecutar:el malo debe haber pensado un poco antes de que hagas el chmod . La mala noticia es que es muy difícil defenderse de este ataque:un chmod recursivo no ayudará.
__________
y, por supuesto, usuarios privilegiados / procesos

PD Puede acortar un poco su comando:chmod go= es equivalente a chmod g=,o= . (Eso no hará que el recursivo chmod más rápido, por supuesto.)


Linux
  1. ¿Cómo eliminar un directorio y una carpeta en Linux?

  2. Error Acceso denegado necesita privilegio de PROCESO [MySQL]

  3. ¿Estadísticas recursivas sobre tipos de archivos en el directorio?

  4. ¿Por qué una carpeta debe ser ejecutable?

  5. sudo -i pero mantener el directorio de trabajo actual

Cómo restringir el acceso al directorio y subdirectorios en Nginx

¿Cómo acceder a una carpeta que desea rápidamente?

Administre directorios y permisos de archivos con chmod Recursive

Linux / Carpeta y /carpeta raíz

PSCP:Cargue una carpeta completa, Windows a Linux

¿Mi Oracle DBA necesita acceso raíz?