35 votos

Cómo configurar el ssh del umask para todo tipo de conexiones

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:

  1. sftp
  2. scp
  3. ssh nombre de host
  4. 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 en sshd_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 significa umask 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.

14voto

Eric Noob Puntos 531

Aquí es una solución que te permitirá hacer lo que quiera en función de cada usuario. Utiliza sólo los nativos sshd funciones y no requieren la retirada del estiércol, con la mantenida localmente parches. Esta solución tiene la ventaja de la ForceCommand comportamiento de sshd para insertar un entorno de comandos de instalación en cada conexión ssh, y, a continuación, ejecute el comando original.

En primer lugar, crear una secuencia de comandos en algún lugar en su sistema con el siguiente contenido:

#!/bin/sh

umask 0027
exec /bin/sh -c "${SSH_ORIGINAL_COMMAND:-$SHELL}"

Para los fines de este ejemplo voy a asumir que usted ha llamado a este /usr/bin/umask-wrapper.

Ahora, usted tiene un par de opciones en la configuración de este. Si queremos que esto sea una configuración obligatoria para todos los usuarios (que me parece un poco raro), puede modificar su configuración de sshd para incluir los siguientes:

ForceCommand /usr/bin/umask-wrapper

Si sólo quieres que se aplican a algunos usuarios, puede utilizar una Match bloque (esto va al final de su sshd_config):

Match User user1,user2
ForceCommand /usr/bin/umask-wrapper

Si desea que el usuario controlable comportamiento, entonces usted puede utilizar el command= opción authorized_key archivo para seleccionar este comportamiento de teclas específicas. Por ejemplo, durante la prueba de esto he añadido una entrada para mi authorized_keys archivo que se ve algo como esto:

command="/home/lars/bin/umask-wrapper" ssh-rsa AAAAB3NzaC1 ... umask-test

Y aquí están algunos de los resultados de mi prueba:

El uso de ssh con ningún comando:

localhost$ ssh remotehost
remotehost$ touch umask-test/file1
remotehost$ ls -l umask-test/file1
-rw-r-----. 1 lars lars 0 Feb  2 06:02 file1

El uso de ssh con un comando:

localhost$ ssh remotehost touch umask-test/file2
localhost$ ssh remotehost ls -l umask-test/file2
-rw-r-----. 1 lars lars 0 Feb  2 06:03 file2

El uso de scp:

localhost$ touch file3
localhost$ ls -l file3
-rw-r--r--  1 lars  staff  0 Feb  2 06:03 file3
localhost$ scp file3 remotehost:umask-test/file3
localhost$ ssh remotehost ls -l umask-test/file3
-rw-r-----. 1 lars lars 0 Feb  2 06:03 file3

El uso de sftp:

localhost$ sftp remotehost
sftp> put file3 umask-test/file4
sftp> ls -l umask-test/file4
-rw-r-----    0 500      500             0 Feb  2 06:05 umask-test/file4

Y ahí lo tienen. Creo que este es el comportamiento que usted estaba buscando. Si usted tiene alguna pregunta acerca de esta solución, yo estaría encantado de proporcionar detalles adicionales.

5voto

Splash Puntos 60

Me tomó un enfoque ligeramente diferente a centralizar la configuración.

Este fue añadido a /etc/pam.d/common-session:

session    optional     pam_umask.so

Este fue modificado en /etc/login.defs:

UMASK           0027

4voto

poige Puntos 5395

Puedo sugerirle 2 cosas:

  1. pam_umask
  2. LD_PRELOAD contenedor (auto-escrito?)

2voto

Tim Puntos 21

Me he metido pam_umask para trabajar con ssh, pero no con scp o sftp.

El contenedor método también sirve de nada, sftp o scp. No estoy seguro de que 027 es un buen ejemplo, ya que la mayoría de las distribuciones tienen umask conjunto a la de ya. Intente con la 002 y ver si funciona.

1voto

DerfK Puntos 13616

Los programas que no establecen sus propias umask heredar el umask de la aplicación con la que empezó. Dejar de sshd completamente, establezca su umask a 0027, y luego comienza de nuevo. (Usted puede agregar el comando umask en el script de inicio para el futuro de los reinicios.)

Probado para trabajar con scp.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: