![为什么通过 sftp 上传文件时 umask 被忽略?](https://linux22.com/image/133559/%E4%B8%BA%E4%BB%80%E4%B9%88%E9%80%9A%E8%BF%87%20sftp%20%E4%B8%8A%E4%BC%A0%E6%96%87%E4%BB%B6%E6%97%B6%20umask%20%E8%A2%AB%E5%BF%BD%E7%95%A5%EF%BC%9F.png)
上传到远程系统的文件的权限存在奇怪的问题。
在本地,文件index2.html是chmod 664:
acoder@acoder-local ~ $ ll index2.html
-rw-rw-r-- 1 acoder acoder 29 May 17 14:46 index2.html
将同一文件上传到远程系统后,远程目录的权限显示:
-rw-r--r--. 1 acoder acoder 3657 May 17 14:43 index2.html
我首先以为远程系统上的 umask 设置不正确,但是......
[acoder@remote public_html]$ umask
0002
为了进行比较,如果我触摸远程系统上的文件,则会显示正确的权限(对于给定的 umask):
-rw-rw-r--. 1 acoder acoder 0 May 17 14:44 index3.html
那么,通过sftp上传的文件的权限是如何设置的呢?为什么通过 sftp 放置文件时 umask 会被忽略?
答案1
SFTP 根本不经过登录 shell。它直接由 SSH 服务器管理。如果您期望的 umask 是由/etc/profile
、或其他一些 shell 初始化文件设置的~/.profile
,~/.bashrc
则它不适用于 SFTP。
您可以通过以下方式设置 umask聚丙烯酰胺模块pam_umask
。 SSH 服务器的设置将应用于 SSH shell 会话(除非被 shell 初始化文件覆盖)和 SFTP 会话。
Subsystem sftp
您还可以通过编辑行/etc/sshd_config
以将-u
选项传递给专门设置 SSH 的 umasksftp-server
。
答案2
要通过 PAM 执行此操作,按照 Gilles 的建议,所需要做的就是将所需的 umask 添加到用户的条目中,/etc/passwd
如下所示:
usermod -c ,,,,umask=002 acoder
虽然这个方法取代了整个GECOS领域。因此,任何潜在的现有信息也应包含在上述命令中。
pam_umask
如果使用该模块,这应该可以工作。 Fedora 和 CentOS Stream 9 上似乎默认是这样的 ( /etc/pam.d/postlogin
)。