使用 SFTP 上传的文件没有正确的权限

使用 SFTP 上传的文件没有正确的权限

当我尝试使用 SFTP 将文件上传到服务器时遇到了一个奇怪的问题。

为了实现最大程度的安全,我使用禁用 shell(“/bin/false”)的用户上传文件,但上传的文件的模式为 640,这不是我想要的(本地文件模式为 664)。

然而,当我为同一个用户启用 shell“/bin/bash”时,我得到了正确的模式 664。

我不太明白这里发生了什么,为什么禁用 shell 会改变上传文件的模式?

我的 sshd 配置:

Port 22
Protocol 2
AcceptEnv LANG LC_*
UsePAM yes
UseDNS no
Subsystem sftp internal-sftp

答案1

由于没有有效的 shell,系统默认的 umask 不会被应用/使用。

你可以把你的用户放在一个组中,然后通过文件强制执行一些操作/etc/sshd_config,包括 umask -

Match Group uploadusers
  ForceCommand internal-sftp -u 0002

如果用户是该组的成员,则该-u 0002选项为内部 sftp 程序/子系统以及通过它上传的任何文件设置 umask 。uploadusers

我个人也chroot限制用户只能访问他们的目录 - 选中该ChrootDirectory选项,因为它适用于文件Match Group中的指令sshd_config

答案2

背后的原因是,当 shell 参与时,会应用 UMASK。就您而言,它很可能(对于 bash)在 /etc/bashrc 内应用(假设是某些现代 Red Hat/Centos 7 版本),这些文件的位置可能会有所不同。当不使用任何内容时,请检查 /etc/profile 中的 UMASK 设置。

相关内容