为什么通过 sftp 上传文件时 umask 被忽略?

为什么通过 sftp 上传文件时 umask 被忽略?

上传到远程系统的文件的权限存在奇怪的问题。

在本地,文件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)。

相关内容