前言

这个帖子主要说一下如何配置vsftpd的virtual users,因为这个用起来最方便,但是网上 很少有特别详细的说明。我把自己的配置过程写一下。

​top​​为什么选择vsftpd

没有为什么,如果不喜欢或者想尝试,那就换个别的服务器试一试 :)

​top​​准备工作

安装:


  • vsftpd
  • pam

具体过程就不说了,不同的系统虽然安装方法不同,最后的配置都是一样的。pam是为了给 虚拟用户提供密码认证的。

​top​​先看文档

在具体配置之前,有三个文件应该看看:


  1. man vsftpd.conf
  2. 网上随便搜一个vsftpd配置的说明,都会有对各参数的具体说明,可以结合(1)来看。
  3. /usr/share/doc/vsftpd-x.x.x/examples

其实看完这些,配置一个基本的vsftpd就没有问题了。那好我们继续往下走,主要看如何使 用虚拟用户(Virtual Users)。

​top​​配置

​top​​建立幕后用户

vsftpd中所有的虚拟用户都要被映射成一个真正的local用户,所以需要首先新建这样一个 用户(也可以使用已有的用户),假设为 vsftpuser 。最好有一个名字相同的组,而且 vsftpuser的主组就是vsftpuser。

# groupadd vsftpuser
# useradd -g vsftpuser vsftpuser


这个时候有些系统(如RH)会自动建立/home/vsftpuser,有的则不会(如gentoo)。

vsftpuser 有没有Home目录不重要,重要的是有一个为它完全控制的文件夹,也就是local_root参数的含义。为了方便我们建立文件夹 ​​/anypath/ftpserver​​ 。其中的 anypath 是说在哪里都可以,当然也可以是 /home/vsftpuser。然后更改其权限。

# mkdir -p /anypath/ftpserver
# cd /anypath
# chown -R vsftpuser:vsftpuser ftpserver
# chmod 700 ftpserver # 不是必须的


如果上面的命令使用vsftpuser执行的,那么其中的第三句不是必须的,因为新建文件默认 的属组就是创建它的用户。另外,因为一般系统的用户umask都是022,即新建文件的权限是 ​​rwxr-xr-x​​ ,如果不想让vsftpuser之外的其他用户访问,可以通过最后一句进行限制。

我们已经准备好了被映射的后台用户:vsftpuser。

​top​​主要配置

权威的文档看这里:上面列举必读文档第三项中的 VIRTUAL_USERS 目录

​top​​进一步准备工作

假设我们要建立虚拟用户 leo,其登录密码为 little。具体权限我们随后说明。首先声成 密码文件,分四步走:

1. 创建用户数据库,一行写用户名,一行写密码,依次类推。

# cat > passwd
leo
little
(Ctrl+D)


2. 生成加密密码文件。系统需要安装Berkeley DB,其中db_load可能为db4_load,取决于
你安装的版本。

# db_load -T -t hast passwd /etc/vsftpd/passwd.db


3. 更改权限

# chmod 600 passwd.db


4. 为vsftpd创建PAM文件

# cd /etc/pam.d
# touch ftp # 注意这里
# cat > ftp
auth required /lib/security/pam_userdb.so db=/etc/vsftpd/passwd crypt=hash
account required /lib/security/pam_userdb.so db=/etc/vsftpd/passwd cryph=hash
(Ctrl+D)


三点说明:


  1. 其中 注意这里 那一句建立的文件需要与vsftpd.conf中的pam_service_name对应,此变量 的默认值是ftp,所以我们在上面就建立文件ftp。网上很多地方都指定pam_service_name为 vsftp,那么在pam.d里面就要建立vsftp与之对应。
  2. pam文件中db项目的值就是我们刚才通过db_load命令创建的密码数据库,路径不要写错 ,最后的扩展名要忽略。
  3. pam文件中在最后需要加上 crypt=hash ,官方文档中没有加会出现 vsftpd: OOPS: priv_sock_get_result 的错误。另一种解决办法请参看:​​Gentoo Vsftpd​

​top​​主文件

当这些工作都没有问题之后,就来写我们的配置文件。切换到 ​​/etc/vsftpd/​​​ 目录,打开主配置文件 ​​vsftpd.conf​​​ ,如果不存在就把 ​​vsftpd.conf.example​​ 拷贝一份。这里面有常用的一些选项及其详细说明。如果只是配置匿名 用户,那么这个样例文件稍加修改就可以了。

对于虚拟用户有几项需要特别注意:

local_enable=YES            # 虚拟用户本质上是local真实用户,所以需要打开
guest_enable=YES # 使用虚拟用户开关
guest_username=vsftpuser # 将虚拟用户映射为真实用户vsftpuser
user_config_dir=/etc/vsftpd/user_conf # 每个虚拟用户的配置文件放在这里


下面是我的vsftpd.conf:

# Example config file /etc/vsftpd/vsftpd.conf

# 启用standalone方式,xinet用户要用NO
listen=YES

# 我不要匿名用户
anonymous_enable=NO

# 如果要匿名用户的话,它被映射到ftp_username
#ftp_username=ftp

#
# 虚拟用户必须打开此项
local_enable=YES

# 用户chroot的主目录,如果用虚拟用户,可以为每个用户单独指定
# local_root=/home/ftp

# 全局写权限控制,我更喜欢给每个用户单独配置
write_enable=NO

# 上传文件umask,默认是077,我不喜欢 :)
local_umask=022

# 在主文件里面这些参数影响匿名用户,如果在虚拟用户的配置文件里,它们只影响虚拟用
# 户。前三项好理解,最后一项其实就是控制删除、执行文件的。
anon_upload_enable=NO
anon_world_readable_only=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO

# Log
xferlog_enable=YES

# 喜欢这个 :)
banner_file=/etc/vsftpd/banner

# chroot是安全的有力保证
chroot_local_user=YES

# 隐藏文件的真实属主,显示为ftp
hide_ids=YES

# 要跟/etc/pam.d/ftp对应,默认是ftp
# pam_service_name=ftp

# 使用虚拟用户
guest_enable=YES
guest_username=vsftpuser
user_config_dir=/etc/vsftpd/user_conf

# 其它
pasv_min_port=30000
pasv_max_port=30999


​top​​用户文件

上面的配置我都写了注释,应该很好理解,其中user_config_dir就是存放虚拟用户配置文 件的地方,好了先在看看如何配置我们的leo用户。

首先,创建user_conf目录,如果不存在的话;然后进入/etc/vsftpd/user_conf;然后建立 文件leo。文件名就是虚拟用户的用户名。

接下来就是leo自己的配置文件了:

# leo :)

# 参看主配置文件示例的注释,这里可以为leo指定自己的root
local_root=/home/vsftpuser

# 这个也熟悉
local_umask=022

# 从先在开始非常重要。这些参数都以anon开头,原因见主配置文件示例。

# 可以浏览所有可读文件
anon_world_readable_only=NO

# 第一级写开关打开,真正的写控制在后面
write_enable=YES

# 表示可以上传文件,但是不能创建文件夹。依赖于write_enable
anon_upload_enable=YES

# 可以创建文件夹,同样依赖于write_enable
anon_mkdir_write_enable=YES

# 我可不希望用户可以随便删除我的东西,
anon_other_write_enable=NO


OK,everything is done!

启动或者重新启动vsftpd: ​​/etc/init.d/vsftpd restart​

​top​​测试

自己来吧!

​top​​最后

我这里只介绍了如何配置虚拟用户,实际上也适用于普通用户,此处就不再赘述了。这是我 的一点总结,希望对用使用vsftpd的朋友有所帮助!文中有错误或者疏漏的地方,请指正, 谢谢!