当用户使用 SSH 连接时,我无法将用户限制到固定目录
我希望用户限制在 /var/www/home 但我自己连接并且他们可以在系统中自由移动
我将主目录设置为 /var/www/home,以便它们在登录时转到那里,但这并不限制它们。
我已经根据谷歌的建议尝试了一些东西,但到目前为止似乎没有任何效果/做我想做的事
例如我已将www的chmod更改为755并且root拥有但仍然没有效果
答案1
你需要设立一个“监狱”。从这里:
第 1 步:设置监狱空间
新建一个目录:
mkdir -p /home/test
查找支持会话所需的文件。理想情况下,您只需要最低限度的内容,因为目标是隐藏系统的其余部分:
ls -l /dev/{null,zero,stdin,stdout,stderr,random,tty}
现在您可以制作必要的/dev
文件。这里-m
设置权限,c
是针对字符设备的,两个数字是主设备号和次设备号:
mkdir -p /home/test/dev/
cd /home/test/dev/
mknod -m 666 null c 1 3
mknod -m 666 tty c 5 0
mknod -m 666 zero c 1 5
mknod -m 666 random c 1 8
现在您可以将文件设置为 拥有root
且只能写入root
:
chown root:root /home/test
chmod 0755 /home/test
第 2 步:设置外壳
首先添加 shell 二进制文件,例如bash
:
mkdir -p /home/test/bin
cp -v /bin/bash /home/test/bin/
找出bash
运行所需的库(注意:您可能需要的不仅仅是 lib64 库。例如我的库位于/lib/x86_64-linux-gnu/
和 中/lib64
):
ldd /bin/bash
mkdir -p /home/test/lib64
cp -v /lib64/{libtinfo.so.5,libdl.so.2,libc.so.6,ld-linux-x86-64.so.2} /home/test/lib64/
第 3 步:设置用户
首先创建用户并给他们一个密码:
useradd sshguest
passwd sshguest
现在移动所需的/etc
文件:
mkdir /home/test/etc
cp -vf /etc/{passwd,group} /home/test/etc/
第 4 步:配置 sshd 以使用监狱
使用您最喜欢的编辑器将以下行添加到/etc/ssh/sshd_config
:
#define username to apply chroot jail to
Match User sshguest
#specify chroot jail
ChrootDirectory /home/test
然后通过重新启动服务来加载新配置:
sudo service sshd restart
第 5 步:查看 shell 是否工作
您应该能够连接并运行 shell 内置命令:
ssh sshguest@[IP of Host]
$ pwd
$ echo "foo"
第6步:给新用户一个主目录并添加其他程序
首先给帐户一个家:
mkdir -p /home/test/home/tecmint
chown -R sshguest:sshguest /home/test/home/sshguest
chmod -R 0700 /home/test/home/sshguest
现在,对于您希望被监禁的 shell 能够访问的任何程序,您需要重复复制二进制文件并检查需要哪些共享库,然后像使用bash
.所以如果你愿意ls
你会这样做:
cp -v /bin/ls /home/test/bin/
ldd /bin/ls
cp -v /lib64/{libselinux.so.1,libcap.so.2,libacl.so.1,libc.so.6,libpcre.so.1,libdl.so.2,ld-linux-x86-64.so.2,libattr.so.1,libpthread.so.0} /home/test/lib64/
### or whatever directory and libs you need on your system