我在 CentOS 5.8 服务器上安装了 jailkit,并根据我找到的在线指南对其进行了配置。这些是以 root 身份执行的命令:
mkdir /var/jail
jk_init -j /var/jail extshellplusnet
jk_init -j /var/jail sftp
adduser testuser; passwd testuser
jk_jailuser -j /var/jail testuser
然后我进行了编辑/var/jail/etc/passwd
,将登录 shell 更改为testuser
允许/bin/bash
他们通过 SSH 访问完整的 bash shell。
接下来我将其编辑/var/jail/etc/jailkit/jk_lsh.ini
成如下所示(不确定是否正确)
[testuser]
paths= /usr/bin, /usr/lib/
executables= /usr/bin/scp, /usr/lib/openssh/sftp-server, /usr/bin/sftp
测试用户能够通过 SSH 连接,但只能查看 chroot jail 目录,也能够通过 SFTP 登录,但是整个文件系统是可见的,并且可以遍历。
SSH 输出:
> ssh testuser@server
Password:
Last login: Sat Oct 20 03:26:19 2012 from x.x.x.x
bash-3.2$ pwd
/home/testuser
SFTP 输出:
> sftp testuser@server
Password:
Connected to server.
sftp> pwd
Remote working directory: /var/jail/home/testuser
怎样才能锁定监狱的 SFTP 访问?
答案1
虽然我确实感受到了 doublesharp 的痛苦(也遇到了这个问题),但 doublesharp 的答案不应该使用(不安全)。这里的问题是 sshd 的 internal-sftp 在执行 /usr/sbin/jk_chrootsh 之前执行,出于安全原因需要执行。因此,要解决此问题,您只需确保您的 /etc/ssh/sshd_config 文件包含此行...
Subsystem sftp /usr/lib/openssh/sftp-server
...而不是这一行...
Subsystem sftp internal-sftp
还要确保您没有在此文件中进行任何用户/组匹配。这里的主要想法是,如果您要使用 jailkit 隔离 Linux 系统上的用户,那么您需要强制所有用户通过 /usr/sbin/jk_chrootsh,它可以在需要时启动其自己的 sftp 功能。
在对 /etc/ssh/sshd_config 进行更改后,请确保重新启动 sshd(方法可能因系统而异)。
答案2
如果存在问题,希望得到纠正,但以下配置似乎有效。
/etc/passwd
更改了(中的用户不是 /var/jail/etc/passwd
) 已被 jailkit 修改:
原来的testuser:503:503::/var/jail/./home/testuser:/usr/sbin/jk_chrootsh
修改的testuser:503:503::/home/testuser:/bin/bash
添加配置至/etc/ssh/sshd_config
:
Match Group testuser
ChrootDirectory /var/jail/
SSH
现在,当通过或登录时,SFTP
用户被限制在/var/jail
以下,并默认为主目录/var/jail/home/testuser