首页 -> 安全研究

安全研究

绿盟月刊
绿盟安全月刊->第43期->安全文摘
期刊号: 类型: 关键词:
使用Jail构建安全的Vsftpd

作者:可乐∮(三轮车夫,easypp) <powerbsd@cnfug.org>
出处:http://www.cnfug.org/journal/3/05.html
日期:2003-08-06

版权声明:本文版权归★可乐∮(三轮车夫,easypp)所有,如需转载,请保留该声明,谢谢!

vsftpd有一些小小的缺点,就是一般是用系统的帐号进行用户的验证!虽然vsftpd在安全方面非常不错,但是和系统的帐号分离,这样你对你的服务器安全更加放心。我现在通过FreeBSD下面的jail来实现vsftpd和系统的帐号分离!这样不仅可以轻松的管理ftp服务器,而且不必担心因为ftp的安全问题而导致你系统的安全隐患!

软件需求:
FreeBSD 4.8 Stable(Release也可以) vsftpd-1.2.0(可以到vsftpd的官方网站下载)
环境介绍:
FreeBSD 4.8 Stable
Ip: 10.0.1.1 hostname:powerbsd.org
下面是我机器的一些信息:

powerbsd<Time:9:43am>[/]-root->ifconfig
rl0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
inet 10.0.1.1 netmask 0xff000000 broadcast 10.255.255.255
ether 00:60:67:76:fb:13
media: Ethernet autoselect (100baseTX <full-duplex>)
status: active
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
inet 127.0.0.1 netmask 0xff000000
powerbsd<Time:9:43am>[/]-root->hostname
powerbsd.org
powerbsd<Time:9:43am>[/]-root->uname -a
FreeBSD powerbsd.org 4.8-STABLE FreeBSD 4.8-STABLE #7: Mon Jun 23 08:57:32 CST 2003 root@powerbsd.org:/usr/src/sys/compile/PowerBSD i386
OK,下面开始我们的jail之旅:
1. 安装vsftpd
tar zxvf vsftpd-1.2.0.tar.gz
cd vsftpd-1.2.0
make
cp vsftpd /sbin
cp vsftpd.conf /etc
mkdir /var/ftp
mkdir /usr/share/empty
pw groupadd ftp
pw useradd ftp –d /var/ftp –g ftp –s /nonexistent
编辑/etc/vsftpd.conf 在最后添加上: listen=YES
测试vsftpd是不是正常,启动vsftpd:/sbin/vsftpd & 然后使用ftp –a 10.0.1.1 下面是我测试的信息:
powerbsd<Time:9:50am>[/source/src]-root->ftp -a 10.0.1.1
Connected to 10.0.1.1.
220 (vsFTPd 1.2.0)
331 Please specify the password.
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>
2.构建jail环境
a) 建立jail的目录环境:

mkdir-p /jail/{bin,sbin,etc,dev,var/log,var/ftp,usr/bin,usr/sbin/,usr/lib,usr/libexec,usr/share/empty}
b) 查看vsftpd需要哪些运行库

powerbsd<Time:9:55am>[/jail/etc]-root->ldd /sbin/vsftpd
/sbin/vsftpd:
libpam.so.1 => /usr/lib/libpam.so.1 (0x28076000)
libcrypt.so.2 => /usr/lib/libcrypt.so.2 (0x28080000)
libutil.so.3 => /usr/lib/libutil.so.3 (0x28099000)
libc.so.4 => /usr/lib/libc.so.4 (0x280a2000)
c)建立vsftpd在jail下运行环境:
cp /usr/lib/libpam.so.1 /jail/usr/lib/
cp /usr/lib/libcrypt.so.2 /jail/usr/lib/
cp /usr/lib/libutil.so.3 /jail/usr/lib/
cp /usr/lib/libc.so.4 /jail/usr/lib/
cp /dev/MAKEDEV* /jail/dev/
sh /jail/dev/MAKEDEV jail
cp /sbin/vsftpd /jail/sbin/vsftpd
cp /etc/vsftpd.conf /jail/etc/
cp /etc/passwd /jail/etc
cp /etc/group /jail/etc
cp /etc/master.passwd /jail/etc
cp /etc/pwd.db /jail/etc
cp /etc/spwd.db /jail/etc
d)运行jail测试:
killall vsftpd
jail -u root /jail/ powerbsd.org 10.0.1.1 /sbin/vsftpd &
出现错误的提示:ELF interpreter /usr/libexec/ld-elf.so.1 not found
cp /usr/libexec/ld-elf.so.1 /jail/usr/libexec/
再次运行:

jail -u root /jail/ powerbsd.org 10.0.1.1 /sbin/vsftpd
没有出现任何出错的信息!Ctrl+C终止
运行:
jail -u root /jail/ powerbsd.org 10.0.1.1 /sbin/vsftpd &
netstat -na
可以看到:
Proto Recv-Q Send-Q Local Address Foreign Address (state)
tcp4 0 0 10.0.1.1.21 *.* LISTEN
使用:
ps auxww | grep vsftpd
root 455 0.0 0.2 1132 628 p0 IJ 8:31下午 0:00.01 /sbin/vsftpd(IJ表示是在jail环境中运行)
ftp -a 10.0.1.1 测试通过!
3. 可以在jail下面进行用户的管理:
cp /bin/ls /jail/bin
cp /bin/mkdir /jail/bin
cp /bin/rmdir /jail/bin
cp /bin/sh /jail/bin
cp /bin/csh /jail/bin
cp /usr/sbin/pw /jail/usr/sbin
cp /usr/lib/libcrypt.so.2 /jail/usr/lib/
cp /usr/sbin/pwd_mkdb /jail/usr/sbin/
cp /usr/sbin/vipw /jail/usr/sbin/
cp /usr/bin/chgrp /jail/usr/bin/
cp /usr/sbin/chown /jail/usr/sbin/
cp /bin/chmod /jail/bin/
cp adduser.conf /jail/etc/
cp adduser.message /jail/etc/
cp /usr/bin/passwd /jail/usr/bin/
cp /usr/lib/librpcsvc.so.2 /jail/usr/lib/
cp /usr/lib/libutil.so.3 /jail/usr/lib/
cp /etc/pam.conf /jail/etc
cp /usr/lib/pam_skey.so /jail/usr/lib/
cp /usr/lib/pam_opie.so /jail/usr/lib/
cp /usr/lib/pam_opieaccess.so /jail/usr/lib/
cp /usr/lib/pam_cleartext_pass_ok.so /jail/usr/lib/
cp /usr/lib/pam_unix.so /jail/usr/lib/
现在你可以通过如下命令进行用户的管理
jail /jail/ powerbsd.org 10.0.1.1 /bin/sh
下面是我进行用户管理的过程:
powerbsd<Time:10:10am>[/]-root->jail /jail/ powerbsd.org 10.0.1.1 /bin/sh
# pw user show -a
root:*:0:0::0:0:Charlie &:/root:/bin/csh
nobody:*:65534:65534::0:0:Unprivileged user:/nonexistent:/sbin/nologin
ftp:*:1004:1002::0:0:User &:/var/ftp:/nonexitent
# pw group show -a
wheel:*:0:root
nobody:*:65534:
ftp:*:1002:
# pw groupadd ftpgroup
# pw useradd test -d /home/test -g ftpgroup -s /nonexistend
# pw user show -a
root:*:0:0::0:0:Charlie &:/root:/bin/csh
nobody:*:65534:65534::0:0:Unprivileged user:/nonexistent:/sbin/nologin
ftp:*:1004:1002::0:0:User &:/var/ftp:/nonexitent
test:*:1005:1003::0:0:User &:/home/test:/nonexistend
# pw group show -a
wheel:*:0:root
nobody:*:65534:
ftp:*:1002:
ftpgroup:*:1003:
# passwd test
Changing local password for test.
New password:
Retype new password:
passwd: updating the database...
passwd: done
至此如何建立jail下面的vsftpd已经讲解完毕!至于vsftpd该如何进行设置,参考vsftpd的Example!该文只是我学习FreeBSD-jail的一点小小的笔记!就作为抛砖引玉吧!如有不足之处请多多指教,谢谢!





注:任何转载或摘抄请务必保留作者信息和注明文章出处<http://www.cnfug.org>
作者(译者)信息:

三轮车夫,CNFUG(http://www.cnfug.org)核心成员,你可以通过你可以通过powerbsd@cnfug.org或QQ:223480 MSN:easy2go@msn.com与他联系,同时也可以访问他的主页:http://www.easy2go.org/
版权所有,未经许可,不得转载