FTP---创建文件传输服务器
FTP搭建文件传输服务器
环境部署
系统以CentOS 7.9
vsftp服务器的配置网卡信息
TYPE="Ethernet"
BOOTPROTO=static
NAME=eth0
DEVICE=eth0
IPADDR=10.16.6.128
PREFIX=24
GATEWAY=10.16.6.2
DNS1=114.114.114.114
DNS2=8.8.8.8
vsftp配置的yum源
确认防火墙是否关闭**(如果是企业级则不能关闭防火墙)**
systemctl stop firewalld
systemctl disabled firewalld
设置SELinux为disabled并临时关闭setenforce 0
setenforce 0
getenforce

安装vsftpd
yum install -y vsftpd

**确认是否安装成功 **
rpm -q vsftpd

设置开机自启,先停止默认服务
systemctl enable vsftpd
systemctl stop vsftpd
防火墙放行FTP(必须做,否则连不上)
firewall-cmd --permanent --add-service=ftp
firewall-cmd --reload
备份原配置(防止改错无法还原)
cp -av /etc/vsftpd/vsftpd.conf /opt/vsftpd.conf\_202605121407\_v1.1.1
清空原有配置
> /etc/vsftpd/vsftpd.conf
配置vsftpd匿名用户(anonymous)
创建并加固 /var/ftp目录**
注意:此时 vsftpd 是“空配置”,匿名不可用、本地不可登录、虚拟未启用 —— 我们将逐类构建。
创建默认匿名根目录(vsftpd 自带,但权限需修正)
mkdir -pv /var/ftp/pub
echo "Welcome to Anonymous FTP Server (2026-05-12)" > /var/ftp/welcome.msg
echo "This is a public download area." >> /var/ftp/welcome.msg
关键!设置正确权限(vsftpd 强制要求:root 所有 + 555 权限)
ls -ld /var/ftp
chown root:root /var/ftp
chmod 555 /var/ftp
chown root:root /var/ftp/pub
chmod 755 /var/ftp/pub
放一个测试文件(供后续验证下载)
echo "TEST FILE: anonymous\_$(date +%Y%m%d).txt" > /var/ftp/pub/test.txt
ll /var/ftp/pub/test.txt
编辑主配置文件(/etc/vsftpd/vsftpd.conf)**
备份原配置
cp -av /etc/vsftpd/vsftpd.conf /opt/vsftpd.conf.bak.$(date +%Y%m%d)
cat /etc/vsftpd/vsftpd.conf
写入精简安全配置(覆盖全部)
cat > /etc/vsftpd/vsftpd.conf <<'EOF'
#=== VSFTPD ANONYMOUS CONFIG — CENTOS 7.9 — 2026===# Core
anonymous\_enable=YES
no\_anon\_password=YES
write\_enable=NO
anon\_upload\_enable=NO
anon\_mkdir\_write\_enable=NO
anon\_other\_write\_enable=NO
#关键修复:移除 chroot\_anonymous,改用以下方式
#匿名用户默认会被限制在 /var/ftp 目录
#确保 /var/ftp 目录权限正确(root:root, 755)
#Security & Logging
hide\_ids=YES
xferlog\_enable=YES
xferlog\_std\_format=YES
log\_ftp\_protocol=YES
use\_localtime=YES
dirmessage\_enable=YES
ftpd\_banner=Welcome to Anonymous FTP Service (CIS Compliant)
**# Performance & Compatibility**
connect\_from\_port\_20=YES
listen=YES
listen\_ipv6=NO
pam\_service\_name=vsftpd
userlist\_enable=YES
userlist\_file=/etc/vsftpd/user\_list
userlist\_deny=YES
#=== END CONFIG ===
EOF
确认vsftpd的端口
ss -tulanp | grep vsftpd
ps axu | grep vsftpd

重启服务并验证匿名可用性**
systemctl restart vsftpd
安装FTP的客户端工具**
yum -y install ftp

✅ 本地命令行验证(无需客户端)**
ftp -n localhost <<'EOF'
user anonymous a@b.c
pwd
ls
get pub/test.txt /tmp/ftp\_test.txt
quit
EOF
上述执行的测试命令 全部成功!
FTP 服务 正常运行
匿名用户登录成功
能查看目录、能下载文件
配置完全正确
Trying 127.0.0.1…
257 “/” <= 登录成功,进入根目录
drwxr-xr-x 2 ftp ftp 22 May 12 09:13 pub <= 看到 pub 文件夹
get pub/test.txt <= 下载文件成功
最后那个 WARNING 不影响使用,只是文本格式提示,不是错误。
查看否是创建文件
ls -lhrt /tmp/

测试
win+r 输入ftp:\10.16.6.129 进入然后右击登录,勾选匿名登录

vsftpd.conf 配置文件详解(知识点,如果不需要可以跳过,下面是vsftpd本地用户)
==================== 第一部分:核心功能开关 ====================
#允许匿名用户登录 (anonymous_enable=YES)
#这是匿名 FTP 的基石。设为 NO 则彻底禁止匿名访问。
anonymous_enable=YES**
anonymous\_enable=YES
#匿名登录免密 (no_anon_password=YES)
#设为 YES 后,匿名用户用 anonymous 或 ftp 登录时,系统不提示输入密码。
#设为 NO 则会要求输入密码(虽然输什么都会通过,但体验上多一步)。
no_anon_password=YES
no\_anon\_password=YES
#全局写权限总闸 (write_enable=NO)
#这是 FTP 服务器的一个“总保险"。只有当这里设为 YES 时,
#后面的 anon_upload_enable 等子写权限才会生效。设为 NO,匿名用户永远只读。
write_enable=NO
write\_enable=NO
#匿名用户上传权限 (anon_upload_enable=NO)
#控制匿名用户是否能在服务器上创建或上传新文件。
anon_upload_enable=NO
anon\_upload\_enable=NO
#匿名用户建目录权限 (anon_mkdir_write_enable=NO)
#控制匿名用户是否能在服务器上新建文件夹。
anon_mkdir_write_enable=NO
anon\_mkdir\_write\_enable=NO
#匿名用户其他写权限 (anon_other_write_enable=NO)
#控制匿名用户是否能执行 删除(DELETE) 或 重命名(RENAME) 操作。
anon_other_write_enable=NO
anon\_other\_write\_enable=NO
#==================== 第二部分:安全与访问控制 ====================
#隐藏真实用户 ID (hide_ids=YES)
#安全合规(CIS)要求。开启后,匿名用户执行 ls -l 查看文件时,
#原本属于 root 或 ftp 的文件属主会统一显示为 “ftp”,不暴露系统真实用户信息。
hide_ids=YES
hide\_ids=YES
#启用传输日志 (xferlog_enable=YES)
#开启后,所有的上传、下载、删除等操作都会记录到 /var/log/xferlog 中,便于后期审计和排错。
xferlog_enable=YES
xferlog\_enable=YES
#使用标准日志格式 (xferlog_std_format=YES)
#采用业界通用的 wu-ftpd 日志格式,方便后期用 awk、sed 或日志分析工具(如 GoAccess)进行处理。
xferlog_std_format=YES
xferlog\_std\_format=YES
#记录详细协议交互 (log_ftp_protocol=YES)
#强烈建议在调试阶段或日常开启。它会将 FTP 客户端和服务端的所有交互指令(如 USER,PASS, RETR)记录到日志中。
#如果遇到连接问题,这是最快的排错手段。
log_ftp_protocol=YES
log\_ftp\_protocol=YES
#使用本地系统时间 (use_localtime=YES)
#设为 YES 时,目录列表(ls)显示的时间是服务器本地时间(CST)。
#设为 NO 则默认使用 GMT(格林威治时间),国内用户查看时会差 8 个小时。
use_localtime=YES
use\_localtime=YES
#启用目录提示信息 (dirmessage_enable=YES)
#开启后,如果目录下存在 .message 文件,用户进入该目录时会自动显示文件内容。
#常用于发布免责声明或目录使用说明。
dirmessage_enable=YES
dirmessage\_enable=YES
#自定义欢迎横幅 (ftpd_banner=…)
#用户连接成功后看到的欢迎语。这里标明服务用途并带上 (CIS Compliant) 标签,
#体现运维的专业性和安全规范性。
ftpd_banner=Welcome to Anonymous FTP Service (CIS Compliant)
ftpd\_banner=Welcome to Anonymous FTP Service (CIS Compliant)
#==================== 第三部分:性能与系统兼容性 ====================
#启用主动模式数据连接 (connect_from_port_20=YES)
#FTP 有主动(PORT)和被动(PASV)两种模式。设为 YES 表示在主动模式下,
#服务端使用 20 端口向客户端发起数据连接。保持 YES 能兼容老旧的 FTP 客户端。
connect_from_port_20=YES
connect\_from\_port\_20=YES
#启用 IPv4 独立监听 (listen=YES)
#这是 vsftpd 在 CentOS 7 上的一个经典坑点。
#listen 和 listen_ipv6 不能同时为 YES。
#这里我们明确指定 vsftpd 只监听 IPv4 地址,避免启动失败。
listen=YES
listen=YES
#禁用 IPv6 监听 (listen_ipv6=NO)
#配合上面的 listen=YES 使用,确保服务只在 IPv4 环境下稳定运行。
listen_ipv6=NO
listen\_ipv6=NO
#PAM 认证模块名称 (pam_service_name=vsftpd)
#指定使用 /etc/pam.d/vsftpd 文件进行身份认证。
#这一步至关重要,如果漏掉,可能会导致本地用户也无法登录(虽然当前是匿名模式)。
pam_service_name=vsftpd
pam\_service\_name=vsftpd
#启用用户列表控制 (userlist_enable=YES)
#激活 vsftpd 的用户黑白名单机制。
userlist_enable=YES
userlist\_enable=YES
#指定用户列表文件路径 (userlist_file=…)
#黑名单/白名单所在的文件路径。
userlist_file=/etc/vsftpd/user_list
userlist\_file=/etc/vsftpd/user\_list
#列表行为设为黑名单 (userlist_deny=YES)
#设为 YES 表示:写在 user_list 文件里的用户**禁止**登录。
#这是系统的第一道防线,比如通常会把 root 写进去防止超级管理员被爆破。
userlist_deny=YES
userlist\_deny=YES
配置vsftpd本地用户(Local)
修改配置文件
vim /etc/vsftpd/vsftpd.conf
anonymous\_enable=NO
local\_enable=YES
write\_enable=YES
local\_umask=022
dirmessage\_enable=YES
xferlog\_enable=YES
xferlog\_enable=YES
connect\_from\_port\_20=YES
xferlog\_std\_format=YES
listen=YES
pam\_service\_name=vsftpd
userlist\_enable=YES
tcp\_wrappers=YES
chroot\_local\_user=YES
allow\_writeable\_chroot=YES
user\_config\_dir=/etc/vsftpd/vsftpd\_user\_conf
创建用户配置目录,要和配置文件中的目录保持一致
mkdir -pv /etc/vsftpd/vsftpd\_user\_conf
配置本地目录在刚才创建的目录中
vim /etc/vsftpd/vsftpd_user_conf/yxl
local_root=data/yxl
#查看
cat /etc/vsftpd/vsftpd_user_conf/yxl

创建用户yxl,并加入FTP组中,设置密码为“1”
useradd -g ftp yxl
echo 1 | passwd --stdin yxl
#查看
id yxl
创建刚才文件中的目录,并设置权限
mkdir -pv /data/yxl
#设置权限
chown -R yxl /data/yxl
chmod 755 -R /data/yxl
#查看是否成功
ls -ld /data/yxl
配置完成后重启
systemctl restart vsftpd
进行测试
7.1在ftp客户端中输入刚才创建的用户名和密码
可以创建
三种测试方法(零基础必做,全部验证通过才算完工)
测试 1:服务器本地命令行自测
ftp localhost
#输入:
#用户名:ftpuser
#密码:你刚才设置的密码
#执行操作:
pwd
#查看当前目录,被锁定在 /home/ftpuser
ls
#查看文件
mkdir test # 新建文件夹(测试上传权限)
quit
#退出
✅ 能登录、能列目录、能建文件夹 = 配置正常
测试 2:Windows 资源管理器测试
#查服务器 IP
ip addr
#打开此电脑,地址栏输入:
ftp://服务器 IP
#弹窗输入:
#账号:ftpuser
#密码:你设置的密码
✅ 能进入、能拖拽上传、能下载 = 业务可用
###测试 3:查看 FTP 日志(交付审计用)
tail -n 20 /var/log/xferlog
记录所有登录、上传、下载记录,可留档审计。
解决 530 报错-530 可能是 pam 认证问题
#重置pam文件
cat /opt/vsftpd.bak

重新覆盖文件,可能是pam的问题
cp -av /opt/vsftpd.bak /etc/pam.d/vsftpd
重新启动服务
systemctl restart vsftpd
虚拟用户
基础配置
1.安装vsftpfd + 工具
yum install -y vsftpd db-utils

2. 防火墙放行FTP
firewall-cmd --permanent --add-service=ftp
firewall-cmd --reload
3. SELinux放行(必做,否则权限报错)
setenfonce 0
vim /etc/selinux/config
#设置为disabled

4. 开机自启
systemctl enable vsftpd
创建虚拟用户账号密码文件
文件格式:一行账号,一行密码
vim /etc/vsftpd/vusers.txt
#写入以下内容(直接复制):
vuser1
123456
vuser2
123456
或者
cat >>/etc/vsftpd/vusers.txt<<'yxl'
vuser1
123456
vuser2
123456
yxl
生成认证数据库
db\_load -T -t hash -f /etc/vsftpd/vusers.txt /etc/vsftpd/vusers.db
chmod 600 /etc/vsftpd/vusers.db
创建 PAM 认证(让 vsftpd 识别虚拟用户)
cp -av /etc/pam.d/vsftpd /opt/vsftpd\_yxl\_202605121509\_v1.1.1.bak

vim /etc/pam.d/vsftpd
#写入 两行(直接复制):
auth required pam\_userdb.so db=/etc/vsftpd/vusers
account required pam\_userdb.so db=/etc/vsftpd/vusers
或者
cat >/etc/pam.d/vsftpd<<'yxl'
auth required pam\_userdb.so db=/etc/vsftpd/vusers
account required pam\_userdb.so db=/etc/vsftpd/vusers
yxl

创建统一系统映射用户(所有虚拟用户共用)
useradd -m -s /sbin/nologin vftpuser
为每个虚拟用户创建独立目录 + 权限
vuser1 目录(可读写)
mkdir -pv /home/vftpuser/vuser1
chown vftpuser:vftpuser /home/vftpuser/vuser1
vuser2 目录(只读)
mkdir -pv /home/vftpuser/vuser2
chown vftpuser:vftpuser /home/vftpuser/vuser2
创建独立权限配置目录
mkdir -pv /etc/vsftpd/vusers\_conf
1)给 vuser1 配置(可上传、可新建、可下载)
vim /etc/vsftpd/vusers\_conf/vuser1
写入:
local\_root=/home/vftpuser/vuser1
write\_enable=YES
anon\_upload\_enable=YES
anon\_mkdir\_write\_enable=YES
chroot 目录必须是只读权限,不能给可写!
chmod 755 /home/vftpuser
chmod 755 /home/vftpuser/vuser1
chmod 755 /home/vftpuser/vuser2
2)给 vuser2 配置(只能看、只能下载,不能上传)
vim /etc/vsftpd/vusers\_conf/vuser2
写入:
local\_root=/home/vftpuser/vuser2
write\_enable=NO
anon\_upload\_enable=NO
anon\_mkdir\_write\_enable=NO
覆盖 vsftpd 主配置(最终版!)
cp -av /etc/vsftpd/vsftpd.conf /opt/vsftpd.conf\_vuserconfig\_yxl\_202605121511\_v1.1.3
#清空文件
> /etc/vsftpd/vsftpd.conf
#写入配置文件
cat >> /etc/vsftpd/vsftpd.conf <<EOF
anonymous\_enable=NO
local\_enable=YES
guest\_enable=YES
guest\_username=vftpuser
pam\_service\_name=vsftpd
user\_config\_dir=/etc/vsftpd/vusers\_conf
allow\_writeable\_chroot=YES
write\_enable=YES
local\_umask=022
dirmessage\_enable=YES
xferlog\_enable=YES
connect\_from\_port\_20=YES
xferlog\_std\_format=YES
listen=YES
listen\_ipv6=NO
EOF
启动服务
systemctl restart vsftpd
systemctl status vsftpd
看到 active (running) 就成功!
完整测试(零基础必做)
1)查看可读写权限账号
#查看服务器 IP
#ip addr
#测试 1:vuser1(可读写)
#账号:vuser1
#密码:123456
#权限:上传、下载、新建文件夹
#测试命令:
ftp -n localhost <<EOF
user vuser1 123456
pwd
mkdir test123
ls
quit
EOF
✅ 能建目录 = 可读写权限正常
2)查看只读权限账号
#测试 2:vuser2(只读)
#账号:vuser2
#密码:123456
#权限:只能浏览、下载,不能上传、不能建目录
#测试命令:
ftp -n localhost <<EOF
user vuser2 123456
pwd
mkdir test123
ls
quit
EOF
✅ 无法创建目录 = 只读权限正常
Windows 资源管理器访问
win+r 输入ftp://你的服务器 IP
右击登录输入账号密码即可登录
测试
FTP 虚拟用户多账号交付清单
服务器 IP:
你的服务器 IP
账号 1(可读写)
账号:vuser1
密码:123456
权限:上传、下载、新建目录
目录:/home/vftpuser/vuser1

正确情况,无法删除

可以创建

账号 2(只读)
账号:vuser2
密码:123456
权限:仅浏览、下载
目录:/home/vftpuser/vuser2
安全说明
无系统账号,不占用 Linux 用户
目录独立隔离,互相看不到
权限精细化控制
日志可审计
正确情况,无法创建和删除

常见错误
530Login incorret
密码输错或用户没加入user_list
在这里插入图片描述
500 OOPS无法启动
配置里有非法参数,用上面的完整配置覆盖
能登录但无法上传,提示权限拒绝
重新执行SELinux放行 setsebool -P ftp_home_dir on
解决530报错问题
1. 把 /sbin/nologin 加入系统允许的 shell 列表(最关键!)
echo "/sbin/nologin" >> /etc/shells
2. 重启 vsftpd
systemctl restart vsftpd
3. 再次测试登录
ftp localhost
总结
文档主要配置vsfpd服务的完整流程,涵盖了环境准备,匿名用户,本地用户及虚拟用户的配置方法,权限管理
一,环境部署与基础准备
1.关闭防火墙
2.安装vsftpd
3.设置开机自启
4.防火墙
5.关闭SELinux
6.备份源配置
二,用户类型与配置详解
主要介绍了三种用户模式
1.匿名用户(Anonymous)
①清空配置,写入存匿名专用配置
②创建并加固/var/ftp目录
③编辑主配置文件(/etc/vsftpd/vsftpd.conf)
④确认vsftpd的端口
⑤重启服务并验证匿名可用性
⑥验证登录
2.本地用户(Local)
①创建FTP本地专用用户(禁止登录系统)
②写入本地用户专用配置
③配置用户白名单
④重启服务并检查状态
⑤测试
3.虚拟用户(Virtual)
①前置准备
②创建虚拟用户账号密码文件
③生成认证数据库
④创建PAM认证(让vsftpd识别虚拟用户)
⑤创建统一系统映射用户(所有虚拟用户公用)
⑥为每个用户创建独立目录+权限
⑦创建独立权限配置目录
⑧配置vsftpd主配置
⑨启动服务
⑩测试
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐

所有评论(0)