在Fedora 7上使用Chrooted SSH / SFTP

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

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

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

支付宝扫一扫打赏

微信扫一扫打赏