极限首页 业界焦点 软件工程师之路 系统工程师之路 网络工程师之路 软件下载 技术社区
 Linux操作系统的内核编译内
 Linux下设备完全驱动之四
 Linux下设备完全驱动之二
 Linux下设备完全驱动之三
 Linux下设备完全驱动之一
 Linux内核如何从2.4升级到
 开源世界的虚拟机 QEMU
 Linux下软件RAID的实现
 RHEL4内建LVM工具入门
 linux SSH 的一些安全小技
 Linux操作系统的内核编译内
 Linux下设备完全驱动之四
 Linux下设备完全驱动之二
 Linux下设备完全驱动之三
 Linux下设备完全驱动之一
 Linux内核如何从2.4升级到
 开源世界的虚拟机 QEMU
 Linux下软件RAID的实现
 RHEL4内建LVM工具入门
 linux SSH 的一些安全小技

Shell 中文手册

Python 2.3 中文手册

Python 2.4 中文手册

Mysql 4.x 中文手册

PHP 4.x 中文手册

Apache 2.x 中文手册
更多手册

站内搜索:
当前位置:首页>>系统工程师之路>>管理进阶>>正文
在FreeBSD中建立chroot的FTP服务
时间:2005-04-27 作者:Matthew 来源:中文FreeBSD用户组

    本文以FreeBSD中的FTPD为例,介绍在FreeBSD中如何建立一个Chroot的FTPD服务。写这篇文章主要是想说明一下在FreeBSD中Chroot一个服务的基本步骤,而非只是为了介绍如何Chroot FreeBSD中的FTPD服务。闲话不多说,下面让我们开始。

Matthew(黑夜编码人) <matthew@cnfug.org>

1、准备基本的chroot环境
在进入chroot环境之前要先准备好相应的设置,在本例中我们打算将ftpd chroot到/var/chroot目录中。
因为系统自带的ftpd在/usr/libexec/目录,所以我们需要在/var/chroot中执行以下操作:

matthew@bsd# mkdir -p /var/chroot/usr/libexec
然后将ftpd复制到该目录中:
matthew@bsd# install -C /usr/libexec/ftpd /var/chroot/usr/libexec
接下来要做的就是将ftpd需要的库也复制到chroot目录中,我们可以使用ldd来检测ftpd运行时需要哪些库:
matthew@bsd# ldd /usr/libexec/ftpd
/usr/libexec/ftpd:
libskey.so.2 => /usr/lib/libskey.so.2 (0x28074000)
libmd.so.2 => /usr/lib/libmd.so.2 (0x2807b000)
libcrypt.so.2 => /usr/lib/libcrypt.so.2 (0x28084000)
libutil.so.3 => /usr/lib/libutil.so.3 (0x2809d000)
libpam.so.1 => /usr/lib/libpam.so.1 (0x280a6000)
libc.so.4 => /usr/lib/libc.so.4 (0x280af000)
ldd的运行结果显示了ftpd运行时需要库,现在我们只要把这些库安装到我们的chroot的相应目录中便可:
matthew@bsd# mkdir -p /var/chroot/usr/lib
matthew@bsd# install -C /usr/lib/libskey.so.2 /var/chroot/usr/lib
matthew@bsd# install -C /usr/lib/libmd.so.2 /var/chroot/usr/lib
matthew@bsd# install -C /usr/lib/libcrypt.so.2 /var/chroot/usr/lib
matthew@bsd# install -C /usr/lib/libutil.so.3 /var/chroot/usr/lib
matthew@bsd# install -C /usr/lib/libpam.so.1 /var/chroot/usr/lib
matthew@bsd# install -C /usr/lib/libc.so.4 /var/chroot/usr/lib

2、第一次进入chroot环境
现在我们可以试试看ftpd能不能在我们的chroot环境中运行:

matthew@bsd# chroot /var/chroot /usr/libexec/ftpd
ELF interpreter /usr/libexec/ld-elf.so.1 not found
程序出错,根据提示在/usr/libexec中还缺少文件ld-elf.so.1,由于我们的ftpd是在chroot环境中运行,所以我们应该将ld-elf.so.1复制到我们的chroot环境中,即/var/chroot/usr/libexec中:
matthew@bsd# install -C /usr/libexec/ld-elf.so.1 /var/chroot/usr/libexec
现在我们再次试着进入我们的chroot环境:
matthew@bsd# chroot /var/chroot /usr/libexec/ftpd
这次没有任何提示说明我们的运行库已经准备好了,但是由于ftpd在不带-D参数的时候运行完后就会自动退出,所以现在我们还无法从远程登录ftp服务,那么我们试着在ftpd后面加上参数-D:
matthew@bsd# chroot /var/chroot /usr/libexec/ftpd -D
结果与上次一样,通过查阅chroot(8)的手册,我们可以看到chroot的语法是:
chroot newroot [command]
也就是说command后面不能带参数,即然这样我们就写一个简单的shell脚本来运行ftpd,这个脚本命名为ftpd.sh,存放于/var/chroot/usr/libexec中,内容为:
#!/bin/sh
/usr/libexec/ftpd -D -4
由于我们不需要支持IPv6,所以这里加上了参数-4只对IPv4提供支持,当然你也可以加上一些其它参数。
接下来为脚本加上执行权限:
matthew@bsd# chmod a+x /var/chroot/usr/libexec/ftpd.sh
为了要运行这个脚本程序,我们还需要将/bin/sh复制到我们的chroot环境中:
matthew@bsd# mkdir /var/chroot/bin
matthew@bsd# install -C /bin/sh /var/chroot/bin
接下来我们就要为chroot环境准备/etc目录了。首先要复制的就是/etc/services文件,因为它定义了ftpd使用的端口号和协议:
matthew@bsd# mkdir /var/chroot/etc
matthew@bsd# cp /etc/services /var/chroot/etc
因为需要验证用户,所以需要复制master.passwd和group:
matthew@bsd# cp /etc/group /var/chroot/etc
matthew@bsd# cp /etc/master.passwd /var/chroot/etc
编辑/var/chroot/etc/master.passwd和/var/chroot/etc/group,删除不需要使用ftp的用户和不必要的组,注意,当更改了master.passwd后一定要使用pwd_mkdb来生成密码数据库,由于此时我们需要将密码数据库文件存放在/var/chroot/etc中,而不是默认/etc中,所以在pwd_mkdb后面加上-d参数来指定数据库存放位置:
matthew@bsd# pwd_mkdb -d /var/chroot/etc /var/chroot/etc/master.passwd
此时如果执行成功的话你将看到在/var/chroot/etc/目录中多了两个文件:pwd.db、spwd.db。
让我们再次进入我们的chroot环境:
matthew@bsd# chroot /var/chroot /usr/libexec/ftpd.sh
现在我们便可以登录到我们的这个chroot的ftp服务器了。

3、结尾工作
为每一个用户建立home目录,注意是在建在/var/chroot/home之中。
在/var/chroot/etc/中生成ftpusers文件,将禁止登录ftp的用户的用户名加入其中,以禁止部分用户登录。
在/var/chroot/etc/中生成ftpchroot文件,它的作用是限制用户只能访问自己的home目录中的文件,而不能访问home外的任何内容。将你要限制的用户的用户名加入其中。
在/var/chroot/etc/中生成ftpwelcome文件,它的作用是当用户连接上我们的服务器的时候显示欢迎信息。
在/var/chroot/etc/中生成ftpmotd文件,它的作用是当用户登录进服务器的时候显示欢迎信息。



注:任何转载或摘抄请注明文章出处(中文FreeBSD用户组 http://www.cnfug.org)


作者(译者)信息:

Matthew,CNFUG(http://www.cnfug.org)核心成员,BSD UNIX的追随者,你可以通过matthew@cnfug.org来联系他,同时也可以访问他的个人主页:http://www.arbornet.org/~matthew/
推荐】【 】【关闭


关于极限 | 站内地图 | 意见反馈 | 广告服务 | 数据服务 | 联系我们
本站所刊登的文章,技术资料,软件均整理于网络资源或本站原创,转载请务必联系原作者或本站。
Copyright ? 2001-2004 UPLinux.com All Rights Reserved.
本站唯一联系信箱:
京ICP备05010519