Chrooted SSH / SFTP在Fedora 7上
版本1.0
作者:Oliver Meyer <o [dot] meyer [at] projektfarm [dot] de>
本文档描述了如何在Fedora 7上设置chroot的SSH / SFTP环境。chroot用户将被挂在特定的目录中,这些目录无法突破。 他们将能够通过SSH和SFTP访问他们的监狱。
这是一个实践指南; 它不包括理论背景。 他们在网络上的许多其他文档中被处理。
本文档不附带任何形式的保证! 我想说,这不是设立这样一个制度的唯一办法。 实现这一目标有很多方法,但这是我所采取的方式。 我不会保证这将为您工作!
第一种方法(手工)
1.1安装Chrooted OpenSSH
首先我们要安装一些需要的包:
yum install openssl-devel pam-devel
yum groupinstall 'Development Tools'
之后我们必须自定义ssh / sshd配置:
vi /etc/ssh/sshd_config
更改
GSSAPIAuthentication yes GSSAPICleanupCredentials yes
至
#GSSAPIAuthentication yes #GSSAPICleanupCredentials yes
vi /etc/ssh/ssh_config
更改
GSSAPIAuthentication yes
至
#GSSAPIAuthentication yes
接下来,我们下载修补的OpenSSH源,将它们配置为我们的需求( / usr
的可执行文件, / etc / ssh
的配置文件和启用的PAM认证)。
cd /tmp/
wget http://chrootssh.sourceforge.net/download/openssh-4.5p1-chroot.tar.bz2
tar xvfj openssh-4.5p1-chroot.tar.bz2
cd openssh-4.5p1-chroot
./configure --exec-prefix=/usr --sysconfdir=/etc/ssh --with-pam
make
make install
1.2创建Chroot环境
我们将在/ home / chroot下创建一个chroot环境 - 所有chroot SSH用户的监狱。
mkdir -p /home/chroot/home/
cd /home/chroot
mkdir -p usr/lib/openssh/
mkdir bin lib usr/bin dev etc
mknod dev/null c 1 3
mknod dev/zero c 1 5
chmod 666 dev/null dev/zero
现在,在我们创建了必要的目录之后,我们必须将一些二进制文件及其依赖的库复制到chroot环境中。 这个工作大部分可以用Falko Timme发现的一个脚本完成 - 他也修改了一下。 我调整它使用Fedora 7。
vi /usr/local/sbin/create_chroot_env
#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin APPS="/bin/sh /bin/bash /bin/cp /bin/ls /bin/mkdir /bin/mv /bin/pwd /bin/rm /bin/rmdir /usr/bin/id /usr/bin/ssh /bin/ping /usr/bin/dircolors /bin/vi /usr/bin/sftp /usr/libexec/openssh/sftp-server" for prog in $APPS; do mkdir -p ./`dirname $prog` > /dev/null 2>&1 cp $prog ./$prog # obtain a list of related libraries ldd $prog > /dev/nullq if [ "$?" = 0 ] ; then LIBS=`ldd $prog | awk '{ print $3 }'` for l in $LIBS; do mkdir -p ./`dirname $l` > /dev/null 2>&1 cp $l ./$l > /dev/null 2>&1 done fi done
注意:您可以通过将更多程序添加到脚本中的APPS行,为chrooted用户提供更多的程序。
使脚本可执行并运行它:
chmod 700 /usr/local/sbin/create_chroot_env
create_chroot_env
之后,我们必须将几个额外的文件和库复制到chroot jail:
cp /lib/libnss_compat.so.2 /lib/libcom_err.so.2 /lib/libnsl.so.1 /lib/libnss_files.so.2 /lib/ld-linux.so.2 /lib/libcap.so.1 /lib/libnss_dns.so.2 lib/
cp -R /etc/pam.d/ etc/
cp -R /lib/security/ lib/
cp -R /etc/security/ etc/
cp /etc/login.defs /etc/hosts /etc/resolv.conf etc/
cp /usr/lib/libgssapi_krb5.so.2 /usr/lib/libkrb5.so.3 /usr/lib/libk5crypto.so.3 /usr/lib/libkrb5support.so.0 usr/lib/
在下一步中,我们执行以下操作:
echo '#!/bin/bash' > usr/bin/groups
echo "id -Gn" >> usr/bin/groups
touch etc/passwd
grep /etc/passwd -e "^root" > etc/passwd
您还应该复制该组的行,该行将用于从/ etc / group
创建新的chroot用户到/ home / chroot / etc / group
。 在本教程中,我们将使用群组用户创建chrooted用户:
grep /etc/group -e "^root" -e "^users" > etc/group
现在是时候重新启动OpenSSH服务器了:
/etc/init.d/sshd restart
1.3创建Chrooted用户
虽然我们安装了chroot的SSH,但是仍然可以登录,而不会被chroot(例如,如果您以root登录,这是有道理的)。 该决定,哪个用户将被chroot而不是,这取决于一个点。 如果/ etc / passwd
中的用户主目录中有一个点,则该用户将被chroot。
此用户将被chroot:
user_b:x:2003:100:User B:/home/chroot/./home/user_b:/bin/bash
此用户不会被chroot:
user_a:x:2002:100:User A:/home/user_a:/bin/bash
我们使用homedirectory /home/chroot/./home/testuser/
和组用户创建用户testuser:
useradd -s /bin/bash -m -d /home/chroot/./home/testuser/ -c "testuser" -g users testuser
在创建新的用户帐户后,我们必须为其设置密码:
passwd testuser
最后,我们必须将/ etc / passwd
中的testuser行复制到/ home / chroot / etc / passwd中
:
grep /etc/passwd -e "^testuser" >> /home/chroot/etc/passwd
因为我们已经将组用户的行从/ etc / group
复制到/ home / chroot / etc / group
,我们不必再这样做了。 如果要创建另一个用户群组的chroot用户,则必须将该组添加到/ home / chroot / etc / group
。
例如:
grep /etc/group -e "^othergroup" >> /home/chroot/etc/group
现在尝试以testuser身份登录SSH或SFTP。 你应该被关进/ home / chroot
。