SFTP:可以创建但不修改新文件。如何使用新目录执行此操作?

SFTP:可以创建但不修改新文件。如何使用新目录执行此操作?

我已经弄清楚如何使用 SFTP 完成“创建但不修改”权限方案。但它仅适用于文件;我想将其扩展到目录。


背景:

我有一个 SFTP 服务器(基于 OpenSSH),它将特定的用户组限制为公共的chroot监狱目录。配置类似于对话。

我希望该组中的用户能够创建文件和目录,但创建后不能修改或删除它们。我无法直接执行此操作,因为标准 Linux 权限不区分“写入”和“修改”权限。

我可以通过将 SFTP 根目录权限与 SFTP 服务器配置中的 umask 选项相结合来使其工作。

权限:

drwxr-xr-x  root  root       /sftproot
drwxrwxr-x  root  sftpgroup  /sftproot/upload_directory

/etc/ssh/sshd_config:

Subsystem sftp internal-sftp
Match Group sftponly
  ChrootDirectory /sftproot
  ForceCommand internal-sftp -d /upload_directory -u 0222

注意-u 0222开关。这适用于掩码到新创建的文件,这会删除特定权限。


结果:

当 sftponly 组中的用户上传新文件时,由于组写入目录权限,因此允许上传新文件。然后 umask 选项清除“w”位,使文件不可修改。该文件最终看起来像这样:

-r--r--r--  {user}  sftponly  /sftproot/upload_directory/filename

伟大的!这正是我想要的。


问题:

用户还可以创建目录,这也是我想要的。但是,新创建的目录也会清除其“w”位,这会阻止在其中写入任何新文件。


问题:

如何让 SFTP 创建的目录保持可写但文件保持只读?

有什么巧妙的想法吗?

答案1

根据sftp-server (5)联机帮助页,您可以使用-u umask命令行选项来覆盖用户的 umask:

     -u umask
             Sets an explicit umask(2) to be applied to newly-created files and directories, instead of
             the user's default mask.

所以,只要这样设置umask,这样用户就不再有写权限了。

要设置此项,请参阅sshd_config(5)联机帮助页中提到的联机sftp-server帮助页:

     Command-line flags to sftp-server should be specified in the Subsystem declaration.  See
     sshd_config(5) for more information.

相关内容