Eu sei que essa pergunta já foi discutida, mas lendo as postagens não consegui descobrir as respostas, porque alguns disseram "yes umask pode funcionar" e outros dizem "OpenSSH put command always preserve permissions"
Antes de tudo, apenas para ser preciso:
- Eu uso o OpenSSH 5.9 no RHEL 6.2
- Eu configurei um servidor SFTP com chroot, usando o
internal-sftp
subsistema, com-u 0002
para umask - Preciso não usar a opção
-p
ou-P
Pelo que li por um lado: existem muitas maneiras de definir umask para transferências SFTP:
- opção
-u
deinternal-sftp
(ousftp-server
), desde o OpenSSH 5.4 - crie um wrapper para
sftp-server
(no qual definimos explicitamente o umask - isso não se encaixa no ambiente chrootado) - adicione uma configuração específica no
pam.d/sshd
arquivo
Por outro lado, eu li:
O cliente e o servidor SFTP do OpenSSH transferem as permissões (como uma extensão) e criam o arquivo remoto com as permissões no lado local. AFAICT, não há como desativar esse comportamento.
Então eu fiz o seguinte teste:
No meu cliente, criei arquivo MYFILE
e diretório MYDIR
com permissões 600 e 700.
Depois, com os sftp
comandos:
mkdir => the new directory has permissions following the umask (OK)
put MYFILE => MYFILE has same permissions as on client (KO)
put -r MYDIR => MYDIR has same permissions as on client (KO)
Se eu alterar as permissões de MYFILE
e MYDIR
no lado do cliente, e fazer upload novamente, eu recebo as novas permissões no lado do servidor.
Eu tentei a pam.d
solução também, mas nada mudou.
Então agora estou confuso:
Pelo que testei e parte do que li, eu diria que o OpenSSH sempre preserva as permissões. Mas como existem muitas postagens dizendo que uma umask pode ser definida, posso imaginar que fiz algo errado nas minhas configurações de teste.
Eu gostaria de receber algum feedback experiente.
Obrigado.
The server SHOULD NOT apply a 'umask'
só se aplica quando o cliente envia informações de permissão . Quando o cliente não envia informações de permissão, o comportamento pretendido é aplicar uma umask!