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
Respuestas:
Puedo sugerir probar 2 cosas:
fuente
sudo
o algosudo su
similar.Aquí hay una solución que le permitirá hacer lo que quiera por usuario. Utiliza solo
sshd
características nativas y no requiere mucking con parches mantenidos localmente. Esta solución aprovecha elForceCommand
comportamiento de sshd para insertar un script de configuración del entorno en cada conexión ssh y luego ejecuta el comando original.Primero, cree un script en algún lugar de su sistema con los siguientes contenidos:
A los fines de este ejemplo, supondré que lo has llamado
/usr/bin/umask-wrapper
.Ahora, tiene algunas opciones para configurar esto. Si desea que esta sea una configuración obligatoria para todos los usuarios (lo que parece un poco improbable), puede modificar su configuración sshd para incluir lo siguiente:
Si solo desea que esto se aplique a algunos usuarios, puede usar un
Match
bloque (esto va al final de susshd_config
):Si desea que este sea un comportamiento controlable por el usuario, puede usar la
command=
opción en unauthorized_key
archivo para seleccionar este comportamiento para claves específicas. Por ejemplo, al probar esto, agregué una entrada a miauthorized_keys
archivo que se parece a esto:Y aquí hay algunos resultados de mi prueba:
Usar
ssh
sin comando:Usando
ssh
con un comando:Utilizando
scp
:Utilizando
sftp
:Y ahí lo tienes. Creo que este es el comportamiento que estabas buscando. Si tiene alguna pregunta sobre esta solución, me complacerá brindarle detalles adicionales.
fuente
command=
De hecho, es una buena característica de SSH.Tomé un enfoque ligeramente diferente para centralizar la configuración.
Esto fue agregado a
/etc/pam.d/common-session
:Esto fue modificado en
/etc/login.defs
:fuente
He conseguido que pam_umask funcione con ssh, pero no con scp o sftp.
El método wrapper tampoco hace nada para sftp o scp. No estoy seguro de que 027 sea un buen ejemplo, ya que la mayoría de las distribuciones ya tienen umask configurado para eso. Pruebe con 002 y vea si eso funciona.
fuente
Los programas que no configuran su propia umask heredan la umask de la aplicación que la inició. Detenga sshd por completo, configure su umask en 0027 y luego vuelva a iniciarlo. (Puede agregar el comando umask en el script de inicio para futuros reinicios).
Probado para trabajar con scp.
fuente
umask 0027
(si leen/etc/profile
), pero reiniciar ssh no afecta a scp ni ssh.Si
pam_umask
no parece afectar sus sesiones SFTP, verifique siUsePam
está configuradoYes
en el/etc/ssh/sshd_config
archivo.Si ha deshabilitado la autenticación de contraseña y
UsePam
se configuró o se configuró de manera predeterminadaNo
. Es posible que desee configurarChallengeResponseAuthentication No
elsshd_config
archivo porque, de lo contrario, puede habilitar inadvertidamente una autenticación de contraseña a través de ese sistema.fuente
Una nota adicional a la respuesta del usuario188737 anterior:
Esto puede ser evidente, pero si lo que no se utiliza el openssh-server paquete, y ha manualmente compilado OpenSSH, asegúrese de que "habilitar el soporte PAM" pasando el
--with-pam
indicador de configuración.De lo contrario,
UsePAM=yes
en sshd_config, además de cualquier cambio,/etc/pam.d/*
será efectivamente ignorado porsshd
.Finalmente me di cuenta de por qué ninguna de las soluciones PAM recomendadas estaba teniendo pruebas de efecto a través de conexiones SFTP no interactivas ...
fuente
Dado que umask se hereda del proceso padre, en un sistema Slackware que usa
/etc/rc.d/rc.sshd
para iniciar / detener / reiniciar sshd, simplemente puede colocarloumask 0027
en una línea directamente encima de "sshd_start" o "sshd_restart", o alternativamente, en cualquier punto antes del La sección principal de ejecución comienza en/etc/rc.d/rc.sshd
:O, alternativamente, en la parte superior del archivo:
fuente
Acabo de probar una posible mejora en las opciones de sshd_config de larsks en solaris 11
Configure un grupo con los usuarios que se administrarán y mueva el script al archivo de configuración en sí mismo, en mi caso, quería establecer la umask en 0002.
la configuración resultante se convierte en ...
fuente
He estado luchando con este problema, específicamente con los permisos de archivo después de copiar un archivo usando scp , y finalmente se me ocurrió simplemente usar ssh para cambiar los permisos después de la copia.
Aquí está la solución:
localhost$ scp filename remotehost:umask-test/filename
localhost$ ssh remotehost "chmod go+r umask-test/filename"
Lo mejor de todo es que no se necesita acceso de root para realizar esta solución.
fuente