Chrooted SSH / SFTP教程(Debian Etch)

Chrooted SSH / SFTP教程(Debian Etch)

版本1.0
作者:Falko Timme

本教程介绍了如何给用户chroot SSH访问的两种方式。 通过此设置,您可以为用户提供shell访问,而不必担心他们可以看到整个系统。 您的用户将被关在特定目录中,这些目录将无法突破。 用户还可以在其chroot jails中使用SFTP。

本文档不附带任何形式的保证! 我想说,这不是设立这样一个制度的唯一办法。 实现这一目标有很多方法,但这是我所采取的方式。 我不会保证这将为您工作!

1初步说明

此设置基于Debian Etch(Debian 4.0)系统。

设置chroot SSH的第一种方法是手工制作,非常类似于本教程中Debian Sarge所示的方法: http : //www.youcl.com/chrooted_ssh_howto_debian 。 chroot的SSH将以这样的方式进行安装,它仍将使用/ etc / ssh /中的标准OpenSSH Debian软件包的配置文件,您将能够使用标准的OpenSSH Debian初始化脚本/ etc / init .d / ssh 。 因此,您不必创建自己的init脚本和配置文件。

第二种方法是使用http://www.fuschlberger.net/programs/ssh-scp-sftp-chroot-jail/中的make_chroot_jail.sh脚本。 这个设置与第一个不同,因为我们不需要重新编译OpenSSH。 chroot用户使用/ bin / sh/ bin / bash代替/ bin / chroot-shell ,它使用sudochroot命令来刷新用户。 该方法也不同,因为用户在/ etc / passwd中的homedirs中没有点(因此它不能被诸如ISPConfig之类的控制面板使用,这与第一种方法没有任何关系)。 请看http://www.fuschlberger.net/programs/ssh-scp-sftp-chroot-jail/ ,看看这个脚本可以为你做什么,什么没有。

你应该以一种方式来决定 - 请不要同时使用这两种方法!

2第一种方法(手工)

2.1安装Chroot OpenSSH

首先我们安装一些先决条件:

cd /tmp
apt-get install libpam0g-dev openssl libcrypto++-dev libssl0.9.7 libssl-dev ssh build-essential bzip2

然后我们下载修补的OpenSSH源,并将/ usr作为SSH可执行文件的目录进行配置,其中/ etc / ssh作为chroched SSH查找配置文件的目录,我们还允许PAM身份验证:

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

2.2创建Chroot环境

接下来我在/ home / chroot下创建一个chroot 环境 。 这是所有chrooted SSH用户将被监禁的目录,即他们将无法看到/ home / chroot之外的任何文件/目录。

我必须在/ home / chroot中创建一些目录,我必须复制一些二进制文件,如/ bin / bash/ bin / ls等,以及这些二进制文件依赖于chroot环境的库,以便它们可用于任何chroot用户。

mkdir -p /home/chroot/home/
cd /home/chroot
mkdir -p usr/lib/openssh
mkdir etc
mkdir etc/pam.d/
mkdir bin
mkdir lib
mkdir usr/bin
mkdir dev
mknod dev/null c 1 3
mknod dev/zero c 1 5
chmod 666 dev/null
chmod 666 dev/zero

现在我们已经创建了必要的目录,我们将把一些二进制文件和它们所依赖的所有库复制到chroot环境中。 这是我在http://mail.incredimail.com/howto/openssh/create_chroot_env上发现的一个脚本的摘录。 我修改了一点:

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 /usr/bin/vi /usr/bin/sftp /usr/lib/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/null
        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

(如果您想为chrooted用户提供更多的程序,只需将这些程序添加到APPS行。)

现在我们使脚本可执行并运行它:

chmod 700 /usr/local/sbin/create_chroot_env
create_chroot_env

接下来,我们必须将几个额外的文件和库复制到chroot jail:

cp /lib/libnss_compat.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 /etc/hosts etc/
cp /etc/resolv.conf etc/
cp /etc/pam.d/* etc/pam.d/
cp -r /lib/security lib/
cp -r /etc/security etc/
cp /etc/login.defs etc/
cp /usr/lib/libgssapi_krb5.so.2 usr/lib/
cp /usr/lib/libkrb5.so.3 usr/lib/
cp /usr/lib/libk5crypto.so.3 usr/lib/
cp /lib/libcom_err.so.2 lib/
cp /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创建新用户的组的行复制到/ home / chroot / etc / group 。 在本教程中,我们将在组用户中创建用户 ,因此我们这样做:

grep /etc/group -e "^root" -e "^users" > etc/group

并重新启动OpenSSH:

/etc/init.d/ssh restart

2.3创建一个Chrooted用户

即使我们刚刚安装的chroot SSH,您也可以登录而不用chroot(例如,以root身份登录是有道理的)。 现在,chroot的SSH如何决定谁来chroot和谁不? 这很简单:chroched SSH查找尝试登录/ etc / passwd的用户 。 如果/ etc / passwd中的用户主目录有一个。 (点),然后用户将被chroot。

示例(来自/ etc / passwd):

user_a:x:2002:100:User A:/home/user_a:/bin/bash

此用户不会被chroot。

user_b:x:2003:100:User B:/home/chroot/./home/user_b:/bin/bash

该用户将被chroot。

现在我们使用主目录/home/chroot/./home/testuser和组用户 (这是Debian上的用户的默认组)创建用户testuser ,因此您不必明确指定它:

useradd -s /bin/bash -m -d /home/chroot/./home/testuser -c "testuser" -g users testuser

然后我们给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。 你应该被chroot,不能浏览/ home / chroot之外的文件/目录。

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏