我正在尝试禁用从 sftp 客户端使用 chmod 命令的功能。我希望用户上传的文件仅根据 umask 进行设置,并删除他们更改它的能力。
这似乎很简单,但我找不到任何方法可以做到这一点。
答案1
默认情况下没有,但有一个补丁。不确定您的发行版是否已经有修补程序包,但在您自己修补之前可能值得搜索一下。http://sftpfilecontrol.sourceforge.net/
答案2
或者,如果您的 sftp 用户属于特定的公共组,而 shell 用户属于另一个公共组,您可以简单地使用ACL(访问控制列表)限制谁可以使用 chmod 以及其他命令。
答案3
(2023 年)是使用 vanilla openSSH 即可。
相关要求是setstat
。
因此,如果您在中指定以下内容/etc/ssh/sshd_config
:
Match User mysftpuser
ChrootDirectory /home/mysftpuser/chroot #or else they see their .ssh dir
ForceCommand internal-sftp -P lsetstat,setstat,fsetstat #deny chmod
它会这样做。我还添加了lsetstat
和fsetstat
,因为它们对链接和文件句柄的作用相同。您还可以添加-u xxxx
以指定给定的 umask。请参阅可查看/usr/lib/openssh/sftp-server -Q requests
您可以列入黑名单的请求列表。或者可能(甚至更好)只将需要的请求列入白名单。
您需要重新加载sshd
并重新登录 SFTP 客户端以使更改生效。
我认为应该将接受的答案改为这个,因为接受的答案是不正确的(现在)。
答案4
显然,如果不对 openssh 进行大规模修补,我不可能实现我的目标。我最终只好使用 vsftpd。