Primeiro, o umask é sobre o servidor e não o cliente. Então, perguntar se o comando put
do cliente OpenSSH usa umask está errado. Você deve perguntar se o servidor OpenSSH usa umask ao criar um arquivo como resultado do upload de SFTP.
De qualquer forma, o que o cliente SFTP do OpenSSH faz:
-
put
sem-P
flag, ele pede ao servidor para criar um arquivo com as mesmas permissões que o arquivo local possui. O servidor OpenSSH então (implicitamente por regras * nix) aplica o umask. -
put
com o sinal-P
, ele inicia o mesmo, mas depois que o upload é concluído, o cliente solicita ao servidor que (re) defina explicitamente as permissões para o mesmo que o arquivo local possui ("chmod "pedido". Para "chmod", o umask não se aplica. -
mkdir
, ele pede ao servidor para criar um diretório com permissões 0777. O umask aplica-se implicitamente.
Enfim, acredito que a umask 0002 não tenha nenhum efeito no arquivo com permissões 0600, já que estas são mutuamente exclusivas. Você deve tentar sua umask contra um arquivo com permissões como 0644.
Então, na verdade, deve funcionar se você tiver o seu sistema configurado como descreve. Veja evidências da minha caixa (Ubuntu com OpenSSH 6.2p2)
Match user user2
ChrootDirectory /home/user2/chroot
ForceCommand internal-sftp -u 0077
AllowTcpForwarding no
PermitTunnel no
X11Forwarding no
Veja a diferença nas permissões após put
vs. put -P
:
user1:~$ touch file.txt
user1:~$ ls -l
total 0
-rw-r--r-- 1 user1 ftpuser 0 Oct 23 15:34 file.txt
user1:~$ sftp user2@localhost
user2@localhost's password:
Connected to localhost.
sftp> cd somefolder
sftp> put file.txt
Uploading file.txt to /somefolder/file.txt
file.txt 100% 0 0.0KB/s 0:00
sftp> ls -l
-rw------- 1 1003 1001 0 Oct 23 15:35 file.txt
sftp> put -P file.txt
Uploading file.txt to /somefolder/file.txt
file.txt 100% 0 0.0KB/s 0:00
sftp> ls -l
-rw-r--r-- 1 1003 1001 0 Oct 23 15:34 file.txt
Btw, a mais recente especificação de SFTP define o comportamento do cliente e servidor em relação a umask. Como você pode ver, o OpenSSH na verdade viola isso, embora o OpenSSH implemente a versão 3 do SFTP que não tinha nenhuma menção à umask.
7.6. Permissions
...
The server SHOULD NOT apply a 'umask' to the mode bits; but should set the mode bits as specified by the client. The client MUST apply an appropriate 'umask' to the mode bits before sending them.