CentOS7 vsftp 500 OOPS权限错误排查(SELinux)

2025-09-16 21:14:25 108
魁首哥

近期有些网友想要了解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就不会抓瞎。

分享
海报
108
上一篇:如何去掉WPS中的批注?去掉WPS中的批注的方法 下一篇:CentOS7 vim粘贴自动缩进关闭方法:一键解决代码错位烦恼

忘记密码?

图形验证码