在放置命令(chroot环境)后,OpenSSH SFTP服务器是否使用umask或保留客户端权限?


13

我知道这个问题已经讨论过了,但是通过阅读帖子我无法弄清楚答案,因为有些人说“是umask可以工作”,而另一些人说“ OpenSSH put命令始终保留权限”

只是为了精确起见:

  • 我在RHEL 6.2上使用OpenSSH 5.9
  • 我已经使用internal-sftp子系统配置了chroot式SFTP服务器,并使用-u 0002了umask
  • 我精确地说我不使用-por -P选项

一方面,我读过:有很多方法可以为SFTP传输定义umask:

  • 选项-uinternal-sftp(或sftp-server)中,由于5.4的OpenSSH
  • 创建一个包装器sftp-server(我们在其中明确设置了umask-这不适用于chroot环境btw)
  • pam.d/sshd文件中添加特定的配置

另一方面,我读到:

OpenSSH SFTP客户端和服务器会传输权限(作为扩展名),并在本地使用权限创建远程文件。AFAICT,无法禁用此行为。

所以我做了以下测试:

在我的客户端上,我创建了具有权限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)

如果在客户端更改了MYFILE和的权限MYDIR,然后再次上载,则会在服务器端获得新的权限。

我也尝试过该pam.d解决方案,但没有改变。

所以现在我很困惑:

从我的测试和阅读的内容中,我会说OpenSSH始终保留权限。但是由于有很多帖子说可以定义umask,所以我可以想象我在测试配置中做错了什么。

我希望能得到一些经验丰富的反馈。

谢谢。

Answers:


12

首先,umask是关于服务器而不是客户端的。因此,询问putOpenSSH客户端命令是否使用umask是错误的。您应该询问,由于SFTP上传,OpenSSH服务器在创建文件时是否使用umask。

无论如何,OpenSSH SFTP客户端做什么:

  • put不带-P标志的服务器,它要求服务器创建一个与本地文件具有相同权限的文件。然后,OpenSSH服务器(暗含* nix规则)将应用umask。

  • put带有该-P标志的文件,它的启动过程相同,但是在上传完成后,客户端要求服务器将权限显式(重新)设置为与本地文件相同的权限(“ chmod”请求)。对于“ chmod”,umask不适用。

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

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

因此,实际上,如果按照您的描述配置了系统,它应该可以工作。从我的盒子中查看证据(带有OpenSSH 6.2p2的Ubuntu)

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

putvs. 之后查看权限的不同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

顺便说一句,最新的SFTP规范定义了客户端和服务器关于umask的行为。如您所见,尽管OpenSSH实现了尚未提及umask的SFTP版本3,但它实际上违反了该规定。

7.6。权限

...

服务器不应该将“ umask”应用于模式位;但应按照客户端指定的方式设置模式位。客户端必须在发送模式位之前对其应用适当的“ umask”。


我已经尝试了许多不同的权限,一开始,我在客户端的目录为755,想改为775。但这没有用。通过阅读文档,我确实同意-P的要求,但是即使没有该标志,我也始终在服务器上获得与客户端相同的权限(无论权限如何)
drkzs 2014年

感谢您的发言,我尝试改善标题并更正某些术语
drkzs 2014年

它应该实际工作,请参阅我的更新。
Martin Prikryl 2014年

是的,您的示例确实可行...但是,如果将umask更改为0002,它将不再有效。也许这个帖子提出了同样的问题?除了我在openssh5.9中而且该umask选项应该起作用的事实。与您的SSHD配置和我的SSHD配置之间的区别在于,我不使用ForceCommand,因此我在子系统行中指定了umask。(我将尝试发布配置和结果,但网络测试不容易实现)
drkzs 2014年

1
请注意:The server SHOULD NOT apply a 'umask'在客户端发送权限信息时适用。当客户端不发送许可信息时,应采取的行为是应用umask!
heiglandreas 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.