我知道这个问题已经讨论过了,但是通过阅读帖子我无法找到答案,因为有些人说“是的 umask 可以工作”,而其他人说“OpenSSH put 命令始终保留权限”
在此之前,准确地说:
internal-sftp子系统,-u 0002用于 umask-por-P选项从我一方面读到的内容:有很多方法可以为 SFTP 传输定义 umask:
-u的internal-sftp(或sftp-server)中,由于5.4的OpenSSHsftp-server(在其中我们明确设置了 umask - 这不适合 chrooted 环境顺便说一句)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)
Run Code Online (Sandbox Code Playgroud)
如果我更改的权限MYFILE,并MYDIR在客户端,并重新上传,我得到服务器端的新权限。
我也尝试了pam.d解决方案,但没有任何改变。
所以现在我很困惑:
从我测试的内容和我阅读的部分内容来看,我会说 OpenSSH 始终保留权限。但是由于有很多帖子说可以定义 umask,我可以想象我在测试配置中做错了事情。
我将不胜感激一些有经验的反馈。
谢谢你。
Mar*_*ryl 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。
所以实际上,如果您按照您的描述配置了系统,它应该可以工作。从我的盒子里看到证据(Ubuntu with OpenSSH 6.2p2)
Match user user2
ChrootDirectory /home/user2/chroot
ForceCommand internal-sftp -u 0077
AllowTcpForwarding no
PermitTunnel no
X11Forwarding no
Run Code Online (Sandbox Code Playgroud)
查看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
Run Code Online (Sandbox Code Playgroud)
顺便说一句,最新的 SFTP 规范定义了客户端和服务器关于 umask 的行为。如您所见,OpenSSH 实际上违反了这一点,尽管 OpenSSH 实现了 SFTP 版本 3,但尚未提及 umask。
7.6. 权限
...
服务器不应该对模式位应用“umask”;但应该设置客户端指定的模式位。客户端必须在发送之前对模式位应用适当的“umask”。
| 归档时间: |
|
| 查看次数: |
19789 次 |
| 最近记录: |