Eu estive procurando uma maneira de configurar o OpenSSH umask para 0027
de uma forma consistente em todos os tipos de conexão.
Por tipos de conexão que estou me referindo:
- sftp
- scp
- ssh hostname
- programa ssh hostname
A diferença entre 3. e 4. é que o primeiro inicia um shell que geralmente lê as /etc/profile
informações enquanto o segundo não.
Além disso, lendo este post , tomei conhecimento da opção -u que está presente nas versões mais recentes do OpenSSH. No entanto, isso não funciona.
Devo também acrescentar que /etc/profile
agora inclui umask 0027
.
Indo ponto a ponto:
- sftp - Definir
-u 0027
emsshd_config
como mencionado aqui , não é suficiente.
Se eu não definir esse parâmetro, o sftp usará por padrão umask 0022
. Isso significa que se eu tiver os dois arquivos:
-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
Quando uso o sftp para colocá-los na máquina de destino, recebo:
-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
No entanto, quando eu definir -u 0027
sobre sshd_config
da máquina de destino eu realmente começar:
-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
o que não é esperado, já que deveria 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
Alguém entende por que isso acontece?
scp - Independentemente do que está configurado para sftp , as permissões são sempre
umask 0022
. Atualmente, não tenho idéia de como alterar isso.ssh hostname - não há problema aqui, pois o shell lê
/etc/profile
por padrão, o que significaumask 0027
na configuração atual.programa ssh hostname - mesma situação que scp .
Em suma, definir umask sftp
altera o resultado, mas não como deveria, ssh hostname
funciona como a leitura esperada /etc/profile
e ambos scp
e ssh hostname program
parece ter umask 0022
codificado em algum lugar.
Qualquer visão sobre qualquer um dos pontos acima é bem-vinda.
EDIT: Eu gostaria de evitar patches que exigem compilação manual do openssh. O sistema está executando o Ubuntu Server 10.04.01 (lucid) LTS com openssh
pacotes da maverick.
Resposta: Conforme indicado por poige, usar pam_umask fez o truque.
As mudanças exatas foram:
Linhas adicionadas a /etc/pam.d/sshd
:
# Setting UMASK for all ssh based connections (ssh, sftp, scp)
session optional pam_umask.so umask=0027
Além disso, para afetar todos os shells de login, independentemente de serem de origem /etc/profile
ou não, as mesmas linhas também foram adicionadas /etc/pam.d/login
.
Edição : Depois de alguns dos comentários retestei este problema.
Pelo menos no Ubuntu (onde eu testei), parece que se o usuário tiver um umask diferente definido nos arquivos init do shell (.bashrc, .zshrc, ...), o umask do PAM será ignorado e o usuário definido como umask. Alterações no não /etc/profile
afetaram o resultado, a menos que o usuário explique explicitamente essas alterações nos arquivos init.
Não está claro neste momento se esse comportamento ocorre em todas as distros.
UsePAM yes
no seu sshd_config?
/etc/profile
. Algo comoalias umask=/bin/true