He estado buscando una manera de configurar OpenSSH umask a 0027
, en forma consistente a través de todos los tipos de conexión.
Por tipos de conexión de a que me refiero:
- sftp
- scp
- ssh nombre de host
- ssh nombre de host del programa
La diferencia entre los 3. y 4. es que el primero se inicia un shell que normalmente lee el /etc/profile
información mientras que el segundo no.
Además, mediante la lectura de este post me he enterado de que la opción-u que está presente en las nuevas versiones de OpenSSH. Sin embargo, esto no funciona.
Debo agregar también que /etc/profile
ahora incluye umask 0027
.
Vamos punto por punto:
- sftp - Establecer
-u 0027
ensshd_config
como se ha mencionado aquí, no es suficiente.
Si no establece este parámetro, sftp utiliza por defecto umask 0022
. Esto significa que si yo 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 puedo usar sftp para ponerlos en el equipo de destino que en realidad obtener:
-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 a -u 0027
a sshd_config
de el equipo de destino que en realidad obtener:
-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
que no es el esperado, ya que realmente 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
Nadie entiende por qué sucede esto?
scp - Independientemente de lo que el programa de instalación para sftp, los permisos son siempre
umask 0022
. Actualmente tengo ni idea de cómo alterar esto.ssh nombre de host - no hay problema aquí desde el shell lee
/etc/profile
por defecto, lo que significaumask 0027
en la configuración actual.ssh nombre de host del programa - la misma situación como scp.
En suma, la configuración de umask en sftp
altera el resultado, pero no como debería, ssh hostname
funciona como se espera la lectura de /etc/profile
y tanto scp
y ssh hostname program
parecen tener umask 0022
codificado en algún lugar.
Conocimientos en alguno de los puntos anteriores es bienvenido.
EDIT: me gustaría evitar los parches que requieren manualmente la compilación de openssh. El sistema se está ejecutando el Servidor de Ubuntu 10.04.01 (lucid) LTS con openssh
paquetes de maverick.
Respuesta: Como se indica por poige, utilizando pam_umask hizo el truco.
Los cambios exactos fueron:
Las líneas añadidas a /etc/pam.d/sshd
:
# Setting UMASK for all ssh based connections (ssh, sftp, scp)
session optional pam_umask.so umask=0027
También, con el fin de afectar a todos los shells de inicio de sesión, independientemente de si la fuente /etc/profile
o no, en la misma línea también se añadieron a /etc/pam.d/login
.
EDIT: Después de que algunos de los comentarios que he vuelto a probar esta cuestión.
Al menos en Ubuntu (donde he probado) me parece que si el usuario tiene un diferente umask establece en su shell de inicio (init) archivos (.bashrc, .zshrc como,...), la PAM umask es ignorado y el definido por el usuario umask utiliza en su lugar. Cambios en /etc/profile
¿no afectar el resultado, a menos que el usuario explícitamente las fuentes de los cambios en los ficheros de inicio.
No está claro en este momento si este comportamiento sucede en todas las distribuciones.