前言
这个帖子主要说一下如何配置vsftpd的virtual users,因为这个用起来最方便,但是网上 很少有特别详细的说明。我把自己的配置过程写一下。
top为什么选择vsftpd
没有为什么,如果不喜欢或者想尝试,那就换个别的服务器试一试 :)
top准备工作
安装:- vsftpd
- pam
具体过程就不说了,不同的系统虽然安装方法不同,最后的配置都是一样的。pam是为了给 虚拟用户提供密码认证的。
top先看文档
在具体配置之前,有三个文件应该看看:其实看完这些,配置一个基本的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的朋友有所帮助!文中有错误或者疏漏的地方,请指正, 谢谢!