useradd -d /home/lch -g root lch
# -d 家目錄 -g 主群組 -s 指定 shell(如 /bin/bash)
passwd lch
# 查看使用者群組
groups lch
# 變更主群組(-g)
usermod -g www lch
# 附加次要群組(-G,覆蓋原有次要群組)
usermod -G root,www lch
# 單純新增次要群組(-aG)
usermod -aG docker lch
userdel -r lch # -r 連同家目錄一併刪除
# 基礎安全
anonymous_enable=NO # 禁止匿名登入
local_enable=YES # 允許本地使用者
write_enable=YES # 允許寫入
local_umask=022 # 上傳檔案權限遮罩
# 使用者清單控制(白名單模式)
userlist_enable=YES
userlist_deny=NO # NO=白名單,YES=黑名單
userlist_file=/etc/vsftpd/user_list
# chroot 限制使用者無法跳出家目錄
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
# 注:被列入 chroot_list 的使用者「不受」chroot 限制
# 若想「所有使用者都 chroot」,設定 chroot_local_user=YES 並留空 chroot_list
# 1. 允許 FTP 登入的使用者白名單
echo "lch" >> /etc/vsftpd/user_list
# 2. 需要「不受 chroot 限制」的使用者(如管理員)
echo "admin" >> /etc/vsftpd/chroot_list
預設情況下,使用者屬於同群組可互相存取。強制 chroot 隔離:
/etc/vsftpd/vsftpd.conf:chroot_local_user=YES # 所有本地使用者 chroot 到家目錄allow_writeable_chroot=YES # 允許家目錄可寫(vsftpd 2.3.5+ 安全要求)service vsftpd restart# 允許 FTP 讀寫家目錄
setsebool -P ftp_home_dir on
# 允許 FTP 完整存取
setsebool -P allow_ftpd_full_access on
# 查看 FTP 相關布林值
getsebool -a | grep ftp
# iptables
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
# 被動模式需開放資料連接埠範圍(vsftpd.conf 設定 pasv_min_port/pasv_max_port)
iptables -A INPUT -p tcp --dport 40000:40100 -j ACCEPT
# firewalld
firewall-cmd --permanent --add-service=ftp
firewall-cmd --permanent --add-port=40000-40100/tcp
firewall-cmd --reload
# 本機測試
ftp localhost
# 輸入 lch / 密碼
# 成功登入後
ls
put test.txt
get test.txt
bye
systemctl enable --now vsftpdapt install vsftpd,配置檔在 /etc/vsftpd.confSubsystem sftp internal-sftp + ChrootDirectory %h 在 /etc/ssh/sshd_config,無需額外 FTP 服務,更安全。遵循「建立帳號 → 配置 vsftpd 白名單與 chroot → SELinux/防火牆放行 → 測試驗證」流程,即可建立安全可控的 FTP 存取環境。