类似于监禁 shell 的 SFTP 访问

类似于监禁 shell 的 SFTP 访问

我有一个关于创建具有某种受限 shell 访问权限的用户的问题(实际上这个用户所需要做的就是sftp access访问一个特定的目录)。

场景如下 - 我有一个受 IonCube 保护的现有代码,所以我真的不能乱动它 - 我只能使用它提供的输出文件夹。它会在运行期间创建一些文件夹,其中包含一些要下载的文件。最终导致/var/www/xy/backup/orderbackup/random-name-folder-here/files_here

现在,我想创建一个用户,该用户将拥有/var/www/xy/backup/files/对其下属的 sftp 访问权限,但最好没有其他任何访问权限。

我是否应该创建一个普通用户,然后将他关在该目录中(尽管我不确定是否可以在那里创建监狱,因为我无法将/var/www/xy/backup/orderbackup/所有权更改为根目录,因为它会停止保存文件),或者我应该使用其他技术。

我读过关于 RSSH、MySecureShell 等的帖子,这些方法在安全性和设置复杂性之间取得了折衷(我不是 Linux 专家)。

提前致谢!

答案1

OpenSSH(也提供 sftp 和 scp 功能)在后续版本中增加了 chroot 功能。基本上,您只需要在文件中添加类似这些行即可/etc/ssh/sshd_config

Subsystem sftp internal-sftp

Match group sftpusers
     ChrootDirectory /var/www/xy/backup/files/
     X11Forwarding no
     AllowTcpForwarding no
     ForceCommand internal-sftp

然后创建一个名为的新组sftp 用户使用命令groupadd sftpusers

最后一步是创建属于组的用户sftp 用户

useradd -g sftpusers -d /var/www/xy/backup/files yourusername 
passwd yourusername

然后只需重新启动你的 ssh 服务:/etc/init.d/sshd restart一切就绪。

答案2

您可以使用 sshd 配置来实现这一点。创建一个用户,然后fred将以下内容添加到您的 sshd_config 文件中

Match user fred
    ChrootDirectory /var/www/xy/backup/files
    ForceCommand internal-sftp
    X11Forwarding no
    AllowTcpForwarding no

这会将用户锁定fred到所需目录及其子目录。用户fred只需r--访问文件和r-x目录。检查当前权限,它可能已经能够执行此操作。

答案3

也许您可以为这个 sftp 用户定义一个新组,将目录的组所有权更改为该组并在目录上设置 setgid 位?

这可能会或可能不会起作用,具体取决于应用程序如何创建目录。

相关内容