真正有效的细粒度权限锁定是让攻击者“能传上去,但跑不起来、读不到、出不去”:上传目录禁用脚本解析与执行位;真实文件存于Web根目录之外;上传层强制内容校验与重命名;遵循系统级ACL与最小权限原则。
不能靠 chattr +i 锁定 Web 根目录来防非法代码写入——它会直接导致网站功能瘫痪,且无法识别合法上传与恶意文件的区别。真正有效的细粒度权限锁定,是让攻击者“能传上去,但跑不起来、读不到、出不去”。
这是最直接、见效最快的防线。恶意 PHP 文件即使被上传,只要服务器不解析它,就只是个普通文本。
/var/www/html/uploads/ 对应的 <Directory> 块中加入:php_flag engine off 或 AddHandler default-handler .php .phtml .php3
location ~ ^/uploads/.*.php$ { return 403; }
chmod -x /var/www/html/uploads(确保该目录下所有文件默认无 x 权限)从根本上切断攻击者通过 URL 直接访问上传文件的路径。Web 服务进程仍可读取,但浏览器无法直连。
/var/www/app-data/uploads/(不在 /var/www/html 下)/download?id=abc123
https://site.com/uploads/shell.php 触发执行不信任任何客户端传来的扩展名、MIME 类型或文件头伪装。必须服务端二次验证。
finfo_file() 或 exif_imagetype() 检查真实文件类型image/jpeg, application/pdf),其他一律拒绝7a2f9e1d.pdf),丢弃原始文件名让 Web 进程只拥有它真正需要的权限,哪怕配置出错,破坏范围也有限。
www-data)仅对 /var/www/html 及其子目录有 r-x(读+执行)权限,禁止写入 /etc、/root、/var/log 等敏感路径
setfacl -m g:auditors:rx /var/www/html/uploads
setfacl -d -m g:www-data:rw /var/www/html/uploads