Vsftpd配置虚拟用户

  • 摘要:VSFTPD的虚拟用户是FTP服务的专用用户,虚拟用户只能访问FTP服务器资源。本文讲述的是如何在Vsftpd配置虚拟用户
  • 标签:Vsftpd  虚拟用户
  •  

Vsftpd配置虚拟用户

1、VSFTPD的虚拟用户介绍

VSFTPD的本地用户本身是系统的用户,除了可以登录FTP服务器外,还可以登录系统使用其他系统资源,而VSFTPD的虚拟用户则是 FTP服务的专用用户,虚拟用户只能访问FTP服务器资源。对于只需要通过FTP对系统有读写权限,而不需要其他系统资源的用户或情况来说,采用虚拟用户 方式是很适合的。

VSFTPD的虚拟用户采用单独的用户名/口令保存方式,与系统账号(passwd/shadow)分离,这大大增强了系统的安全性。 VSFTPD可以采用数据库文件来保存用户/口令,如hash;也可以将用户/口令保存在数据库服务器中,如MySQL等。VSFTPD验证虚拟用户,则 采用PAM方式。由于虚拟用户的用户名/口令被单独保存,因此在验证时,VSFTPD需要用一个系统用户的身份来读取数据库文件或数据库服务器以完成验 证,这就是guest用户,这正如同匿名用户也需要有一个系统用户ftp一样。当然,guest用户也可以被认为是用于映射虚拟用户。

配置虚拟用户分为几部分:guest用户的创建、用户/口令的保存、PAM认证配置、vsftpd.conf文件设置等。具体的配置方法,参考下面小节。注:在后面的例子中,假定存在虚拟用户xiaotong和xiaowang。

2、 用户创建和目录设置

在系统中添加vsftpdguest用户,作为虚拟用户在系统中的代表。

 
  
  1. useradd vsftpdguest  
  2.  

当虚拟用户登录后,所在的位置为vsftpdguest的自家目录/home/vsftpdguest。如果要让虚拟用户登录到/var/ftp等其他目录,修改vsftpdguest的自家目录即可。

3、配置文件的设置

(1)基本设置。

在vsftpd.conf配置文件中,加入以下参数:

 
  
  1. guest_enable=YES 
  2.  
  3. guest_username=vsftpdguest 
  4.  

(2)虚拟用户的权限配置。

VSFTPD-1.2.0添加了virtual_use_local_privs参数,当该参数激活(YES)时,虚拟用户使用与本地用户相同的权 限。当此参数关闭(NO)时,虚拟用户使用与匿名用户相同的权限,这也就是VSFTPD-1.2.0之前版本对虚拟用户权限的处理方法。这两者种做法相 比,后者更加严格一些,特别是在有写访问的情形下。默认情况下此参数是关闭的(NO)。

下面先介绍virtual_use_local_privs=NO时,即VSFTPD-1.2.0之前版本对虚拟用户权限的配置方法:

①控制虚拟用户浏览目录

如果让用户不能浏览目录,但仍可以对文件操作,那么需要执行以下二个步骤:一,配置文件中,anon_world_readable_only=YES。二,虚拟用户目录的权限改为只能由vsftpdguest操作:

 
  
  1. [root@hpe45 vsftpd]# chown vsftpdguest.vsftpdguest /home/vsftpdguest  
  2.  
  3. [root@hpe45 vsftpd]# chmod 700 /home/vsftpdguest  
  4.  

②允许虚拟用户上传文件

 
  
  1. write_enable=YES 
  2.  
  3. anon_upload_enable=YES 
  4.  

③允许虚拟用户修改文件名和删除文件

 
  
  1. anon_other_write_enable=YES 
  2.  

由于以上选项的设置同样会对匿名用户生效。如果不想匿名用户趁机拥有同样的权限,最好是禁止匿名用户登录。

在VSFTPD-1.2.0中当virtual_use_local_privs=YES时,只需write_enable=YES,虚拟用户就可以就拥有写权限。

(3)虚拟用户的其他配置

①限定虚拟用户在自家目录。

 
  
  1. chroot_local_user=NO 
  2.  
  3. chroot_list_enable=YES 
  4.  
  5. chroot_list_file=/etc/vsftpd.chroot_list  
  6.  

在/etc/vsftpd.chroot_list文件中加入xiaotong和xiaowang。

或者,chroot_local_user=YES

②虚拟用户的个人配置。

如果想让个别的虚拟用户拥有自己特别的配置,同样可以建立虚拟用户的个人配置文件。在主配置文件中加入:

user_config_dir=/etc/vsftpd/vsftpd_user_conf

生成/etc/vsftpd/vsftpd_user_conf目录,在该目录下建立与特定虚拟用户同名的文件:

 
  
  1. [root@hpe45 vsftpd]# mkdir vsftpd_user_conf  
  2.  
  3. [root@hpe45 vsftpd]# cd vsftpd_user_conf  
  4.  
  5. [root@hpe45 vsftpd_user_conf]# touch xiaowang  
  6.  

然后在xiaowang文件中就可以加入专对xiaowang生效的选项设置了。

注:如果在个人配置文件中加入chroot_local_user=YES是无效的。

(4)虚拟用户个人目录设置

大家可以发现,无论是哪个虚拟用户,登录后所在的目录都是/home/vsftpdguest,即都是guest_username用户的自家目录。下面,介绍如何为每个虚拟用户建立自家目录。

一种作法是在虚拟用户的个人配置文件中使用local_root选项指定虚拟用户的自家目录。以xiaowang为例,在第上步的基础上,首先/etc/vsftpd/vsftpd_user_conf/xiaowang文件中加入:

local_root=/home/xiaowang

新建xiaowang目录,并将权限设为vsftpdguest:

 
  
  1. [root@hpe45 home]# mkdir xiaowang  
  2.  
  3. [root@hpe45 home]# chown vsftpdguest.vsftpdguest ./xiaowang  
  4.  

(5)MySQL保存虚拟用户

本节介绍如何将虚拟用户的用户名和口令保存在MySQL的数据库中。这主要分二个部分,一是将用户和口令保存在数据库,二是设置相应的PAM 认证。为了方便论述,做如下假定:数据库vsftpdvu,表users,字段name和passwd用于保存虚拟用户的用户名和口令;为了安全,只授权 vsftpdguest读vsftpdvu数据库的users表。

虚拟用户的用户名/口令的保存。这部分在MySQL数据库中完成。首先,创建数据库vsftpdvu以及表users,并插入虚拟用户xiaotong、xiaowang。执行以下命令:

 
  
  1. [root@hpe45 vsftpd]#mysql -p  
  2.  
  3. mysqlmysqlmysqlmysqlmysqlmysql  
  4.  

然后,授权vsftpdguest只能读vsftpdvu数据库的users表。执行以下命令:

 
  
  1. [root@hpe45 vsftpd]#mysql -u root mysql -p  
  2.  
  3. mysqlmysql  
  4.  

如果要验证刚才的操作是否成功可以执行下面命令:

 
  
  1. [root@hpe45 vsftpd]#mysql -u vsftpdguest -pi52serial0 vsftpdvu