Ubuntu 14.04下/lib目录FTP写入权限拒绝问题求助
这问题其实很典型——ProFTP大概率是因为内置的路径过滤规则,拦截了名为lib的目录操作,哪怕这个目录是在你的/public_html下而非系统级的/lib。下面是具体的排查和解决步骤:
一、检查ProFTP的路径过滤配置
ProFTP默认会通过PathDenyFilter设置,阻止对某些敏感文件名/目录名的操作,lib作为系统核心目录的名称,很可能被包含在过滤规则里:
打开ProFTP的主配置文件:
vi /etc/proftpd/proftpd.conf搜索
PathDenyFilter关键字,你可能会看到类似这样的配置:PathDenyFilter \.(py|php|lib)$这类规则会匹配包含
lib的文件名/目录名,直接拒绝操作。修改过滤规则,把
lib从规则中移除,比如改成:PathDenyFilter \.(py|php)$要是规则是针对目录名的正则,就调整表达式确保不匹配你的
/public_html/lib目录。
二、检查虚拟主机或目录专属配置
如果你的/public_html是在虚拟主机配置中定义的(比如/etc/proftpd/vhosts.conf),检查对应<Directory>块里有没有额外限制:
<Directory /var/www/public_html> # 排查是否存在针对lib目录的单独拒绝规则 AllowOverride None Order allow,deny Allow from all </Directory>
确保没有专门针对lib目录的权限拦截配置。
三、查看ProFTP日志定位精准原因
要是上面的配置没找到问题,直接去ProFTP的日志目录看详细错误信息,这是最靠谱的排查方式:
tail -f /var/log/proftpd/proftpd.log
同时尝试通过FTP写入lib目录,日志里会明确显示拒绝原因——是权限不足,还是被过滤规则拦截,一眼就能看明白。
四、排除SELinux干扰(Ubuntu默认不启用)
虽然Ubuntu默认没开SELinux,但如果你手动安装并启用了,可以临时关闭测试:
getenforce # 查看当前SELinux状态 setenforce 0 # 临时关闭SELinux
要是关闭后能正常写入,再调整SELinux规则允许该目录的FTP操作即可。
为什么重命名目录能解决?
因为ProFTP的过滤规则是基于目录名称匹配的,重命名为lib-new后,名称不再匹配过滤规则,操作自然就被允许了——这也侧面验证了是名称拦截的问题。
内容的提问来源于stack exchange,提问作者a1phanumeric

