配置 VSFTPD 的虚拟用户

如果你正在维护一个提供虚拟空间的服务器,为安全起见,你可能希望网站管理员只能管理他自己的文件。一个好的解决方法是:为所有的管理员配置 VSFTPD 的虚拟用户和根目录。下面我们就简明地解说一下如何做。
(参考:配置 VSFTPD 的虚拟用户--另一种途径

1、安装 of VSFTPD

对于 Red Hat, CentOS 和 Fedora 这些基于 RPM 的系统,可以用下面的命令安装 VSFTPD:

# yum install vsftpd

对于 Debian and Ubuntu,相应的命令是:

# apt-get install vsftpd

2、配置虚拟用户和密码验证

我们将使用 PAM 的 pam_userdb 来为虚拟用户提供密码验证。这需要一个 “db” 格式的数据库。我们需要“db_load”命令。对于 CentOS 和 Fedora,这个命令在 db4-utils 包里:

# yum install db4-utils

对于 Ubuntu:

# apt-get install db4.2-util

要创建“db”格式的文件,首先,我们创建一个普通文件文件“virtual-users.txt”,这个文件的格式非常简单,就是一行用户名,一行密码,循环往下写:

mary
123456
jack
654321

然后,执行下面的命令创建真正的数据库:

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

现在,创建一个 PAM 文件 /etc/pam.d/vsftpd-virtual 来使用这个数据库:

auth required pam_userdb.so db=/etc/vsftpd/virtual-users
account required pam_userdb.so db=/etc/vsftpd/virtual-users

3、配置 VSFTPD

创建配置文件 /etc/vsftpd/vsftpd-virtual.conf:

# disables anonymous FTP
anonymous_enable=NO
# enables non-anonymous FTP
local_enable=YES
# activates virtual users
guest_enable=YES
# virtual users to use local privs, not anon privs
virtual_use_local_privs=YES
# enables uploads and new directories
write_enable=YES
# the PAM file used by authentication of virtual uses
pam_service_name=vsftpd-virtual
# in conjunction with 'local_root',
# specifies a home directory for each virtual user
user_sub_token=$USER
local_root=/var/www/virtual/$USER
# the virtual user is restricted to the virtual FTP area
chroot_local_user=YES
# hides the FTP server user IDs and just display "ftp" in directory listings
hide_ids=YES
# runs vsftpd in standalone mode
listen=YES
# listens on this port for incoming FTP connections
listen_port=60021
# the minimum port to allocate for PASV style data connections
pasv_min_port=62222
# the maximum port to allocate for PASV style data connections
pasv_max_port=63333
# controls whether PORT style data connections use port 20 (ftp-data)
connect_from_port_20=YES
# the umask for file creation
local_umask=022

4、创建用户主目录

在上面的配置文件指定的目录下,创建所有虚拟用户的主目录(如果这些用户已经有自己的文件目录,只需要创建一个符号连接就可以了),并改变这些目录的属主为 ftp:

# mkdir /var/www/virtual/mary
# chown ftp:ftp /var/www/virtual/mary

5、启动 VSFTPD 并测试

用下面的命令启动 VSFTPD:

# /usr/sbin/vsftpd /etc/vsftpd/vsftpd-virtual.conf

用 lftp 命令测试虚拟用户的访问权限:

# lftp -u mary -p 60021 192.168.1.101

所有的虚拟用户应该可以管理他目录下的所有子目录和文件。


一条评论

  1. Larin 说:

    очень интересно.

留下评论