我有一个关于创建具有某种受限 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 位?
这可能会或可能不会起作用,具体取决于应用程序如何创建目录。