LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 725|回复: 3

本例子将说明怎样以"虚拟用户virtual users"假设vsftpd和PAM

[复制链接]
发表于 2003-4-23 20:14:47 | 显示全部楼层 |阅读模式
本例子将说明怎样以"虚拟用户virtual users"假设vsftpd和PAM

虚拟用户是指该用户并不是该服务器的实际用户。虚拟用户将更加安全因为该用户将仅仅限定于FTP登陆。虚拟用户通常使用于需要开放一些文件给非认证用户(公共用户)。

步骤 1) 创建虚拟用户数据库
我们将使用pam_userdb来认证虚拟用户。这需要建立一个保存用户名/密码的数据库文件。要创建该文件,你首先建立一个文本文件其中用户名和密码隔行排列。本目录中提供了例子"logins.txt",其中tom用户的密码是foo,用户fred的密码是bar。

然后你需要以root登陆系统,创建实际的数据库文件:

db_load -T -t hash -f logins.txt /etc/vsftpd_login.db
(这需要先已安装Berkeley db program)。

这将创建/etc/vsftpd_login.db文件.当然,你需要对该文件设定访问权限:

chmod 600 /etc/vsftpd_login.db

要更多的数据库维护信息,你可以参考"Berkeley DB"的相应资料:
http://www.sleepycat.com/docs/utility/index.html


步骤 2) 创建PAM使之使用你的数据库

参照例子vsftpd.pam:

auth required /lib/security/pam_userdb.so db=/etc/vsftpd_login
account required /lib/security/pam_userdb.so db=/etc/vsftpd_login

这将告诉PAM使用你的新数据库文件进行用户认证。复制该文件到PAM目录,一般是/etc/pam.d/

cp vsftpd.pam /etc/pam.d/ftp


步骤 3) 建立虚拟用户的访问目录

useradd -d /home/ftpsite virtual
ls -ld /home/ftpsite

drwx------    3 virtual  virtual      4096 Jul 30 00:39 /home/ftpsite

这样,我们创建了虚拟用户virtual,并设定其主目录为"/home/ftpsite"。让我们再做一些操作

cp /etc/hosts /home/ftpsite
chown virtual.virtual /home/ftpsite/hosts


步骤 4) 创建你的vsftpd.conf配置文件

参考本目录中的例子

anonymous_enable=NO
local_enable=YES

这将禁止匿名FTP登陆并开放非匿名登陆。

write_enable=NO
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO

考虑安全,所有写操作都被禁止

chroot_local_user=YES

这将限制虚拟用户只能访问我们前面设定的/home/ftpsite虚拟FTP目录

guest_enable=YES
guest_username=virtual

guest_enable非常重要,它用以激活虚拟用户功能!guest_username将所有虚拟用户都映射到真实用户"virtual"上,同时也限定了虚拟用户的主目录是/home/ftpsite

listen=YES
listen_port=10021

将使vsftpd工作于"standalone"模式。同时也使vsftpd在非标准端口10021监听FTP请求

pasv_min_port=30000
pasv_max_port=30999

这将设定passive FTP请求的端口范围,这对你配置防火墙非常有用。

复制vsftpd.conf文件到:

cp vsftpd.conf /etc/

步骤 5) 启动vsftpd

进入vsftpd的binary文件目录

./vsftpd

步骤 6) 测试

如在本机测试:

ftp localhost 10021
Connected to localhost (127.0.0.1).
220 ready, dude (vsFTPd 1.1.0: beat me, break me)
Name (localhost:chris): tom
331 Please specify the password.
Password:
230 Login successful. Have fun.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> pwd
257 "/"
ftp> ls
227 Entering Passive Mode (127,0,0,1,117,135)
150 Here comes the directory listing.
226 Transfer done (but failed to open directory).
ftp> size hosts
213 147
ftp>

注解:
1.密码是"foo".
2.不要担心看到"failed to open directory"。这是因为目录/home/ftpsite没有设定为world readable(我们可能通过设定anon_world_readable_only=NO改变这一情况,但是这样做会安全一些)。


=====================================
原文:        ftp://vsftpd.beasts.org/users/cevans/untar/vsftpd-1.1.3/EXAMPLE/
翻译:        Crazypalm
主页:        http://www.c4mcr.shef.ac.uk/~ganglu
=====================================
 楼主| 发表于 2003-4-23 20:18:18 | 显示全部楼层

我照它做了,为什么不行?

登录时输入密码的后就卡住了,这是为什么?
 楼主| 发表于 2003-4-23 21:47:14 | 显示全部楼层

附"Berkeley DB"的相应资料

http://www.sleepycat.com 下载db-2.7.7.tar.gz并存在/usr/local/squidGuard/src/目录下
$su
#cd /usr/local/squidGuard/src/
#tar xvzf db-2.7.7.tar.gz
#cd db-2.7.7
#cd build_unix
#../dist/configure
#make
#make install
 楼主| 发表于 2003-4-23 22:39:43 | 显示全部楼层

我试了n次都没成功

有哪位高人能指点一下啊?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表