¿Puedo hacer un directorio público en un directorio privado?

20

Tengo una carpeta personal / a / b en el servidor con permiso 700. No quiero que otros enumeren los contenidos en / a / b. El propietario de / a es root.

Ahora necesito abrir todas las autoridades del directorio / a / b / c para todos los usuarios.

Cambié el permiso de / a / b / c a 777 pero todavía es inaccesible para otros.

Sotavento
fuente
2
Debe configurar el 'bit de ejecución' para permitir el recorrido del directorio (para atravesar / ay / a / b), esto podría resolver su problema:chmod +x /a/b
ex0ns

Respuestas:

34

Usted puede. Solo tiene que establecer el bit ejecutable en el /a/bdirectorio. Eso evitará poder ver nada b, pero aún puede hacer todo si va directamente a a/b/c.

% mkdir -p a/b/c
% chmod 711 a/b
% sudo chown root a/b
% ll a/b
  ls: cannot open directory a/b: Permission denied
% touch a/b/c/this.txt
% ls a/b/c
  this.txt

Tenga en cuenta que si bien otros no pueden enumerar el contenido /a/b, pueden acceder a los archivos en ese directorio si adivinan el nombre del archivo.

% echo hello | sudo tee a/b/f
% cat a/b/f
hello
% cat a/b/doesntexist
cat: a/b/doesntexist: No such file or directory

Por lo tanto, asegúrese de mantener los permisos adecuados (sin grupo / mundo) en todos los demás archivos / directorios dentro del bdirectorio, ya que esto evitará esta advertencia.

stevieb
fuente
Como alternativa a la configuración del bit ejecutable, ¿podría también proporcionar un enlace rígido a a / b / c que se encuentre en otra ubicación?
Moby Disk
2
@MobyDisk No se puede vincular a un directorio.
Michael Hampton
No funcionaría, porque no importa qué, todavía necesita leer bpara vincular ac
stevieb
3
Tenga en cuenta que hay algunas advertencias importantes para esto. Si alguno de los archivos a/btiene permisos de grupo / otros distintos de cero, y un adversario sabe o puede adivinar sus nombres, dicho adversario puede interactuar con esos archivos.
Kevin
Verdadero @Kevin, los permisos para todo lo que está debajo bdeben tener permisos establecidos para proteger contra esto antes de crearlos c, y luego se necesita diligencia cuando se completan otros elementos bpara garantizar que los permisos sean seguros solo para el propietario.
stevieb
9

Con esos permisos, no puede alcanzar su objetivo. Para llegar al directorio c, debe permitir que todos los demás usuarios atraviesen el directorio, lo bque se hace dando permiso de ejecución para ese directorio. Con el /a/bmodo 711 configurado, puede lograr lo que desea ya que está otorgando el recorrido del directorio pero negando la lectura y escritura. Pero tenga en cuenta que si bien otros usuarios no pueden enumerar archivos /a/b, pueden acceder a los archivos si adivinan el nombre y los archivos tienen permisos suficientemente abiertos.

John
fuente
3

Si un usuario no puede acceder /a/b, no puede acceder a ningún archivo en /a/b/c. Los permisos en /a/b/cson irrelevantes ya que el recorrido del directorio se detiene en /a/b.

Si todo lo que desea es evitar que el directorio /a/baparezca en la lista, pero está bien que los usuarios accedan a los archivos /a/bsi adivinan un nombre de archivo, entonces puede hacer que sea /a/bejecutable pero no legible. En un directorio, el permiso de lectura solo controla el listado del contenido del directorio, mientras que el permiso de ejecución controla el acceso a las entradas de ese directorio.

# chmod u=rwx,go=x /a/b
# chmod u=rwx,go=rx /a/b/c
# echo 'hello' >/a/b/existingfile
# su bob -c 'ls -l /a/b'
ls: /a/b: Permission denied
# su bob -c 'cat /a/b/nosuchfile'
cat: /a/b/nosuchfile: No such file or directory
# su bob -c 'cat /a/b/existingfile'
hello
# su bob -c 'ls -l /a/b/c'
 contents of /a/b/

Si no desea que otros usuarios puedan acceder a los archivos, /a/bexcepto /a/b/c, puede exponer a /a/b/ctravés de otra vista, a través de un montaje de enlace .

# chmod u=rwx,go=x /a/b
# chmod u=rwx,go=rx /a/b/c
# mkdir /c
# mount --bind /a/b/c /c
# su bob -c 'ls /a/b/c'
ls: /a/b/c: Permission denied
# su bob -c 'ls -l /c'
 contents of /a/b/
Gilles 'SO- deja de ser malvado'
fuente