vsFTPd的本地用户本身是系统的用户,除了可以登录FTP服务器外,还可以登录系统使用其他系统资源,而vsFTPd的虚拟用户则是FTP服务的专用用户,虚拟用户只能访问FTP服务器资源。对于只需要通过FTP对系统有读写权限,而不需要其他系统资源的用户或情况来说,采用虚拟用户方式是很适合的。
vsFTPd的虚拟用户采用单独的用户名/口令保存方式,与系统账号(passwd/shadow)分离,这大大增强了系统的安全性。vsFTPd可以采用数据库文件来保存用户/口令,如hash;也可以将用户/口令保存在数据库服务器中,如MySQL等。vsFTPd验证虚拟用户,则采用PAM方式。由于虚拟用户的用户名/口令被单独保存,因此在验证时,vsFTPd需要用一个系统用户的身份来读取数据库文件或数据库服务器以完成验证,这就是guest用户,这正如同匿名用户也需要有一个系统用户FTP一样。当然,guest用户也可以被认为是用于映射虚拟用户。
配置虚拟用户分为几部分:guest用户的创建、用户/口令的保存、PAM认证配置和vsftpd.conf文件设置等。
在系统中添加vsftpdguest用户,作为虚拟用户在系统中的代表,在命令行中输入命令:
#useradd vsftpdguest
当虚拟用户登录后,所在的位置为vsftpdguest的默认目录/home/vsftpdguest。如果要让虚拟用户登录到/var/ftp等其他目录,修改vsftpdguest的默认目录即可。
在vsftpd.conf配置文件中,加入以下参数:
guest_enable=YES
guest_username=vsftpdguest
vsFTPd中的virtual_use_local_privs参数,当该参数激活(YES)时,虚拟用户使用与本地用户相同的权限。当此参数关闭(NO)时,虚拟用户使用与匿名用户相同的权限,这两者种做法相比,后者更加严格一些,特别是在有写访问的情形下。默认情况下此参数是关闭的(NO)。
可以发现,无论是哪个虚拟用户,登录后所在的目录都是/home/vsftpdguest,即都是guest_username用户的默认目录。下面,介绍如何为每个虚拟用户建立自己的目录。
一种作法是在虚拟用户的个人配置文件中使用local_root选项指定虚拟用户的默认目录。以bengo为例,在上步的基础上,首先在/etc/vsftpd/vsftpd_user_conf/bengo文件中加入:
local_root=/home/bengo
新建bengo目录,并将权限设为vsftpdguest,在命令行中输入命令:
[root@localhost home]# mkdir bengo
[root@localhost home]# chown vsftpdguest.vsftpdguest ./bengo