9. VSFTPD文件服务器

vsftpd 是“very secure FTP daemon”的缩写,安全性是它的一个最大的特点。vsftpd 是一个 UNIX 类操作系统上运行的服务器的名字,它可以运行在诸如 Linux、BSD、Solaris、 HP-UNIX等系统上面,是一个完全免费的、开发源代码的ftp服务器软件,支持很多其他的 FTP 服务器所不支持的特征。比如:非常高的安全性需求、带宽限制、良好的可伸缩性、可创建虚拟用户、支持IPv6、速率高等。

小技巧

操作系统环境:CentOS 6.x 和 Ubuntu 12.04+

9.1. 安装

CentOS 6.x:

yum install -y vsftpd

Ubuntu 12.04+:

sudo apt-get install vsftpd

9.2. 登录用户类型

用户类型主要有三种:

  1. 匿名用户

  2. 本地用户

    通过添加 Linux 系统用户来访问 FTP 服务,如果用户比较多,需要添加较多的系统用户。

  3. 虚拟用户

    只需建立一个系统用户,所有虚拟用户都映射到这个系统用户上。不过,若这个用户被禁用,则所有虚拟用户会失效。

9.3. 防火墙开放FTP端口

CentOS 系统默认会启用防火墙,若要FTP被外网访问,需要开放相应的端口:

/sbin/iptables -I INPUT -p tcp --dport 21 -j ACCEPT
/sbin/iptables -I INPUT -p tcp --dport 20 -j ACCEPT
/sbin/iptables -I INPUT -p tcp --dport 20000:30000 -j ACCEPT

20000-30000的端口主要用于数据传输。

小技巧

添加规则之后不要忘记保存哦。

9.4. 虚拟用户

9.4.1. 配置文件概览

  • Vsftp配置文件: /etc/vsftpd.conf 或者 /etc/vsftpd/vsftpd.conf
  • PAM认证配置文件: /etc/pam.d/vsftpd
  • 虚拟用户数据库文件: /etc/vsftpd/vuserlogin.txt/etc/vsftpd/vuserlogin.db
  • 虚拟用户配置文件: /etc/vsftpd/virtual/username
  • chroot文件: /etc/vsftpd/chroot_list

9.4.2. vsftpd配置文件

警告

行的值都不能有空格(比如行末多余的空格)!!!

配置文件一般位于 /etc/vsftpd.conf 或者 /etc/vsftpd/vsftpd.conf ,文件内容如下:

listen=YES
connect_from_port_20=YES
pasv_enable=YES
pasv_min_port=20000
pasv_max_port=30000
local_enable=YES
write_enable=NO
anonymous_enable=NO
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
#user_list_enable=YES
# 用户配置文件所在的目录
user_config_dir=/etc/vsftpd/virtual
# 启用虚拟用户
guest_enable=YES
# 将虚拟用户映射为本地用户,Ubuntu下可设为本地用户
guest_username=www
pam_service_name=vsftpd
#dirmessage_enable=YES
tcp_wrappers=YES
#listen_port=5555
#max_client=10
#max_per_ip=1
#ftpd_banner=this is a virtual server and users

其它一些配置:

设置连接FTP时的欢迎信息:

ftpd_banner=Welcome to digwtx's FTP service.

设置进入目录后的欢迎信息,另参考 message_file 选项:

dirmessage_enable=YES

禁止用户登录。如果设为YES,则需要引用/etc/vsftpd.user_list文件,这个文件里的用户会被禁止访问,这个文件也可以自定义:

user_list_enable=YES

9.4.3. 创建虚拟用户数据库

9.4.3.1. 创建用户文本文件

/etc/vsftpd/vuserlogin.txt 是纯文本文件,用于存放用户名和密码。格式是,一行用户名,一行密码。依次类推。

格式如下:

username
password

小技巧

文件最后要留一个空行。

9.4.3.2. 生成数据库

如果找不到 db_load ,需要先安装 Berkeley 数据库及组件。

Centos 6.x:

yum install db4 db4-utils -y

Ubuntu 12.04+:

aptitude install db-util

然后执行下面的命令:

db_load -T -t hash -f /etc/vsftpd/vuserlogin.txt /etc/vsftpd/vuserlogin.db
chmod 600 /etc/vsftpd/vuserlogin.db

新增用户或者修改密码之后,需要重新生成数据库。

注解

假如 vuserlogin.txt 删除了某个用户名和密码,需要先删除 vuserlogin.db ,然后再重新生成数据库。否则已删除的用户还会存在于数据库中。

9.4.4. 配置PAM文件

编辑 /etc/pam.d/vsftpd 文件,文件内容为下面两行:

auth required pam_userdb.so db=/etc/vsftpd/vuserlogin
account required pam_userdb.so db=/etc/vsftpd/vuserlogin

小技巧

pam_userdb.so 可以使用绝对路径。

小技巧

一般只要这两就可以了,在Ubuntu配置的时候,因为有其它的内容存在,导致一直530。

9.4.5. 为虚拟用户创建本地系统用户(可忽略)

命令如下:

useradd -s /sbin/nologin www

小技巧

因为LNMP编译时已经添加www用户和www组,为了统一,直接使用www用户。故这步可忽略。Ubuntu下可以直接使用普通用户名。

9.4.6. 创建虚拟用户配置文件

虚拟用户VSFTPD配置文件位于 /etc/vsftpd/virtual ,若目录不存在,需要先创建:

mkdir -p /etc/vsftpd/virtual

虚拟用户的配置文件以用户名命名。

执行下面的命令,则可为 digwtx 用户增加配置文件:

cat > /etc/vsftpd/virtual/digwtx << EOF
write_enable=YES
virtual_use_local_privs=YES
local_root=/home/wwwroot/xxx
EOF

local_root 可以配合 LNMP 的 vhost 使用。

9.4.7. 把虚拟用户追加到chroot列表

为了安全起见,虚拟用户需要限制在自己的家目录中,不允许访问家目录的上级目录,比如 /home/wwwroot/xxx

在VSFTPD配置文件中,我们作了相应的设置。因此,新增加的用户需要追加到这个文件中。

比如,把用户 digwtx 追加到 chroot_list 文件中:

cat >> /etc/vsftpd/chroot_list << EOF
digwtx
EOF

完了之后需要重启计算机。

配置好之后,要增加虚拟用户,只需重复2,3,7,8这四步即可。

参考:

http://codex.wordpress.org.cn/Vsftp