He estado buscando una manera de configuración de OpenSSH máscara de usuario a 0027
de una manera consistente a través de todos los tipos de conexión.
Por tipos de conexión me refiero a:
- sftp
- scp
- nombre de host ssh
- programa de nombre de host ssh
La diferencia entre 3. y 4. es que el primero inicia un shell que generalmente lee la /etc/profile
información mientras que el segundo no.
Además, al leer esta publicación, me di cuenta de la opción -u que está presente en las versiones más recientes de OpenSSH. Sin embargo, esto no funciona.
También debo agregar que /etc/profile
ahora incluye umask 0027
.
Yendo punto por punto:
- SFTP - Configuración
-u 0027
ensshd_config
como se ha mencionado aquí , no es suficiente.
Si no configuro este parámetro, sftp usa de forma predeterminada umask 0022
. Esto significa que si tengo los dos archivos:
-rwxrwxrwx 1 user user 0 2011-01-29 02:04 execute
-rw-rw-rw- 1 user user 0 2011-01-29 02:04 read-write
Cuando uso sftp para ponerlos en la máquina de destino, en realidad obtengo:
-rwxr-xr-x 1 user user 0 2011-01-29 02:04 execute
-rw-r--r-- 1 user user 0 2011-01-29 02:04 read-write
Sin embargo, cuando me puse -u 0027
en sshd_config
la máquina de destino en realidad me sale:
-rwxr--r-- 1 user user 0 2011-01-29 02:04 execute
-rw-r--r-- 1 user user 0 2011-01-29 02:04 read-write
lo cual no se espera, ya que en realidad debería ser:
-rwxr-x--- 1 user user 0 2011-01-29 02:04 execute
-rw-r----- 1 user user 0 2011-01-29 02:04 read-write
Alguien entiende por qué sucede esto?
scp : independientemente de lo que está configurado para sftp , los permisos son siempre
umask 0022
. Actualmente no tengo idea de cómo alterar esto.nombre de host ssh : no hay problema aquí ya que el shell lee
/etc/profile
de forma predeterminada, lo que significaumask 0027
en la configuración actual.programa de nombre de host ssh : la misma situación que scp .
En resumen, configurar umask en sftp
altera el resultado, pero no como debería, ssh hostname
funciona como se esperaba /etc/profile
y ambos, scp
y ssh hostname program
parece que se ha umask 0022
codificado en alguna parte.
Cualquier idea sobre cualquiera de los puntos anteriores es bienvenida.
EDITAR: Me gustaría evitar parches que requieran compilar manualmente openssh. El sistema ejecuta Ubuntu Server 10.04.01 (lúcido) LTS con openssh
paquetes de Maverick.
Respuesta: Como lo indica poige, el uso de pam_umask hizo el truco.
Los cambios exactos fueron:
Líneas agregadas a /etc/pam.d/sshd
:
# Setting UMASK for all ssh based connections (ssh, sftp, scp)
session optional pam_umask.so umask=0027
Además, para afectar a todos los shells de inicio de sesión, independientemente de si se originan /etc/profile
o no, también se agregaron las mismas líneas /etc/pam.d/login
.
EDITAR : después de algunos de los comentarios volví a probar este problema.
Al menos en Ubuntu (donde probé) parece que si el usuario tiene un conjunto de umask diferente en los archivos de inicio de su shell (.bashrc, .zshrc, ...), se ignora la máscara de usuario de PAM y se usa la máscara de usuario definida en su lugar. Los cambios /etc/profile
no afectaron el resultado a menos que el usuario explícitamente obtenga esos cambios en los archivos de inicio.
No está claro en este momento si este comportamiento ocurre en todas las distribuciones.
UsePAM yes
en tu sshd_config?
/etc/profile
. Algo así comoalias umask=/bin/true