贵州遵义·新蒲新区 18984903068

ERP应用

Ubuntu 22.04 vsftpd 多用户隔离(FTP)正确执行方案

2026-03-12 15:17:13 0 Comments

一、方案概述
本方案针对 Ubuntu 22.04 系统,基于 vsftpd 搭建多用户 FTP 服务,实现以下核心需求(已验证成功):
•多用户独立隔离:每个用户登录后自动进入专属目录,无法查看、访问其他用户文件/目录
•权限管控:所有用户仅可上传、查看自己的文件,无法删除任何文件(自身+他人)
•目录禁锢:用户无法通过“后退”操作逃逸到上级目录,彻底锁死在专属目录内
•兼容性:新增用户不影响原有用户正常使用,配置稳定无报错
核心目录:所有用户专属目录统一放在 /mnt/designfile/ 下(如 /mnt/designfile/muxiaosu、/mnt/designfile/yanshijie),目录需提前创建。
二、前期基础配置(vsftpd 核心配置,一次性配置,终身复用)
2.1 打开 vsftpd 配置文件
bash
sudo nano /etc/vsftpd.conf
2.2 覆盖配置内容(清空原有配置,粘贴以下完整内容,适配Ubuntu 22.04 bug修复)
ini
listen=NO
listen_ipv6=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
chroot_local_user=YES
allow_writeable_chroot=YES
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
seccomp_sandbox=NO  # 修复Ubuntu 22.04 chroot禁锢失效bug
pasv_enable=YES
pasv_min_port=40000  # 被动模式端口,固定范围
pasv_max_port=40000
cmds_denied=DELE,RMD,RNFR,RNTO  # 禁止删除、重命名操作
local_root=/mnt/designfile/$USER  # 自动匹配用户名,登录直接进入专属目录
2.3 保存配置并重启 vsftpd 服务
bash
# 保存配置:Ctrl+O → 回车 → Ctrl+X
# 重启服务生效
sudo systemctl restart vsftpd
2.4 锁死上级目录权限(关键,防止用户逃逸)
bash
# 配置 /mnt、/mnt/designfile 权限,禁止用户读取上级目录内容
sudo chown root:root /mnt
sudo chmod 755 /mnt
sudo chown root:root /mnt/designfile
sudo chmod 111 /mnt/designfile  # 仅允许进入,无法读取目录列表,彻底防止逃逸
三、新增FTP用户(通用步骤,适用于所有新用户,已验证muxiaosu、yanshijie、luoli)
前提:用户专属目录(/mnt/designfile/用户名)已提前创建,无需重复创建。
3.1 新增用户(以yanshijie、luoli为例,替换用户名为需要新增的用户名即可)
bash
# 新增yanshijie用户,禁止系统登录,仅允许FTP登录
sudo useradd -d /mnt/designfile/yanshijie -s /sbin/nologin yanshijie

# 新增luoli用户,禁止系统登录,仅允许FTP登录
sudo useradd -d /mnt/designfile/luoli -s /sbin/nologin luoli
3.2 给新增用户设置FTP登录密码
bash
# 给yanshijie设置密码(输入两次密码,密码不可见,按回车确认)
sudo passwd yanshijie

# 给luoli设置密码
sudo passwd luoli
3.3 配置用户专属目录权限(核心隔离步骤,必须执行)
bash
# 配置yanshijie目录权限:仅本人可访问,他人不可见、不可操作
sudo chown root:root /mnt/designfile/yanshijie
sudo chown yanshijie:yanshijie /mnt/designfile/yanshijie
sudo chmod 700 /mnt/designfile/yanshijie

# 配置luoli目录权限:与yanshijie一致
sudo chown root:root /mnt/designfile/luoli
sudo chown luoli:luoli /mnt/designfile/luoli
sudo chmod 700 /mnt/designfile/luoli
3.4 重启vsftpd服务,使新增用户生效
bash
sudo systemctl restart vsftpd
四、验证效果(必做,确保配置生效)
用XFTP登录每个用户,验证以下5点,全部满足即为成功:
1.登录后自动进入专属目录(如yanshijie登录→/mnt/designfile/yanshijie);
2.点击“后退”无法逃逸到上级目录(/mnt/designfile 不可见);
3.无法查看、访问其他用户(如muxiaosu、luoli)的目录和文件;
4.可正常上传、查看自己的文件,无法删除任何文件(自身+他人);
5.原有用户(如muxiaosu)正常使用,不受新增用户影响。
五、常见问题排查(已验证有效,复用即可)
5.1 报错:usermod:用户 XXX 当前被进程使用
解决方案:无需执行usermod命令,本方案通过vsftpd配置local_root=/mnt/designfile/$USER,自动匹配用户目录,避免修改用户导致进程占用报错。
5.2 问题:用户可返回上级目录,看到其他用户文件
解决方案:重新执行上级目录权限配置,锁死逃逸路径:
bash
sudo chmod 111 /mnt/designfile
sudo chmod 700 /mnt/designfile/用户名  # 重新配置对应用户目录权限
5.3 问题:新增用户无法连接FTP
排查步骤(按顺序执行):
1.检查XFTP登录参数:协议FTP、端口21、用户名/密码正确;
2.检查vsftpd服务状态:sudo systemctl status vsftpd,未启动则重启;
3.重新配置用户目录权限(参考3.3步骤);
4.开放被动模式端口:sudo ufw allow 40000/tcp,重启防火墙sudo ufw restart;
5.删除用户重新创建:sudo userdel 用户名,再重复3.1-3.4步骤。
5.4 问题:用户可删除文件
解决方案:检查vsftpd配置,确保存在以下配置,重启服务生效:
ini
cmds_denied=DELE,RMD,RNFR,RNTO
六、注意事项(关键,避免配置失效)
•所有命令需用sudo执行,确保权限足够;
•新增用户时,必须提前创建专属目录(/mnt/designfile/用户名);
•禁止修改vsftpd.conf中已配置的核心参数(如seccomp_sandbox=NO、local_root等);
•每次新增用户或修改权限后,必须重启vsftpd服务;
•不要执行usermod命令修改用户家目录,避免进程占用报错;
•云服务器需在安全组放行21端口、40000端口,否则无法连接。
七、复盘总结(核心要点,方便快速复用)
本方案成功核心:vsftpd配置修复Ubuntu 22.04 chroot bug + 上级目录权限锁死 + 用户目录700权限隔离 + 禁止删除命令,四者结合实现多用户完全隔离。
复用重点:后续新增用户,仅需执行“3.新增FTP用户”步骤,无需重新配置vsftpd核心参数,确保操作高效无偏差。