Como colocar umask desejado com SFTP?

23

Eu tenho um servidor SFTP (openssh / sftp-server) e gostaria de definir umask 002 para usuários que usam este serviço. Tentei configurar o PAM (pam.d / common-session) e o .profile para cada usuário, mas sem sorte.

Com o login SSH, tudo está bem, mas quando tento com SFTP (com gFTP), tenho o 022 umask definido.

Eu já tentei usar um invólucro para o servidor sftp que está alterando o umask antes de chamar o servidor sftp, sem sorte.

Qualquer ajuda? Muito obrigado!

mat_jack1
fonte

Respostas:

25

Desde o OpenSSH 5.4p1, eu acho, você pode usar a opção "-u", por exemplo:

Subsystem sftp /usr/lib/openssh/sftp-server -u 022

Na página do manual:

 -u umask
         Sets an explicit umask(2) to be applied to newly-created files
         and directories, instead of the user's default mask.
Weboide
fonte
isso é bom!! Vou dar uma olhada o mais rápido possível e relatar minhas descobertas :)
mat_jack1
5
Para aqueles sem a opção -u, isso funciona:Subsystem sftp /bin/sh -c 'umask 0002; /usr/lib/openssh/sftp-server'
Steve Clay
1
Boa solução. Ele resolve o problema com shells e aplicativos do cliente, como o CyberDuck, que definem suas permissões padrão, independentemente do sistema umask. Achei útil garantir que cada aplicativo cliente defina as permissões corretas para permitir que meus usuários trabalhem juntos em arquivos de grupo. Pode ser útil adicionar também que essa configuração não impedirá que os usuários personalizem as permissões de arquivo, se desejarem.
gerlos
Uma última coisa a acrescentar: se você precisa apenas do recurso sftp e não precisa fornecer acesso ao shell dos usuários, considere também usar rssh em vez de bash para seus shells e definir umask padrão para eles no /etc/rssh.conf . Isso pode tornar seu servidor mais seguro
gerlos 31/03
7

Espero que isso possa salvar horas de frustração de outra pessoa ...

Se você estiver usando um aplicativo GUI SFTP, verifique suas preferências para definir permissões no upload.

Eu tinha tentado todas as soluções acima, e o aplicativo acabou de substituí-las.

Malcolm
fonte
^^ Sim, há muito tempo que conecto a umask na conexão sftp, criando um script semelhante à solução do Weboide. Recentemente, eu estava coçando a cabeça por que isso não parecia funcionar tão bem como no passado. Bem, aparentemente, em algum momento, uma atualização no meu cliente SFTP fez com que ele explicitamente definisse o umask depois de conectar-se ao ssh, então vá em frente.
precisa saber é o seguinte
Não são apenas GUIs. Nem clientes. Levei muito tempo para descobrir que o arquivo de teste que eu enviei tinha 0600 que o cliente (OpenSSH sftp) copiou para o lado remoto.
Xebeche
Obrigado! Passei tanto tempo brincando com permissões para nada.
Tania Rascia
2

Depois de muitas horas tentando aplicar vários hacks e correções, encontrei uma solução adequada!

Há um patch para SSH que permite escolher o umask que você deseja para o SFTP. Você pode baixá-lo aqui: http://sftpfilecontrol.sourceforge.net/

Para mim (OpenSSH_5.2p1 + sftpfilecontrol-v1.3, OpenSSL 0.9.8g 19 de outubro de 2007) está funcionando perfeitamente!

mat_jack1
fonte
2
Apenas para observar que a opção '-u' para definir o umask está disponível no OpenSSH desde 5.4p1, veja minha resposta mais abaixo.
Weboide
2

No arquivo de configuração ssh, você também pode usar isso para definir o modo do arquivo especificamente (substituindo qualquer chmod que o cliente possa tentar configurar). Aqui estou usando internal-sftp, mas acho que seria o mesmo para sftp-server:

ForceCommand internal-sftp -u 0022   
cloudranger
fonte
0

Para citar esta mensagem :

Eu consegui isso funcionando adicionando uma linha "umask 007" no /etc/init.d/ssh.

O Bash usa os .profileshells de login interativo. Eu não acho que sftpconta como um. Você pode definir o umask /etc/bash.bashrcou ~/.bashrcse a dica acima não funcionar ou se desejar um controle mais refinado.

Pausado até novo aviso.
fonte
2
obrigado pela resposta, mas eu já tinha no ssh umask 002 (tentei também 0002) e não está funcionando :( também o bashrc não é levado em consideração, como em um cliente SFTP externo, não acho que o bash seja usado. Se eu entrar directamente com ssh está tudo bem meu problema é apenas com clientes SFTP Graças..!
mat_jack1
Opa, você está certo. Não sei por que estava pensando em Bash estar envolvido.
Pausado até novo aviso.
0

Consulte esta pergunta para encontrar uma solução simples que não exija versões específicas do openssh nem patches personalizados.

Unode
fonte