Home » Linux » VSFTPD文件服务器
  • 24
  • 09月

VSFTPD文件服务器

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

注解

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

1   安装

CentOS 6.x:

yum install -y vsftpd

Ubuntu 12.04+:

sudo apt-get install vsftpd

2   登录用户类型

用户类型主要有三种:

  1. 匿名用户

  2. 本地用户

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

  3. 虚拟用户

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

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 作了一些设置。

解决办法

  1. 查看 SELinux 的状态:

    sestatus -b | grep ftp
    
  2. 在出现的结果中可以看到

    ftp_home_dir off
    tftpd_disable_trans off
    

    之类。我们现在只要把其中之一设置为 on 就可以啦。

  3. 更改状态:

    setsebool -P ftpd_disable_trans on
    # or
    setsebool -P ftp_home_dir on
    
  4. 重启 vsftpd :

    service vsftpd restart
    
Tags:   ftp .