1、安装

yum -y install vsftpd   db4-utils  (db_load工具,用户加密用户名密码文件,生成.db文件)


2、生成验证用户名密码数据库

vim /etc/vsftpd/login.txt

aaa (用户名)

123456 (密码)

bbb  (用户名)

asdf(密码)

ccc (用户名)

7654(密码)

保存退出


保存虚拟帐号和密码的文本文件无法被系统帐号直接调用哈~我们需要使用db_load命令生成db口令数据库文件

db_load -T -t hash -f /etc/vsftpd/login.txt /etc/vsftpd/login.db

3、修改数据库文件访问权限


数据库文件中保存着虚拟帐号的密码信息,为了防止非法用户盗取哈,我们可以修改该文件的访问权限。生成的认证文件的权限应设置为只对root用户可读可写,即600


[root@red-hat-5 /]# chmod 600 /etc/vsftpd/vsftpd_login.db

[root@red-hat-5 /]# ll /etc/vsftpd/vsftpd_login.db

-rw------- 1 root root 12288 12-25 23:12 /etc/vsftpd/vsftpd_login.db

4、配置PAM文件


为了使服务器能够使用数据库文件,对客户端进行身份验证,需要调用系统的PAM模块.PAM(Plugable Authentication Module)为可插拔认证模块,不必重新安装应用系统,通过修改指定的配置文件,调整对该程序的认证方式。PAM模块配置文件路径为/etc/pam.d/目录,此目录下保存着大量与认证有关的配置文件,并以服务名称命名。

[root@red-hat-5 /]# cat /etc/pam.d/vsftpd      (把原先的内容都注视掉,加入两行新内容)

#%PAM-1.0

#session    optional     pam_keyinit.so    force revoke

#auth       required    pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed

#auth       required    pam_shells.so

#auth       include     system-auth

#account    include     system-auth

#session    include     system-auth

#session    required     pam_loginuid.so

auth    required    /lib64/security/pam_userdb.so  db=/etc/vsftpd/login

account   required    /lib64/security/pam_userdb.so  db=/etc/vsftpd/login

注意:db=/etc/vsftpd/login 格式是这样的,去掉.db后缀

注意如果是64位系统,请填写路径为/lib64/security/pam_userdb.so  

          如果是32位系统,则直接写/lib/security/pam_userdb.so  

5、建立虚拟用户所对应的本地用户 (如果需要设置较为复杂的权限,可以创建多个本地用户,在虚拟用户配置文件中将虚拟用户映射为本地用户,来进行授权)

# useradd -s /sbin/nologin  -d /ftp   vsftp  设置vsftp 用户家目录即为FTP主目录

为FTP设置权限:

chmod -R 775 /data/ftp  

chown -R vsftp.vsftp  /data/ftp

笔者在生产环境下用的配置:

[root@demo-PG vsftpd]# cat vsftpd.conf| grep -v "^#"

anonymous_enable=NO

local_enable=YES

write_enable=YES

local_umask=022

anon_umask=022

dirmessage_enable=YES

xferlog_enable=YES

connect_from_port_20=YES

xferlog_file=/var/log/xferlog

xferlog_std_format=YES

idle_session_timeout=600

data_connection_timeout=120

ftpd_banner=Please must be use english name for file or directory!

listen=YES

max_clients=100

max_per_ip=50

pasv_enable=YES

pasv_min_port=65500

pasv_max_port=65530

user_config_dir=/etc/vsftpd/login

pam_service_name=vsftpd

userlist_enable=YES

tcp_wrappers=YES


syslog_enable=yes在其日志(/var/log/xferlog和/var/log/vsftpd.log)中不能正常的显示中文,将系统安装成为默认为中文 的系统也不行 ,将系统的字符集改成zh_CN.gb等 都不行 ,最后 查看vsftpd.conf的系统帮助文件(使用man vsftpd.conf命令),发现有一个syslog_enable=yes的参数,编辑vsftpd.conf,加入syslog_enable=yes,再重启vsftpd ,通过查看/var/log/messages,日志中的Vsftpd日志信息显示出来了,而且比较全面,删除信息也有。


user_config_dir=/etc/vsftpd/login :这段配置文件就是告诉vsftpd,当虚拟用户登录成功后(也许是在登陆时)就会读取这个目录下的与虚拟用户名一直的配置文件,注意 user_config_dir的值是目录的名称,而且此目录下一定要有和虚拟用户名称一样的配置文件





[root@demo-PG vsftpd]# ll login/
总计 16
-rw-r--r-- 1 root root 117 09-17 15:53 administrator 

-rw-r--r-- 1 root root 115 09-17 16:27 bbb
-rw-r--r-- 1 root root 115 09-17 16:27 ccc

虚拟用户的权限设置:

anon_upload_enable=YES
是否允许匿名用户上传文件

anon_mkdir_write_enable=NO
匿名用户是否有创建目录的权限

anon_other_write_enable=NO
匿名用户是否有删除和重名名文件的权限

anon_world_readable_only=NO
匿名用户只能下载全局可读的文件,即文件的属组,属主,其他用户都有读权限



[root@demo-PG vsftpd]# cat login/administrator   用户可以完全修改ftp中的内容

guest_enable=YES

guest_username=vsftp

anon_other_write_enable=YES

anon_mkdir_write_enable=YES

anon_upload_enable=YES



[root@demo-PG vsftpd]# cat login/aaa    (aaa用户只允许下载ftp中的内容)


guest_enable=YES                          开启此虚拟用户的登录FTP权限
guest_username=vsftp                     映射此虚拟用户对应的本地系统用户
anon_world_readable_only=NO

[root@demo-PG vsftpd]# cat login/bbb     (bbb用户只允许上传ftp中的内容)

guest_enable=YES
guest_username=vsftp
anon_upload_enable=YES


提醒:如果需要添加虚拟用户:

1、直接在login.txt中设置用户名及密码

2、执行db_load语句
3、在login目录里增加刚才添加的虚拟用户名文件,进行权限编辑
4、重启vsftpd服务即可

service vsftpd restart

配置完成!