Eu estive procurando uma maneira de configurar o OpenSSH umask para 0027de 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/profileinformaçõ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/profileagora inclui umask 0027.
Indo ponto a ponto:
- sftp - Definir
-u 0027emsshd_configcomo 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 0027sobre sshd_configda 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/profilepor padrão, o que significaumask 0027na configuração atual.programa ssh hostname - mesma situação que scp .
Em suma, definir umask sftpaltera o resultado, mas não como deveria, ssh hostnamefunciona como a leitura esperada /etc/profilee ambos scpe ssh hostname programparece ter umask 0022codificado 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 opensshpacotes 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/profileou 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/profileafetaram 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 yesno seu sshd_config?
/etc/profile. Algo comoalias umask=/bin/true