近期有些网友想要了解CentOS7 vsftp 500 OOPS权限错误排查(SELinux)的相关情况,小编通过整理给您分析,根据自身经验分享CentOS7 vsftp 500 OOPS权限错误排查(SELinux)有关知识。
CentOS7 vsftp 500 OOPS权限错误排查(SELinux)
凌晨两点,刚把网站包扔到服务器,vsftp一登录就甩脸子:500 OOPS: cannot change directory。日志里干干净净,目录权限看着也没毛病,很多人在这一步直接懵掉。其实问题多半藏在SELinux里,只是它不说话,默默把请求掐掉。下面把踩坑过程拆开,照着敲,十分钟就能让ftp乖乖听话。
先确认是不是SELinux惹的祸
很多教程一上来就让setenforce 0,暴力是暴力,可关了SELinux服务器裸奔,真出事没人替你背锅。先别急着关,用下面这条命令看看拒绝记录:
grep avc /var/log/audit/audit.log | grep ftp
如果蹦出一堆avc: denied { read write },基本坐实SELinux在拦路。没有记录也别得意,可能是日志刷太快,先装个setroubleshoot再跑一遍:
yum -y install setroubleshoot-server
装完重新触发错误,再执行:
sealert -a /var/log/audit/audit.log
系统会给出一段超详细的“人话”提示,包括哪个目录被拦、需要打什么标签,直接抄答案最省事。
给目录打标签,让SELinux认路
vsftp默认只能读写/var/ftp下边的内容,把网站目录扔到/home/www还想直接访问?SELinux第一个不答应。假设你的网站目录是/home/www/web1,两步搞定:
1. 永久修改目录标签:
semanage fcontext -a -t public_content_rw_t "/home/www/web1(/.*)?"
2. 立即生效:
restorecon -Rv /home/www/web1
如果ftp账号需要上传,还得开布尔值:
setsebool -P ftpd_full_access on
一条命令,读写权限全放通,比chmod 777那种“裸奔式”安全得多。
别忽略家目录的“小尾巴”
有些同学把用户家目录改成自定义路径,比如/data/ftp/user1,结果登录依旧500。看权限没错,再看标签:家目录默认标签是user_home_dir_t,ftp进程拿它没辙。同样两板斧:
semanage fcontext -a -t user_home_dir_t "/data/ftp(/.*)?"
restorecon -Rv /data/ftp
如果该目录还要给多人上传,再补一句:
setsebool -P allow_ftpd_anon_write on
踩完这个坑你会发现,SELinux并不是“麻烦制造机”,而是“免费保安”,给它一句指令,它替你挡子弹。
本地权限也要对得上
SELinux放行后,还有最后一道闸:文件系统权限。假设ftp用户叫webftp,目录/home/www/web1,最简配置:
chown -R webftp:webftp /home/www/web1
chmod -R 755 /home/www/web1
需要上传的子目录再单独给写权限:
chmod 775 /home/www/web1/upload
到这里,500 OOPS基本销声匿迹。重启vsftpd:
systemctl restart vsftpd
用FileZilla再连一次,看到目录列表蹦出来,长舒一口气。
一张图记牢排查顺序
1. 看日志:audit.log有没有avc拒绝。
2. 打标签:semanage + restorecon组合拳。
3. 开布尔:ftpd_full_access、allow_ftpd_anon_write。
4. 查权限:chown、chmod别手抖。
按这个顺序来,五分钟定位,十分钟修复,再遇到500 OOPS就不会抓瞎。








