首页 > 代码库 > 配置FTP虚拟用户访问

配置FTP虚拟用户访问

    直接使用本地用户(Linux系统的用户账户)来访问vsftpd服务器可能带来安全问题,变通的方法是使用虚拟用户(virtual user)来作为专门的FTP账户。FTP虚拟用户并不是操作系统的用户账户,不能登入系统,只能访问FTP服务器,对操作系统的影响更小。虚拟用户主要用来访问提供给非信任用户,但又不适合公开的内容。

     PAM(Pluggable Authentication Modules)是一套身份验证共享库,用于限定特定应用程序的访问。使用PAM身份验证机制可以实现vsftpd的虚拟用户功能。实现的关键是攒关键vsftpd的PAM用户数据库文件和修改相应的PAM配置文件,具体步骤如下。

     1.创建虚拟用户数据库

      需要使用PAM用户数据库来验证虚拟用户,为此要建立一个采用通用数据库格式(db)的文件来存储用户名和密码。

      (1)建立包含虚拟用户名和密码的文本文件。文件中奇数行为用户名,偶数行为对应的密码。例如创建/etc/vsftpd/login.txt,并在其中个输入如下内容:

abc

123

def

456

上面的文本文件包含连个用户abc和def,密码分别为123和456.

      (2)执行以下命令将包含虚拟用户的文本文件转换成数据库文件。 

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

注意:找不到db_load命令,需要安装db4软件。

        (3)执行以下命令以限制改数据库我那件的访问权限。

#chmod 600 /etc/vsftpd/login.db                          //防止该文件被普通用户修改。

     2.修改vsftpd的PAM配置文件

      安装vsftpd时创建了一个相应的PAM配置文件/etc/pam.d/vsftpd,对该文件进行修改,将所有的行加上#使其成为注释,或者直接删除,然后添加一下两行内容。

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

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

      db=/etc/vsftpd/login和上一步建立的数据库文件相对应,只是在PAM文件里不能写后缀名.db。这两行内容告知PAM使用新的数据库(/etc/vsftpd/login.db)来验证用户。

     PAM的目的是对客户端进行验证,也可另外创建一个PAM文件用于vsftpd虚拟用户验证。

    3.为虚拟用户创建一个系统用户和主目录

#useradd -d /home/ftpsite -s /sbin/nologin virtual

    这样就创建了一个名为“virtual”的普通用户,同时为其创建一个名为“/home/ftpsite”的主目录。

    可以讲要下载的内容复制到该目录。

    4.创建或修改现有的vsftpd.conf配置文件,启用虚拟用户功能。这里为了示范,创建一个新的vsftpd.conf配置文件,具体配置如下:

anonymous_enable=NO
#启用非匿名用户访问(包括虚拟用户)
local_enable=YES
write_enable=NO
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
#启用用户目录锁定(将虚拟用户锁定在其主目录中)
chroot_local_user=YES
#启用虚拟用户功能
guest_enable=YES
#设置所有虚拟用户要映射的真实用户
guest_username=virtual
#设置vsftpd进行PAM认证是所用的PAM配置文件名
pam_service_name=vsftpd
listen=YES
#设置vsftpd监听非标准口8021的FTP请求
listen_port=8021
#被动模式端口设置为高端口范围
pasv_min_port=30000
pasv_max_port=30999

其中与虚拟用户功能最相关的选项有3个。

*  guest_enable:设置是否启用vsftpd的虚拟用户功能,默认设置为NO。将其设置为YES,所有非匿名用户的访问都会被认为“虚拟用户”登录。将虚拟用户登录重新映射到有guest_username选项指定的用户。

*  guest_username: 指定虚拟用户在系统中的用户名,及虚拟用户被映射为哪一个本地系统用户,默认设为ftp(等同于匿名用户)。

*  pam_service_name:设置vsftpd进行PAM认证是所用的PAM配置文件名,告诉vsftpd对那个文件实现PAM身份验证。默认值为ftp。但是默认配置文件中将该选项设置为vsftpd,表示PAM配置文件为/etc/pam.d/vsftpd。


配置FTP虚拟用户访问