Esta es la contestación más válida que te podemos dar, pero primero estúdiala detenidamente y valora si es compatible a tu proyecto.
Solución:
Solución 1:
Puedo sugerir probar 2 cosas:
- pam_umask
- Envoltorio LD_PRELOAD (¿autoescrito?)
Solución 2:
Aquí hay una solución que le permitirá hacer lo que quiera por usuario. Solo usa nativo sshd
características y no requiere jugar con parches mantenidos localmente. Esta solución aprovecha la ForceCommand
comportamiento de sshd para insertar un script de configuración del entorno en cada conexión ssh y luego ejecutar el comando original.
Primero, cree un script en algún lugar de su sistema con los siguientes contenidos:
#!/bin/sh
umask 0027
exec /bin/sh -c "$SSH_ORIGINAL_COMMAND:-$SHELL"
A los efectos de este ejemplo, supondré que ha llamado a este /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 de sshd para incluir lo siguiente:
ForceCommand /usr/bin/umask-wrapper
Si solo desea que esto se aplique a algunos usuarios, puede utilizar un Match
bloque (esto va al final de su sshd_config
):
Match User user1,user2
ForceCommand /usr/bin/umask-wrapper
Si desea que este sea un comportamiento controlable por el usuario, puede usar el command=
opción en un authorized_key
archivo para seleccionar este comportamiento para keys. Por ejemplo, mientras probaba esto, agregué una entrada a mi authorized_keys
archivo que se parece a esto:
command="/home/lars/bin/umask-wrapper" ssh-rsa AAAAB3NzaC1 ... umask-test
Y aquí están algunos resultados de mi prueba:
Utilizando ssh
sin 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
Utilizando 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
Utilizando 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
Utilizando 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 tienes. Creo que este es el comportamiento que estabas buscando. Si tiene alguna pregunta sobre esta solución, estaré encantado de proporcionarle detalles adicionales.
Solución 3:
Tomé un enfoque ligeramente diferente para centralizar la configuración.
Esto fue añadido a /etc/pam.d/common-session
:
session optional pam_umask.so
Esto fue modificado en /etc/login.defs
:
UMASK 0027
Solución 4:
Conseguí que pam_umask funcione con ssh, pero no con scp o sftp.
El método contenedor 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.
Puntuaciones y reseñas
Recuerda algo, que te concedemos valorar esta crónica .