前言
这个帖子主要说一下如何配置vsftpd的virtual users,因为这个用起来最方便,但是网上 很少有特别详细的说明。我把自己的配置过程写一下。
top为什么选择vsftpd
没有为什么,如果不喜欢或者想尝试,那就换个别的服务器试一试 :)
top准备工作
安装:
- vsftpd
- pam
具体过程就不说了,不同的系统虽然安装方法不同,最后的配置都是一样的。pam是为了给 虚拟用户提供密码认证的。
top先看文档
在具体配置之前,有三个文件应该看看:
- man vsftpd.conf
- 网上随便搜一个vsftpd配置的说明,都会有对各参数的具体说明,可以结合(1)来看。
- /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)
三点说明:
- 其中 注意这里 那一句建立的文件需要与vsftpd.conf中的pam_service_name对应,此变量 的默认值是ftp,所以我们在上面就建立文件ftp。网上很多地方都指定pam_service_name为 vsftp,那么在pam.d里面就要建立vsftp与之对应。
- pam文件中db项目的值就是我们刚才通过db_load命令创建的密码数据库,路径不要写错 ,最后的扩展名要忽略。
- 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的朋友有所帮助!文中有错误或者疏漏的地方,请指正, 谢谢!