Ubuntu FTPServer 权限冲突排查与修复指南
一、先定位冲突类型
ls -ld /path;递归查看:ls -lR /pathid ftpusercat /etc/vsftpd.conf | grep -E '^(write_enable|chroot|allow_writeable_chroot)'sudo tail -n50 /var/log/vsftpd.logsestatus、ls -Zd /path、chcon -Rt ftp_home_t /path二、按场景解决权限冲突
sudo chmod 755 /home/ftpusersudo mkdir -p /home/ftpuser/uploadsudo chown ftpuser:ftpuser /home/ftpuser/uploadsudo chmod 775 /home/ftpuser/upload/etc/vsftpd.conf 中加入 allow_writeable_chroot=YES(仅在确实需要可写根目录时使用)。sudo systemctl restart vsftpd。write_enable=YES(全局开关)。anonymous_enable=YES 且 anon_upload_enable=YES、anon_mkdir_write_enable=YES 同时开启,并确保匿名根目录可写(不建议对根目录 777,通常仅对子目录可写)。sudo systemctl restart vsftpd。/etc/ftpusers(该文件列出禁止通过 FTP 登录的系统账号,如 root 常被默认列入)。三、推荐的目录与权限模板
/home/ftpuser → chmod 755,chown ftpuser:ftpuser/home/ftpuser/upload → chmod 775,chown ftpuser:ftpuser(按需再设 setgid 保持子目录组一致:chmod g+s /home/ftpuser/upload)chroot_local_user=YES,如需可写根目录再考虑 allow_writeable_chroot=YESchmod 755、chown root:rootchmod 777 或 775 并指定属主/属组anonymous_enable=YES,anon_upload_enable=YES,anon_mkdir_write_enable=YES四、防火墙与被动模式端口放行
/etc/vsftpd.conf 中设置端口范围,例如:pasv_enable=YES,pasv_min_port=30000,pasv_max_port=31000sudo ufw allow 30000:31000/tcpsudo ufw reloadsudo firewall-cmd --permanent --add-service=ftp && sudo firewall-cmd --reload五、最小化配置示例与验证
sudo adduser ftpusersudo mkdir -p /home/ftpuser/uploadsudo chown ftpuser:ftpuser /home/ftpuser/uploadsudo chmod 755 /home/ftpuser && sudo chmod 775 /home/ftpuser/upload/etc/vsftpd.conf(关键项):
anonymous_enable=NOlocal_enable=YESwrite_enable=YESchroot_local_user=YESallow_writeable_chroot=NO(保持根目录只读,推荐)pasv_enable=YES,pasv_min_port=30000,pasv_max_port=31000sudo systemctl restart vsftpdsudo ufw allow 21/tcp;sudo ufw allow 30000:31000/tcp;sudo ufw reloadftp localhost(登录后尝试 put/get)