OpenSSH SFTP服务器在put命令(chrooted环境)后使用umask还是保留客户端权限?

我知道这个问题已经讨论过了,但是通过阅读post,我找不到答案,因为有些人说“是的,umask可以工作”,还有人说“OpenSSH put命令总是保留权限”

以前只是为了精确:

  • 我在RHEL 6.2上使用OpenSSH 5.9
  • 我已经使用internal-sftp子系统configuration了一个chroot的SFTP服务器,使用-u 0002作为umask
  • 我确切地说我不使用-p-P选项

从我读过的一方面来说:有许多方法可以为SFTP传输定义umask:

  • 从OpenSSH 5.4开始,selectinternal-sftp (或者sftp-server )的-u选项
  • 创build一个封装到sftp-server (我们明确地设置了Umask – 这不适合chrooted环境BTW)
  • pam.d/sshd文件中添加一个特定的configuration

另一方面,我读到:

OpenSSH SFTP客户端和服务器确实传输权限(作为扩展名),并在本地创build具有权限的远程文件。 AFAICT,没有办法禁用这种行为。

所以我做了以下testing:

在我的客户端上,我创build了具有权限600和700的文件MYFILE和目录MYDIR

然后用sftp命令:

 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) 

如果我在客户端更改MYFILEMYDIR权限,并再次上传,我在服务器端获得新的权限。

我也尝试了pam.d解决scheme,但它没有改变。

所以现在我很困惑:

从我testing的和我读的部分内容来看,我会说OpenSSH总是保留权限。 但是由于有许多post说umask可以被定义,我可以想象我在我的testingconfiguration中做了一个错误的事情。

我将不胜感激一些经验的反馈。

谢谢。

首先,umask是关于服务器而不是客户端的。 所以问是否put OpenSSH客户端命令使用umask是错误的。 由于SFTP上传的结果,您应该询问OpenSSH服务器在创build文件时是否使用了umask。

无论如何,OpenSSH SFTP客户端所做的是:

  • 没有-P标志,它要求服务器创build一个与本地文件具有相同权限的文件。 OpenSSH服务器然后(隐式地通过* nix规则)应用umask。

  • -P标志put一起,它启动相同,但上传完成后,客户端请求服务器显式(重新)设置权限为本地文件相同(“chmod”请求)。 对于“chmod”,umask不适用。

  • mkdir ,它会要求服务器创build一个权限为0777的目录。umask隐式应用。

无论如何,我相信umask 0002对权限为0600的文件没有影响,因为它们是互斥的。 你应该尝试你的umask对像0644权限的文件。

所以实际上,它应该可以工作,如果你有你的系统configuration你所描述的。 从我的盒子里看到证据(带有OpenSSH 6.2p2的Ubuntu)

 Match user user2 ChrootDirectory /home/user2/chroot ForceCommand internal-sftp -u 0077 AllowTcpForwarding no PermitTunnel no X11Forwarding no 

putput -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 

顺便说一句, 最新的SFTP规范定义了有关umask的客户端和服务器的行为。 正如你所看到的,OpenSSH实际上违反了这个规定,虽然OpenSSH实现了SFTP版本3,但是还没有提到umask。

7.6。 权限

服务器应该不应用'umask'的模式位; 但应该设置客户端指定的模式位。 在发送它们之前,客户端必须在模式位上应用适当的'umask'。