除了匿名用户和本地用户之外,我们还可以设置虚拟用户来访问FTP。所谓虚拟用户是指存放于独立数据库文件中的FTP用户账号,可以将他们映射到某个不能登录的系统用户账号上,以进一步增强FTP服务器的安全性。


(1)创建虚拟用户数据库文件
vsftpd服务的虚拟用户数据库是使用Berkeley DB格式的数据库文件,建立数据库文件需要用到db_load命令工具,db_load工具是由db4-utils软件包提供的,所以首先我们需要确认系统中已经安装好了db4-utils组件。
RHEL6.3配置FTP服务器(3) 虚拟用户下载和上传_第1张图片

然后我们先建立一个文本格式的用户名/密码列表文件,用于存放虚拟用户账号。文件名可以随意,文件一般是保存在/etc/vsftpd目录中。
# vim /etc/vsftpd/logins.txt

文件中的奇数行表示用户名,偶数行为上一行用户所对用的密码。如上图就表示创建了2个虚拟用户:harry和natasha,密码都是123.
有了文本格式的用户名/密码列表文件以后,还要以此文件为数据源通过db_load工具创建出Berkeley DB格式的数据库文件。

上图中所执行的db_load命令是一种固定用法,其中的“-T”选项表示允许非Berkeley DB的应用程序使用从文本格式转换的DB数据库文件,“-t hash”选项指定读取数据文件的基本方法,“-f”选项用于指定数据的源文件。
最后为了提高虚拟用户账号的安全性,最好将这两个存放虚拟用户账号的文件的权限都设为600,即只有root用户具有读取和写入权限。


(2)创建虚拟用户的映射账号
vsftpd服务对虚拟用户其实是采用了映射的控制方式,把所有的虚拟用户账号都对应到了同一个系统用户账号上,并将这个系统用户的主目录作为所有虚拟用户登录后共用的FTP根目录。
所以我们还必须要创建一个系统用户账号,当然这个用户是无需设置密码并且不允许登录系统。

在useradd命令中,利用-d选项指定了用户的主目录,利用-s选项禁止用户登录。然后再修改目录权限,使得其他用户可以访问。


 

(3)创建PAM认证文件
对虚拟用户的身份认证是通过PAM机制来实现的,PAM是Linux系统中的一个独立API(应用程序接口),它提供了各种验证模块以供其它程序调用。当这些程序需要进行用户身份验证的操作时,就可以直接调用PAM的相应模块,而无需由自己来提供验证功能。所以PAM在Linux系统中提供了统一的身份验证机制。
PAM的认证文件都统一存放在/etc/pam.d/目录中,下面我们在这个目录中创建一个FTP虚拟用户的认证文件:
# vim /etc/pam.d/vsftpd.vu

在文件中,通过“db=/etc/vaftpd/logins”参数指定了要使用的虚拟用户数据库文件的位置,注意这里不需要写“.db”的扩展名。


 

(4)修改vsftpd配置,添加虚拟用户支持
在vsftpd.conf配置文件中需要添加相应配置项,以支持虚拟用户。
RHEL6.3配置FTP服务器(3) 虚拟用户下载和上传_第2张图片

上图中上半部分的设置项是原有的设置,下半部分(红框部分)的设置项是我们这里所要添加的。

  •  guest_enable=YES ,表示启用虚拟用户映射功能;

  •  guest_username=virtual ,表示指定所映射的系统用户名称;

  •  pam_service_name=vsftpd.vu ,表示指定PAM认证文件。

  •  user_config_dir=/etc/vsftpd/vuser ,表示虚拟用户配置文件的存放目录。关于虚拟用户配置文件将在下面介绍。

另外,其它原有的一些设置项目也必须要正确设置:

  •  local_enable=YES ,由于需要映射本地用户,所以此项必须启用;

  •  anon_umask=022 ,在vsftpd服务中,虚拟用户被默认作为匿名用户进行处理以降低权限,因此对应的配置项通常以anon_开头。

  •  write_enable=YES ,表示允许写入。


     

(5)创建虚拟用户配置文件
经过前面的设置之后,将vsftpd服务重启,便可以使用虚拟用户访问FTP了,但此时所有的虚拟用户都只具有下载的权限而无法上传。当然,如果在vsftpd.conf配置文件中添加配置项“aono_upload_enable=YES”和“anon_mkdir_write_enable=YES”,便可以使虚拟用户具备上传权限,但这样一来,所有的虚拟用户又都可以上传了。所以,为了对虚拟用户进行精确控制,实现不同用户拥有不同的权限,我们还需要为每个虚拟用户建立独立的配置文件,在vsftpd.conf配置文件中我们已经指定了虚拟用户配置文件的存放位置/etc/vsftpd/vuser。
下面我们首先创建虚拟用户配置文件存放目录,然后为harry用户创建配置文件,文件名即是用户名:

然后设置允许harry用户上传,设置方法同匿名用户:

然后我们再为natasha也创建一个配置文件,如果natasha只允许下载,那么只需要有一个配置文件即可,文件内容保持空白。
[ root@localhost ~ ] # touch natasha
重启服务:
# service vsftpd restart
这样虚拟用户便全部设置好了,harry用户具有下载和上传的权限,而natasha只能下载不能上传。 

 最后需要注意的是,如果在vsftpd.conf配置文件中设置了“userlist_enable=YES   userlist_deny=NO”,即只允许userlist列表中的用户访问FTP,那么还需要将virtual用户加入到/etc/vsftpd/user_list列表中去。