当我尝试使用 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 设置。