一、方案概述
本方案針對 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核心參數,確保操作高效無偏差。