¿Importan los permisos del directorio principal al acceder a un subdirectorio?

160

Si tengo una carpeta raíz con algún permiso restrictivo, digamos 600, y si las carpetas / archivos secundarios tienen permiso 777, ¿todos podrán leer / escribir / ejecutar el archivo secundario aunque la carpeta raíz tenga 600?

Ken Li
fuente
12
Tenga en cuenta que chmodding un directorio de 600 hace que sea inaccesible a incluso el propietario, ya que necesita el permiso de ejecución a chdir a que ...
Shadur

Respuestas:

183

La regla precisa es: puede atravesar un directorio si y solo si tiene permiso de ejecución.

Entonces, por ejemplo, para acceder dir/subdir/file, necesita ejecutar permisos diry dir/subdir, además de los permisos activados filepara el tipo de acceso que desea. Al entrar en casos de esquina, no estoy seguro de si es universal que necesites permiso de ejecución en el directorio actual para acceder a un archivo a través de una ruta relativa (lo haces en Linux).

La forma en que accede a un archivo es importante. Por ejemplo, si tiene permisos de ejecución activados /foo/barpero no activados /foo, pero su directorio actual sí /foo/bar, puede acceder a los archivos a /foo/bartravés de una ruta relativa pero no a través de una ruta absoluta. No puede cambiar a /foo/baren este escenario; presumiblemente se ha realizado un proceso más privilegiado cd /foo/barantes de no ser privilegiado. Si un archivo tiene múltiples enlaces duros, la ruta que utiliza para acceder a él determina sus restricciones de acceso.

Los enlaces simbólicos no cambian nada. El kernel utiliza los derechos de acceso del proceso de llamada para atravesarlos. Por ejemplo, si se symtrata de un enlace simbólico al directorio dir, debe ejecutar permiso dirpara acceder sym/foo. Los permisos en el enlace simbólico en sí mismo pueden o no importar dependiendo del sistema operativo y el sistema de archivos (algunos los respetan, otros los ignoran).

Eliminar el permiso de ejecución del directorio raíz restringe efectivamente a un usuario a una parte del árbol de directorios (en el que debe cambiar un proceso más privilegiado). Esto requiere que las listas de control de acceso sean de cualquier uso. Por ejemplo, si /y /homeestá fuera de los límites de joe( setfacl -m user:joe:0 / /home) y /home/joees joeel directorio de inicio, entonces joeno podrá acceder al resto del sistema (incluida la ejecución de scripts de shell /bin/sho binarios vinculados dinámicamente que necesitan acceder /lib, por lo que usted " d necesita profundizar para un uso práctico, por ejemplo setfacl -m user:joe:0 /*; setfacl -d user:joe /bin /lib).

El permiso de lectura en un directorio da derecho a enumerar las entradas. Otorgar permisos de ejecución sin otorgar permisos de lectura ocasionalmente es útil: los nombres de las entradas sirven como contraseñas para acceder a ellas. No se me ocurre ningún uso para dar permiso de lectura o escritura a un directorio sin permiso de ejecución.

Gilles
fuente
32

No. El permiso de la carpeta raíz limita el permiso de los archivos secundarios. Puedes probarlo.

$ mkdir rootdir
$ touch ./rootdir/childfile
$ chmod 777 ./rootdir/childfile
$ chmod 600 rootdir
$ cat ./rootdir/childfile

Entiendo esto:

$ cat: ./rootfolder/childfile: permission denied
goovim
fuente
4

Puede hacer que el directorio secundario se pueda escribir, incluso el directorio principal no lo es. Hago esto para grupos.

Por ejemplo: el directorio principal es propiedad del codificador de grupo

drwxr-sr-x

directorio hijo

drwxrwsr-x

Usted (cualquier miembro del grupo codificador) aún puede escribir en el directorio secundario pero no en el directorio principal.

Kemin Zhou
fuente
1

Puede crear el enlace rígido para acceder al archivo incluso si no tiene un privilegio de ejecución en el directorio principal. Pero el problema aquí es que debe crear el enlace duro antes de perder su privilegio de ejecución en el directorio principal

$ ln foo/bar/test_privs privs_test_checking
Kamal
fuente