参考自http://www.cnblogs.com/whoamme/p/3494128.html
- 安装相关工具包
1
| yum -y install pam vsftpd db4 db4-utils
|
- 创建一个不能登录的用户,用作ftp服务的虚拟用户
1
| useradd -d /home/xxx -s /sbin/nologin vuser_ftp
|
/home/xxx
为用户根目录,/sbin/nologin
指定用户不能使用shell,该账号不能用于登录系统
这里使用vuser_ftp
作为虚拟用户的映射对象,在web服务器中可以使用httpd
这个服务的用户来作为虚拟用的映射。比如www apapche web
,没大明白~
3. 创建一个记录ftp虚拟用户的用户名和密码文件,如login.txt
第一行用户名,第二行密码,以此类推
1 2 3 4 5
| vi /etc/vsftpd/login.txt user1 pwd1 user2 pwd2
|
- 使用db_load 命令生成虚拟用户认证文件
1
| db_load -T -t hash -f /etc/vsftpd/login.txt /etc/vsftpd/vsftpd_login.db
|
vsftpd_login.db
文件是db_load命令生成的虚拟用户认证文件
5. 备份vsftpd配置文件,再修改配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| vi /etc/vsftpd/vsftpd.conf
anonymous_enable=NO local_enable=YES write_enable=YES local_umask=022 dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES xferlog_file=/var/log/vsftpd.log xferlog_std_format=YES listen=YES userlist_enable=YES tcp_wrappers=YES max_per_ip=5 max_clients=100
guest_enable=YES guest_username=vuser_ftp
pam_service_name=ftp.vu user_config_dir=/etc/vsftpd/vsftpd_user_conf
|
- 创建vsftpd.conf中提到的验证文件
使用rpm -ql vsftpd
这个命令查找验证模块的例文,找到如下一段
1
| /usr/share/doc/vsftpd-2.2.2/EXAMPLE/VIRTUAL_USERS/vsftpd.pam
|
将其拷贝到vsftpd.conf文件中配置的路径中并改变文件名
1
| cp /usr/share/doc/vsftpd-2.2.2/EXAMPLE/VIRTUAL_USERS/vsftpd.pam /etc/pam.d/ftp.vu
|
前面配置中的pam_service_name=ftp.vu中ftp.vu
使用的是相对路径,绝对路径是/etc/pam.d/ftp.vu
上面这条命令就是把vsftpd程序自带的关于pam认证的模板文件拷贝到pam.d
这个服务的工作目录,同时改变文件名为ftp.vu
。
/etc/pam.d/
目录下已经有了一个vsftpd.pam
文件,现在要做的是让vsftpd虚拟用户的这个功能用到的一个特殊的pam认证。还要修改下ftp.vu
这个文件
先来看下原文件的内容:
1 2 3 4
| vi /usr/share/doc/vsftpd-2.2.2/EXAMPLE/VIRTUAL_USERS/vsftpd.pam
auth required /lib/security/pam_userdb.so db=/etc/vsftpd/login account required /lib/security/pam_userdb.so db=/etc/vsftpd/login
|
将两处的db=/etc/vsftpd/login
修改成db=/etc/vsftpd/vsftpd_login
,文件都是以.db结尾的,但此处不要填写.db。同时由于我们的系统是64位的,还需要将配置中间的/lib/
改为/lib64/
1 2 3 4
| vi /etc/pam.d/ftp.vu
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
|
- 创建
vsftpd.conf
中提到的虚拟用户配置目录user_config_dir=/etc/vsftpd/vsftpd_user_conf
,以及在这个目录下面创建每个用户的权限配置文件
创建/etc/vsftpd/vsftpd_user_conf
目录
1
| mkdir /etc/vsftpd/vsftpd_user_conf
|
在/etc/vsftpd/vsftpd_user_conf
目录下面分别创建之前在login.txt
虚拟用户名和密码文件中提到的user1 user2 这两个虚拟用户的权限配置文件
1 2 3 4 5 6 7 8
| vi /etc/vsftpd/vsftpd_user_conf/user1
anon_world_readable_only=no write_enable=yes anon_upload_enable=yes anon_mkdir_write_enable=yes anon_other_write_enable=yes local_root=/home/xxx
|
之后再创建user2的权限文件(略)
8. OK!结束!重启vsftpd服务