Permiso denegado a CD en un directorio a pesar de que los permisos son correctos

13

Esto es muy extraño. Ingresé a un cuadro de Linux (RHEL) como usuario 'g', haciendo un ls -lahshow

drwxrwxrwx 6 g    g    4.0K Jun 23 13:27 .
drwxrw-r-x 6 root root 4.0K Jun 23 13:15 ..
-rwxrw---- 1 g    g     678 Jun 23 13:26 .bash_history
-rwxrw---- 1 g    g      33 Jun 23 13:15 .bash_logout
-rwxrw---- 1 g    g     176 Jun 23 13:15 .bash_profile
-rwxrw---- 1 g    g     124 Jun 23 13:15 .bashrc
drw-r----- 2 g    g    4.0K Jun 23 13:25 .ssh

Entonces, el usuario 'g' en el grupo 'g' / debería / poder leer y escribir en el directorio .ssh, pero si lo hago ls -lah .ssh/, obtengols: .ssh/: Permission denied . También obtengo permiso denegado si intentocat cualquier archivo en el directorio

Si entro como root y cambio los permisos a 700,744 , 766o cualquier cosa siempre que el permiso 'usuario' es 7 funciona y lo que pueda CD y LS el directorio y los archivos dentro.

id g devoluciones

uid=504(g) gid=506(g) groups=506(g)

Editar:

Copié estos permisos exactamente en otro cuadro idéntico y no hay problema. Puedo cdingresar a un directorio sin ejecutar permisos.

Mancha
fuente

Respuestas:

27

El directorio se requiere el conjunto de bit de ejecución con el fin de que la introduzca. No sé qué probaste, pero no puedes ingresar a un directorio sin el bit de ejecución o leer archivos en él:

$ mkdir foo
$ echo "baz" > foo/bar
$ chmod 660 foo
$ cd foo
bash: cd: foo: Permission denied
$ cat foo/bar
cat: foo/bar: Permission denied

Es decir, a menos que su proceso tenga el conjunto de capacidades CAP_DAC_OVERRIDE POSIX (como root), que le permite ingresar directorios sin el conjunto de bits ejecutable, iirc.

Básicamente, debe intentar mantener su directorio .ssh en 700, y todo lo que contiene en 600, solo para estar seguro. La página de manual de ssh proporciona instrucciones por archivo sobre las propiedades requeridas y los modos de permiso para los archivos en ~ / .ssh.

wzzrd
fuente
17

Un directorio requiere permiso de ejecución para cdingresar a él. Este es el comportamiento que se espera.

Grahamux
fuente
Pero tampoco puedo tener catningún archivo en el directorio con los mismos permisos, no deberían necesitar permisos de ejecución para leerlo
Difuminar
44
Necesita ejecutar permisos en el directorio para acceder a cualquier cosa dentro de un directorio. Esta respuesta es correcta.
EightBitTony
1
@samarudge Considere xen un directorio para darle permiso para "estar en" ese directorio. Sin él, no puede cd al directorio, no puede ver lo que hay en el directorio, no puede abrir lo que hay en el directorio. Si no tiene permiso para estar en la biblioteca, no puede leer los libros allí.
DerfK
Si agrego permisos de ejecución al directorio (744 al directorio, 644 a los archivos dentro) recibo un error de SSHD que dice que los permisos del directorio .ssh deben ser 644 o inferiores. Pero con los permisos que el 644 que dice que no puede tener acceso .ssh / authorized_keys
Dedo
* Dice específicamente '.ssh / directorio', no los archivos
Smudge
2

Para ls o cd en un directorio, necesita ejecutar permisos. Si bien no los tiene, realmente no puede inspeccionar el contenido y ver los permisos de los archivos en su interior, por lo que lo más probable es que los permisos de los archivos sean incorrectos, si no puede capturarlos.

El permiso de directorio de 700 y los permisos de archivo 644 están perfectamente configurados para mí.

Soleado
fuente
Los permisos para los archivos son 644, el propietario de los archivos es g: g, por lo que los permisos de los archivos son correctos. Si agrego permisos de ejecución al directorio SSHD dice que necesito dejar los permisos a 644 o menos
Smudge
Los comentarios de Sunny son correctos - el voto
negativo es
0

Supongo que este es un problema de archivo ssh ahora? no es un problema general de chmod?

Si es así, inténtalo

$chmod go-w ~/
$chmod 700 ~/.ssh
$chmod 600 ~/.ssh/*
$chmod 600 ~/.ssh/.*
AndyM
fuente
Otro problema, podría ser el punto de montaje, ¿está montado desde otro lugar, CIFS, NFS?
AndyM
0

Los directorios necesitan un conjunto de x bits (para que el directorio se vea como bit de búsqueda) para abrir. Así que uso el árbol para poder obtener solo el conjunto de carpetas y evitar la pesadilla de tener todos los archivos configurados como ejecutables (la opción para el árbol es -d List directories only.):

sudo tree -faid here_goes_your_directory xargs -L1 -I{} sudo chmod 755  "{}"

¡¡¡Advertencia!!! deberías tener esto en consideración:

  • el uso de chmod o chown recursive en el /directorio raíz o en los directorios del sistema destruirá su sistema operativo (en realidad, cualquier cosa recursiva en el /directorio o directorios del sistema es peligrosa)

  • esta no es una buena práctica de seguridad para establecer permisos masivos como ese

Eduard Florinescu
fuente