使用 sftp 的文件权限和组所有权

使用 sftp 的文件权限和组所有权

有没有办法让特定用户创建的所有文件都属于安全FTP拥有特定组和文件权限?当然,相关用户将是该组的成员,但这不是他的主要组。换句话说,sftp 有没有办法自动复制 umask 和 newgrp 的效果?

答案1

有这样一种东西子系统在 (Open)SSH 中:这是一个在您请求除交互式 shell 之外的其他内容时启动的程序。从技术上讲,它只是远程主机上的可执行文件,在对您进行身份验证并调用 setuid 后execsshd子进程执行。

sftp您可以在 SSH 配置中找到标准子系统定义:

Subsystem sftp /usr/lib/openssh/sftp-server

因为它只是一个简单的可执行文件,而不是 SUID 或任何其他特殊的可执行文件,所以您可以编写一个 shell 脚本来更改您需要的任何属性,然后只需启动原始子系统处理程序。

将以下脚本放入/usr/lib/openssh文件夹中sftp-fperm-server(这不是必需的,只是为了将东西放在一个地方):

#!/bin/sh
umask 026
exec /usr/lib/openssh/sftp-server

然后在末尾添加一行/etc/ssh/sshd_config

Subsystem sftp-fperm /usr/lib/openssh/sftp-fperm-server

然后重新启动sshd(它不会在重新启动时终止会话)并sftp使用-s sftp-fperm选项启动。瞧!文件获得了新指定的 umask。

如果您不想每次都指定该选项,只需更改标准子系统定义即可。交互式会话不会受其影响,因此不会出现任何破坏的情况。

如果你想使用newgrp命令,事情会有点棘手。newgrp总是启动一个新的交互式 shell,但愚蠢的是不允许向其传递任何参数,因此你不能像umask上例那样使用它。但你可以将脚本中的最后一行替换为:

SHELL=/usr/lib/openssh/sftp-server newgrp git

实际上,为我所属的某个组调用newgrp会发出密码请求,所以我无法检查这个解决方案(我的意思是只有一个),但是当我在笔记本电脑上newgrp传递时它可以工作(没有 SSH),所以如果你为用户工作,就不会出现任何问题。/bin/idnewgrp

答案2

除了 whitequark 所说的内容外,您还可以按照这些思路构建解决方案,但使用“sg”命令代替 newgrp,后者是群组的“su”。至少在任何 Linux 系统上都可以将其作为“man sg”进行查找。

答案3

chmod g+s directory
将授予用户组未来创建的所有目录和文件的所有权。

答案4

我认为这是特定于服务器的。检查服务器配置以获取可能的配置选项。

相关内容