1. 目标系统使用vsftp程序及pam组件来完成vsftp搭建,实现ftp功能。2. 系统要求1. ftp功能2. 用户锁定目录3. 上传下载可行4. 不使用系统帐户验证5. 多用户支持3. 需要组件vsftpd-2.0.7db4-devel-4.2.52-7.1db4-4.2.52-7.1db4-utils-4.2.52-7.14. 安装过程4.1. 安装组件首先下载vsftp组件wget [url]ftp://vsftpd.beasts.org/users/cevans/vsftpd-2.0.7.tar.gz[/url]解压至目录#tar zxvf vsftpd-2.0.7.tar.gz#cd vsftpd-2.0.7清除编译环境#make clean开始进入编译预准备#vi builddefs.h将其中VSF_BUILD_TCPWRAPPERS、VSF_BUILD_PAM、VSF_BUILD_SSL所在行undef改为define。在vsftpd的目录里编译#make随后创建必要的帐号,目录: #useradd nobody //可能你的系统已经存在此帐号,那就不用建立#mkdir /usr/share/empty //可能你的系统已经存在此目录,那就不用建立#mkdir /var/ftp //可能你的系统已经存在此目录,那就不用建立#useradd -d /var/ftp ftp //可能你的系统已经存在此帐号,那就不用建立#chown root:root /var/ftp#chmod og-w /var/ftp请记住,如果你不想让用户在本地登陆,那么你需要把他的登陆SHELL设置成/sbin/nologin,比如以上的nobody和ftp我就设置成/sbin/nologin开始安装#install -m 755 vsftpd /usr/local/sbin/vsftpd-pam#install -m 644 vsftpd.8 /usr/share/man/man8#install -m 644 vsftpd.conf.5 /usr/share/man/man5#install -m 644 vsftpd.conf /etc/vsftpd-pam.conf4.2. 配置基础环境1. 查看系统是否有相应软件包#rpm –qa | grep db4db4-utils-4.3.29-9.fc6db4-4.3.29-9.fc6db4-devel-4.3.29-9.fc6如果没有则需要安装2. 建立一个logins.txt的文件,单行为用户名,双行为密码#vi /home/logins.txttest1234563. 建立数据库文件并设置文件属性#db_load -T -t hash -f /home/logins.txt /etc/vsftpd_login.db#chmod 600 /etc/vsftpd_login.db4. 建立认证文件新建文件#vi /etc/pam.d/ftp并加入下面两行auth required /lib/security/pam_userdb.so db=/etc/vsftpd_loginaccount required /lib/security/pam_userdb.so db=/etc/vsftpd_login5. 建立一个虚拟用户useradd -d /home/vsftpd -s /sbin/nologin vsftpd6. 修改配置文件#vi /etc/vsftpd-pam.conf在配置文件修改或添加以下选项listen=YESlisten_port=21tcp_wrappers=YES //支持tcp_wrappers,限制访问(/etc/hosts.allow,/etc/hosts.deny)listen=YES的意思是使用standalone启动vsftpd,而不是super daemon(xinetd)控制它 (vsftpd推荐使用standalone方式)anonymous_enable=NOlocal_enable=YES //PAM方式此处必须为YES,如果不是将出现如下错误:500 OOPS: vsftpd: both local and anonymous access disabled!write_enable=NOanon_upload_enable=NOanon_mkdir_write_enable=NOanon_other_write_enable=NOchroot_local_user=YESguest_enable=YESguest_username=vsftpd //这两行的意思是采用虚拟用户形式virtual_use_local_privs=YES //虚拟用户和本地用户权限相同pasv_enable=YES //建立资料联机采用被动方式anon_world_readable_only=NO7. 启动程序#/usr/local/sbin/vsftpd-pam /etc/vsftpd-pam.conf &报错:500 OOPS: bad bool value in config file for: tcp_wrappers8. 测试连接# ftp 127.0.0.1报错:[root@lvs3 vsftpd-2.0.7]# ftp localhostConnected to lvs3.500 OOPS: vsftpd: cannot locate user specified in 'guest_username':vsftpdConnected to 127.0.0.1.220 (vsFTPd 2.0.7)530 Please login with USER and PASS.530 Please login with USER and PASS.KERBEROS_V4 rejected as an authentication typeName (127.0.0.1:root): pool1331 Please specify the password.Password:230 Login successful.Remote system type is UNIX.Using binary mode to transfer files.ftp> dir227 Entering Passive Mode (127,0,0,1,83,150)150 Here comes the directory listing.226 Directory send OK.ftp> quit221 Goodbye.4.3. 配置用户环境1. 建立所有需要登录用户#vi /home/logins.txttest123456test234567单行为用户名,双行为密码2. 更新数据文件#db_load -T -t hash -f /home/logins.txt /etc/vsftpd_login.db3. 配置用户环境#mkdir /etc/vsftpd_user_conf/#vi /etc/vsftpd-pam.conf 加入如下语句user_config_dir=/etc/vsftpd_user_conf-----------------------以下为单用户循环配置,每用户都需要建立------------------------------#mkdir /home/vsftpd/test#vi /etc/vsftpd_user_conf/test添加内容local_root=/home/vsftpd/testwrite_enable=YESanon_world_readable_only=NOanon_upload_enable=YESanon_mkdir_write_enable=YESanon_other_write_enable=YES保存退出修改配置及目录权限# chmod 700 /home/vsftpd/test# chown vsftpd.vsftpd /home/vsftpd/test/---------------------------------用户配置结束---------------------------------------4. 测试用户是否登录到自己目录及上传下载正常5. 客户端测试1. 在建立好的每个用户/目录下建立测试文件两个(文件名不要相同);2. 使用客户端软件从外部测试;3. 分别登录两个以上的帐号,通过察看根目录存在文件检查是否引导到不同/目录下;4. 尝试下载测试文件到本地;5. 尝试删除测试文件;6. 尝试上传文件到测试帐号;7. 测试完成。