- 24
- 09月
vsftpd 是“very secure FTP daemon”的缩写,安全性是它的一个最大的特点。vsftpd 是一个 UNIX 类操作系统上运行的服务器的名字,它可以运行在诸如 Linux、BSD、Solaris、 HP-UNIX等系统上面,是一个完全免费的、开发源代码的ftp服务器软件,支持很多其他的 FTP 服务器所不支持的特征。比如:非常高的安全性需求、带宽限制、良好的可伸缩性、可创建虚拟用户、支持IPv6、速率高等。
目录
注解
操作系统环境:CentOS 6.x 和 Ubuntu 12.04+
2 登录用户类型
用户类型主要有三种:
匿名用户
本地用户
通过添加 Linux 系统用户来访问 FTP 服务,如果用户比较多,需要添加较多的系统用户。
虚拟用户
只需建立一个系统用户,所有虚拟用户都映射到这个系统用户上。不过,若这个用户被禁用,则所有虚拟用户会失效。
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的端口主要用于数据传输。
注解
添加规则之后不要忘记保存哦。
4 虚拟用户
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
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_config_dir=/etc/vsftpd/virtual
guest_enable=YES
guest_username=$1
pam_service_name=vsftpd
tcp_wrappers=YES
其它一些配置:
ftpd_banner=Welcome to digwtx's FTP service.
设置连接FTP时的欢迎信息
dirmessage_enable=YES
设置进入目录后的欢迎信息,另参考 message_file 选项
user_list_enable=YES
禁止用户登录。如果设为 YES ,则需要引用 /etc/vsftpd.user_list 文件,这个文件里的用户会被禁止访问,这个文件也可以自定义
4.3 创建虚拟用户数据库
4.3.1 创建用户文本文件
/etc/vsftpd/vuserlogin.txt 是纯文本文件,用于存放用户名和密码。格式是,一行用户名,一行密码。依次类推。
格式如下:
username
password
注解
文件最后要留一个空行。
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 ,然后再重新生成数据库。否则已删除的用户还会存在于数据库中。
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。
4.5 为虚拟用户创建本地系统用户(可忽略)
命令如下:
useradd -s /sbin/nologin www
注解
因为LNMP编译时已经添加www用户和www组,为了统一,直接使用www用户。故这步可忽略。Ubuntu下可以直接使用普通用户名。
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 使用。
4.7 把虚拟用户追加到chroot列表
为了安全起见,虚拟用户需要限制在自己的家目录中,不允许访问家目录的上级目录,比如 /home/wwwroot/xxx 。
在VSFTPD配置文件中,我们作了相应的设置。因此,新增加的用户需要追加到这个文件中。
比如,把用户 digwtx 追加到 chroot_list 文件中:
cat >> /etc/vsftpd/chroot_list << EOF
digwtx
EOF
完了之后需要重启计算机。
5 常见问题
错误
500 OOPS: cannot change directory
这个问题主要出现在 Centos 系统中,因为 SELinux 作了一些设置。
解决办法
查看 SELinux 的状态:
sestatus -b | grep ftp
在出现的结果中可以看到
ftp_home_dir off tftpd_disable_trans off
之类。我们现在只要把其中之一设置为 on 就可以啦。
更改状态:
setsebool -P ftpd_disable_trans on # or setsebool -P ftp_home_dir on
重启 vsftpd :
service vsftpd restart