vsftpd@在ubuntu22.04部署配置指南

基于用户认证默认ftp家目录用户家目录

1. 安装vsftpd服务

1
2
3
4
5
6
7
8
# 更新系统包
sudo apt update

# 安装vsftpd
sudo apt install vsftpd -y

# 检查服务状态
sudo systemctl status vsftpd

2. 配置vsftpd

备份原始配置文件

1
sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.backup

编辑配置文件

1
sudo nano /etc/vsftpd.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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# 基本设置
listen=YES
listen_ipv6=NO

# 允许匿名用户(这里设置为NO,仅使用本地用户)
anonymous_enable=NO

# 允许本地用户登录
local_enable=YES

# 允许写入权限
write_enable=YES

# 本地用户上传文件的权限掩码
local_umask=022

# 允许匿名用户上传(设为NO)
anon_upload_enable=NO

# 允许匿名用户创建目录(设为NO)
anon_mkdir_write_enable=NO

# 显示目录信息
dirmessage_enable=YES

# 使用本地时间
use_localtime=YES

# 启用上传/下载日志
xferlog_enable=YES

# 日志文件路径
xferlog_file=/var/log/vsftpd.log

# 连接端口20进行数据传输
connect_from_port_20=YES

# 限制用户在其主目录(重要安全设置)
chroot_local_user=YES

# 允许可写的根目录(为了兼容chroot)
allow_writeable_chroot=YES

# 启用用户列表
userlist_enable=YES

# 用户列表作为允许列表(YES为允许,NO为拒绝)
userlist_deny=NO

# 用户列表文件路径
userlist_file=/etc/vsftpd.userlist

# 设置被动模式端口范围
pasv_min_port=30000
pasv_max_port=31000

# 启用SSL/TLS(可选,推荐)
ssl_enable=NO

# 设置欢迎信息
ftpd_banner=Welcome to FTP Server

# 超时设置
idle_session_timeout=600
data_connection_timeout=120

# 最大客户端连接数
max_clients=50

# 每个IP的最大连接数
max_per_ip=5

3. 创建FTP用户和自定义目录

mkdir -pv  /data/ftp/{user1,user2}

useradd  -d /data/ftp/user1 -s /sbin/nologin  user1
useradd  -d /data/ftp/user2  -s /sbin/nologin  user2

passwd user1
passwd user2

设置目录权限

mkdir -pv /data/ftp/user{1..2}/upload

chown  -R user1: /data/ftp/user1/
chown  -R user2: /data/ftp/user2/

4. 配置用户访问权限

创建允许访问的用户列表

1
sudo nano /etc/vsftpd.userlist

添加允许访问的用户:

user1
user2

5.启动vsftpd服务及验证

systemctl restart vsftpd

ftp [email protected]
ftp [email protected]

基于用户认证支持自定义ftp家目录

1.创建用户配置目录

1
sudo mkdir /etc/vsftpd_user_conf

为特定用户创建配置文件:

1
2
# 为user1创建特定配置
sudo nano /etc/vsftpd_user_conf/user1

在配置文件中添加:

1
2
3
4
5
6
local_root=/data/ftp/user1/upload
write_enable=YES
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
1
2
# 为user2创建特定配置
sudo nano /etc/vsftpd_user_conf/user2
1
2
3
4
5
6
local_root=/data/ftp/user2/upload
write_enable=YES
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES

2.在主配置文件中启用用户特定配置

/etc/vsftpd.conf 文件末尾添加:

1
2
# 启用用户特定配置
user_config_dir=/etc/vsftpd_user_conf

3.启动验证

systemctl restart vsftpd

ftp [email protected]
ftp [email protected]

基于用户认证配置ssl

1. 启用SSL/TLS加密

1
2
3
4
5
6
7
8
9
# 生成SSL证书
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /etc/ssl/private/vsftpd.pem \
-out /etc/ssl/private/vsftpd.pem

# 在配置文件中启用SSL
ssl_enable=YES
rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem

2. 限制连接数和传输速度

1
2
3
max_clients=50
max_per_ip=5
local_max_rate=1000000 # 1MB/s

vsftpd调试命令

1
2
3
4
5
6
7
8
# 检查配置文件语法
sudo vsftpd -olisten=NO /etc/vsftpd.conf

# 查看端口监听状态
sudo netstat -tlnp | grep :21

# 检查用户登录权限
sudo cat /etc/vsftpd.userlist

vsftpd配置防火墙

1
2
3
4
5
6
7
8
# 允许FTP端口
sudo ufw allow 21/tcp

# 允许被动模式端口范围
sudo ufw allow 30000:31000/tcp

# 重新加载防火墙规则
sudo ufw reload