使用Jail构建安全的Vsftpd【原创】

发表于:2007-06-09来源:作者:点击数: 标签:
[code:1:5a79bf04dc]使用Jail构建 安全 的Vsftpd 作者★可乐∮三轮车夫,easypp QQ223480MSNeasy2go@msn.com 版权声明:本文版权归★可乐∮三轮车夫,easypp所有,如需转载,请保留该声明,谢谢! vsftpd有一些小小的缺点,就是一般是用系统的帐号进行用户的验

[code:1:5a79bf04dc] 使用Jail构建安全的Vsftpd
     作者:★可乐∮(三轮车夫,easypp)
      QQ:223480 MSN:easy2go@msn.com
版权声明:本文版权归★可乐∮(三轮车夫,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
a) tar zxvf vsftpd-1.2.0.tar.gz
b) cd vsftpd-1.2.0
c) make
d) cp vsftpd /sbin
e) cp vsftpd.conf /etc
f) mkdir /var/ftp
g) mkdir /usr/share/empty
h) pw groupadd ftp
i) pw useradd ftp –d /var/ftp –g ftp –s /nonexistent
j) 编辑/etc/vsftpd.conf 在最后添加上: listen=YES
k) 测试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 suclearcase/" target="_blank" >ccessful.
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 测试通过!
2. 可以在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的一点小小的笔记!就作为抛砖引玉吧!如有不足之处请多多指教,谢谢!

[/code:1:5a79bf04dc]

 tahaomei 回复于:2003-07-25 22:04:50
cp /dev/MAKEDEV* /jail/dev/ 

我执行这行的时候出现错误,没有 MAKEDEV文件,怎么办?

我的是 FREEBSD5.1

 ★可乐∮ 回复于:2003-07-28 19:28:18
你可以跳过这一步看看!看服务可以起来吗?
等明天我自己测试一下!

 tahaomei 回复于:2003-08-14 21:51:06
我又在FREEBSD5.1下实验了一下。跳过cp /dev/MAKEDEV* /jail/dev/ 

这一步后,服务可以起来,但是在第2步的时候,有几个文件是没有的
比如
cp adduser.conf /jail/etc/ 
cp adduser.message /jail/etc/ 

cp /etc/pam.conf /jail/etc 
cp /usr/lib/pam_skey.so /jail/usr/lib/ 

cp /usr/lib/pam_cleartext_pass_ok.so /jail/usr/lib/ 

我又继续跳过这几个步骤


执行到最后一步的命令 ,出现如下错误:

# passwd test
Changing local password for test
passwd: pam_start(): system error


怎么办呢?是不是与前面跳过的步骤有关?如果是,怎么弄?

 tahaomei 回复于:2003-08-14 21:54:32
期待 可乐解答解答,我都放弃 vsftpd虚拟用户通过DB来验证的方法了,你说的这个方法还不错,但上面几点还没搞明白。请指导 

原文转自:http://www.ltesting.net