FTP服务器搭建和配置

在 CentOS 7.x 上使用搭建 FTP 服务器,并使用虚拟用户进行细粒度的用户权限配置。

搭建 FTP 服务器

vsftpd 安全、配置简单、性能较好,本文使用 vsftpd 搭建 ftp 服务器。

安装软件

CentOS 发行版自带 vsftpd,安装起来很简单:

1
yum install -y vsftpd

使用如下命令可以启动、重启 vsftpd 服务

1
2
3
4
# 启动服务
systemctl start vsftpd
# 重启服务
systemctl restart vsftpd

全局配置

vsftpd 的参数含义可以参考 vsftpd 的官方文档

编辑 vsftpd 配置文件/etc/vsftpd/vsftp.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# 通用配置
local_enable=YES # 使用非匿名用户登陆必须设置(包括匿名用户)
write_enable=YES # 是否允许对共享文件系统做出修改的指令集
local_umask=022 # 设置目录权限,值为对777进行按位减(本设置值为755)
ls_recurse_enable=NO # 是否允许 ls -R,启用有安全风险
pam_service_name=vsftpd # 使用的 pam 配置文件名,位于/etc/pam.d 目录下
trans_chunk_size=8192 # 越大性能越好,越小限流功能越平滑
#日志、消息提示配置
dirmessage_enable=YES
log_ftp_protocol=YES
xferlog_enable=YES
xferlog_std_format=NO
xferlog_file=/var/log/vsftpd.log
#chroot list
chroot_local_user=YES # 是否将所有用户限制在主目录
chroot_list_enable=NO # 是否启动限制用户的名单
#白名单
userlist_enable=YES # 启动白名单,允许访问的用户写在userlist_file 里
userlist_deny=NO
userlist_file=/etc/vsftpd/user_list
#端口配置
pasv_enable=YES # 使用被动模式
pasv_min_port=5000
pasv_max_port=6000
#网络配置
listen=YES # ipv4
listen_ipv6=NO # ipv6
tcp_wrappers=YES

如果使用本地认证用户登陆,则可以在白名单中加入该用户,修改完配置重启服务即可。

匿名用户配置

vsftpd 的匿名用户在操作本地文件系统时被映射为 ftp 用户,配置前请先确保ftp用户对该目录的访问权限。

同样在 vsftpd 的全局配置文件/etc/vsftpd/vsftod.conf里编辑,增加如下内容:

1
2
3
anonymous_enable=YES # 启用匿名用户,默认名 anonymous
anon_world_readable_only=NO # 允许匿名用户写
anon_root=/path/to/dir # 设置匿名用户的 homedir

修改完配置重启服务,即可使用匿名用户登陆。

虚拟用户配置

vsftpd 的一大特色是虚拟用户。虚拟用户是在真实的本地用户上抽象的一层用户管理系统。虚拟用户可以屏蔽本地文件系统的权限对 FTP 用户权限的影响。

修改全局配置

修改 vsftpd 的全局配置文件/etc/vsftpd/vsftod.conf,增加如下内容:

1
2
3
4
guest_enable=YES
guest_username=root # 启动用户映射,且所有登陆的用户均映射成 root
local_root=/path/to/dir
user_config_dir=/etc/vsftpd/conf.d # 所有虚拟用户的配置文件都放在该目录下

生成虚拟用户数据库

用户文件/etc/vsftpd/vusers,形式为用户名、密码各一行,如下:

1
2
3
4
5
6
7
# user1
ftpuser1
123456
# user2
ftpuser2
123456
...

用户数据库/etc/vsftpd/vusers.db,使用如下命令生成:

1
db_load -T -t hash -f /etc/vsftpd/vusers /etc/vsftpd/vusers.db

使用虚拟用户数据库

使用虚拟用户数据库需要结合 PAM,可以直接编辑 vsftpd 的 PAM 文件/etc/pam.d/vsftpd或新建一个 PAM 配置文件。PAM 文件配置如下:

1
2
auth required pam_userdb.so db=/etc/vsftpd/vusers
account required pam_userdb.so db=/etc/vsftpd/vusers

如果使用新建 PAM 配置文件,需要在全局配置文件中修改参数pam_service_name

虚拟用户配置

配置文件

创建一个虚拟用户需要在虚拟用户配置目录(参考user_config_dir的值)下创建一个与用户名同名的参考文件。例如,创建一个名为ftptest的虚拟用户,其配置文件为/<user_config_dir>/ftptest

通用配置

虚拟用户一些通用配置如下:

1
2
3
4
anon_umask=022
virtual_use_local_privs=NO # 将虚拟用户权限等级设定和匿名用户一样,提高安全性
anon_world_readable_only=NO # 虚拟用户可写(并非设置为写)
local_root=/path/to/dir # 设置虚拟用户的 homedir

权限配置

在通用配置的基础上,可以添加权限相关配置来进行虚拟用户权限控制。

虚拟用户权限和配置如下表所示:

权限 参数 默认值
读取文件列表 dirlist_enable YES
创建文件夹 anon_mkdir_write_enable NO
删除文件/文件夹 anon_other_write_enable NO
上传 anon_upload_enable NO
下载 download_enable YES
带宽 anon_max_rate 0 (unlimited)

备注

除了以上配置添加了白名单之外, vsftpd 还有一个自带的黑名单文件/etc/vsftpd/ftpusers,里面的用户均被禁止登陆 vsftp。