在 CentOS 中安装 vsftpd

安装 vsftpd 服务器

1、安装 vsftpd。

# dnf install vsftpd

2、设置 vsftpd 自启动。

# systemctl start vsftpd
# systemctl enable vsftpd

3、开启防火墙的 21 端口,如果使用的是阿里云 ECS,默认防火墙是不可用的,这步可以跳过。

# firewall-cmd --zone=public --permanent --add-port=21/tcp
# firewall-cmd --zone=public --permanent --add-service=ftp
# firewall-cmd --reload

配置 vsftpd 服务器

4、配置 vsftpd 服务器前,我们先把默认的配置文件复制一份。

# cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.old

5、打开 /etc/vsftpd/vsftpd.conf 这个文件进行如下配置。

#除下面提及的参数,其他参数保持默认值即可。

#禁止匿名登录FTP服务器。
anonymous_enable=NO

#允许本地用户登录FTP服务器。
local_enable=YES

#监听IPv4 sockets,如果服务器支持IPv6,则将此参数设为NO。
listen=NO

#监听IPv6 sockets,可以通过netstat -antup | grep ftp命令查看是否支持IPv6。
listen_ipv6=YES

#设置本地用户登录后所在目录。
local_root=/root/Downloads

#全部用户被限制在主目录。
chroot_local_user=YES

#启用例外用户名单。
chroot_list_enable=YES

#指定例外用户列表文件,列表中用户不被锁定在主目录。
chroot_list_file=/etc/vsftpd/chroot_list

#开启被动模式。
pasv_enable=YES
allow_writeable_chroot=YES

#设置服务器公网IP,一般可以不设置
pasv_address=<FTP服务器公网IP地址>

#设置被动模式下,建立数据传输可使用的端口范围的最小值。
#建议您把端口范围设置在一段比较高的范围内,例如50000~50010,有助于提高访问FTP服务器的安全性。
pasv_min_port=50000

#设置被动模式下,建立数据传输可使用的端口范围的最大值。
pasv_max_port=50010

6、创建 chroot_list 文件,并在文件中写入例外用户名单。

# 编辑chroot_list文件
vim /etc/vsftpd/chroot_list

#输入例外用户名单。此名单中的用户不会被锁定在主目录,可以访问其他目录。
将root填入,多个用户一行一个,然后保存。

7、设置安全组

搭建好 FTP 站点后,在实例安全组的入方向添加规则并放行下列 FTP 端口。被动模式需开放21端口,以及配置文件/etc/vsftpd/vsftpd.conf 中参数pasv_min_portpasv_max_port之间的所有端口。

install configure and secure ftp server on centos 01
图 1

最后重启服务。

systemctl restart vsftpd

使用 SELinux 配置 vsftpd(可选配置)

8、允许用户访问自己的 Home 目录。

# setsebool -P tftp_home_dir on

上面这个命令适用于 CentOS 9 及以上版本,如果是 9 以下的版本则需要把 tftp_home_dir 改为 ftp_home_dir,即如下命令:

# setsebool -P ftp_home_dir on

9、授权对自己 Home 目录的读写权限。

# semanage boolean -m ftpd_full_access --on

10、启动 vsftpd。

# systemctl restart vsftpd

vsftpd 配置文件及参数说明

/etc/vsftpd目录下文件说明如下:

  • /etc/vsftpd/vsftpd.conf是 vsftpd 的核心配置文件
  • /etc/vsftpd/ftpusers是黑名单文件,此文件中的用户不允许访问 FTP 服务器
  • /etc/vsftpd/user_list是白名单文件,此文件中的用户允许访问 FTP 服务器

配置文件 vsftpd.conf 其它参数说明

用户登录控制参数说明

配置说明
anonymous_enable = YES接受匿名用户
no_anon_password = YES匿名用户 login 时不询问口令
anon_root = (none)匿名用户主目录
local_enable = YES接受本地用户
local_root = (none)本地用户主目录

用户权限控制参数说明

配置说明
write_enable = YES可以上传文件(全局控制)
local_umask = 022本地用户上传的文件权限
file_open_mode = 0666上传文件的权限配合 umask 使用
anon_upload_enable = NO匿名用户可以上传文件
anon_mkdir_write_enable = NO匿名用户可以建目录
anon_other_write_enable = NO匿名用户修改删除
chown_username = lightwiter匿名上传文件所属用户名
Tags: vsftpd sftp