vsftpd服务器支持匿名用户、本地用户、虚拟用户三类用户帐号,使用虚拟用户帐号可以提供集中管理的FTP根目录,同时将用于FTP登录的用户名,密码与系统用户帐号区分开,进一步增强了FTP服务器的安全性

以下是搭建基于虚拟用户的vsftpd服务的详细工程:

1.建立虚拟用户的用户名/密码数据库

    vsftpd服务的虚拟用户数据库使用Berkeley DB格式的数据文件,建立数据文件需要用到db_load命令工具,从安装盘中安装db4-utils

安装如下:

[root@locidcs CentOS]# rpm -ivh db4-utils-4.3.29-10.el5_5.2.i386.rpm 
warning: db4-utils-4.3.29-10.el5_5.2.i386.rpm: Header V3 DSA signature: NOKEY, key ID e8562897
Preparing...           ########################################### [100%]
   1:db4-utils         ########################################### [100%]

    首先建立文本格式的用户名密码列表文件,奇数行为用户名,偶数hang为上一行用户所对应的的密码。例如:添加用户mike、john,密码分别为123、456.

[root@locidcs ~]# vim /etc/vsftpd/vusers.list

mike
123
john
456

 

    使用db_load工具将列表文件转化为DB数据库文件

[root@locidcs ~]# cd /etc/vsftpd/
[root@locidcs vsftpd]# db_load -T -t hash -f vusers.list vusers.db
[root@locidcs vsftpd]# file vusers.db 
vusers.db: Berkeley DB (Hash, version 8, native byte-order)
[root@locidcs vsftpd]# chown 600 /etc/vsftpd/vusers.*  //降低文件权限以提高安全性

    在db_load命令中,“-f”选项用于指定用户和密码列表 “–T”选项允许非Berkeley DB的应用程序使用文本格式转换的DB数据文件,“-t hash”指定读取数据文件的基本方法。

另外,以后若有用户更改操作,如添加虚拟用户,更改此处建立的vusers.list ,vusers.db文件即可。使用db_load 命令重新生成数据文件即可。

 

2.建立FTP访问的根目录及虚拟用户对应的系统帐号。

    vsftpd虚拟用户需要有一个对应的系统用户帐号(该帐号无需设置密码及登录shell),该用户帐号的宿主目录作为所有虚拟用户登录后的共同FTP根目录。

[root@locidcs ~]# useradd -d /var/ftproot -s /sbin/nologin virtual  //建立映射帐号virtual
[root@locidcs ~]# chmod 755 /var/ftproot/             //更改FTP根目录权限
[root@locidcs ~]# ls -lh /boot > /var/ftproot/vutest.file   //建立测试文件
 

3.建立PAM认证文件

   PAM配置文件主要用于为程序提供用户认证控制,vsftpd服务使用的默认PAM配置文件为“/etc/pam.d/vsftpd”,可以参考该文件的格式建立心的PAM配置文件,用于虚拟用户认证控制。

[root@locidcs ~]# vi /etc/pam.d/vsftpd.vu
#%PAM-1.0
auth    required        pam_userdb.so db=/etc/vsftpd/vusers
account required        pam_userdb.so db=/etc/vsftpd/vusers
 

配置时注意将db选项指定为先前建立的虚拟用户的数据库文件vusers(省略.db扩展名)。

4.修改vsftpd.conf配置文件,添加虚拟用户支持

    在vsftpd.conf配置文件中添加guest_enable、guest_username 配置项,将访问FTP服务的所有虚拟用户对应到同一系统用户帐号virtual,并修改pam_service_name配置项,指向上一步建立的PAM配置文件“/etc/pam.d/vsftpd.vu”

[root@locidcs ~]# vi /etc/vsftpd/vsftpd.conf

anonymous_enable=NO
local_enable=YES             
//使用虚拟用户需要启用本地用户
anon_umask=022               //设置虚拟用户所上传文件的默认权限掩码
write_enable=YES
guest_enable=YES             
//启用用户映射功能
guest_username=virtual       //将映射用户制定为virtual
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
pam_service_name=vsftpd.vu   
//修改使用的PAM文件位置
userlist_enable=YES
tcp_wrappers=YES

 

    在vsftpd服务中,虚拟用户账户默认作为匿名用户处理以降低权限,因此对应的权限设置通常使用以anon_开头的配置项。例如,在设置虚拟用户所上传文件的默认权限掩码时应采用配置项anon_umask 而不是local_umask。

5.为不同的虚拟用户建立独立的配置文件

    通过配置前面的四个步骤,实际上已经可以重新启动vsftpd并提供服务了,使用虚拟用户帐号可以登录FTP服务器并下载文件,本步骤将介绍如何为个别虚拟用户设置不同的访问权限。

    以为虚拟用户john添加上传文件、创建目录的权限为例,推荐实现步骤如下:

修改vsftpd.conf主配置文件,添加用户配置目录支持

[root@locidcs ~]# vi /etc/vsftpd/vsftpd.conf 
user_config_dir=/etc/vsftpd/vusers_dir    //添加此行配置项,制定用户配置目录位置

 

 为用户mike、john建立独立的配置目录及文件

[root@locidcs ~]# mkdir /etc/vsftpd/vusers_dir   //创建用户配置目录
[root@locidcs ~]# cd /etc/vsftpd/vusers_dir/

[root@locidcs vusers_dir]# vi john         //为john用户建立独立的配置文件
anon_upload_enable=YES
anon_mkdir_write_enable=YES
[root@locidcs vusers_dir]# touch mike     //为mike用户建立独立的配置文件(无额外权限设置)
 

    如果需要禁用或者仅允许一部分虚拟用户帐号,同样可以使用“/etc/vsftpd/user_list”列表文件。需要注意的是,在“/etc/vsftpd/ftpusers”文件中加入虚拟用户名,并不能禁止对应的系统账户。

6.重新启动vsftpd服务

[root@locidcs ~]# service vsftpd restart
关闭 vsftpd:                            [确定]
启动 vsftpd:                            [确定]

7.测试

[root@locidcs ~]# ftp 192.168.1.101
Connected to 192.168.1.101.
220 (vsFTPd 2.0.5)
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (192.168.1.101:root): mike
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (192,168,1,101,62,181)
150 Here comes the directory listing.
-rw-r--r--    1 0        0             474 Jan 12 09:15 vutest.file
226 Directory send OK.

[root@locidcs ~]# ftp 192.168.1.101
Connected to 192.168.1.101.
220 (vsFTPd 2.0.5)
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (192.168.1.101:root): john
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (192,168,1,101,76,150)
150 Here comes the directory listing.
-rw-r--r--    1 0        0             474 Jan 12 09:15 vutest.file
226 Directory send OK.

 

使用mike用户可以登录vsftpd服务器,并可以浏览、下载文件,但无法上传文件

使用john用户可以登录vsftpd服务器,并可以浏览、下载文件,也可以上传文件

 使用匿名用户或其他系统用户时,将不能登录该vsftpd服务器