Apache实现只读访问权限的核心是:网站根目录设755、静态文件设644、上传目录隔离并禁执行,配置文件移出Web路径且设600,配合Options -Indexes -ExecCGI、AllowOverride None及FilesMatch屏蔽敏感文件。

在 Apache 中实现只读文件系统访问权限,核心是让 Web 服务器进程(如 www-data 或 apache)仅有读取权,且无法写入、修改或执行非必要文件——这既是安全加固的关键,也是防止恶意上传、配置篡改和模板注入的基础措施。
文件与目录的系统级只读权限
操作系统层面的权限是第一道防线。Apache 进程只需读取静态资源(HTML/CSS/JS/图片等),不应拥有写权限:
- 网站根目录(如
/var/www/html)设为755:所有者可读写执行,组和其他用户仅可读、可进入(r-x) - 所有静态文件统一设为
644:所有者可读写,组和其他用户仅可读(rw-r--r--) - 禁用上传目录(如
/uploads)以外的任何可写路径;若必须存在上传目录,应单独隔离并设为755,且禁止执行(通过Options -ExecCGI -Includes控制) - 配置文件(如
.htaccess、php.ini引用路径)建议设为600或640,并确保不在 Web 可访问路径下
Apache 配置中禁用写入与执行能力
仅靠文件权限不够,还需在 Apache 主配置或 <directory></directory> 块中关闭潜在风险功能:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 关闭目录列表:
Options -Indexes,避免暴露文件结构 - 禁止脚本执行:
Options -ExecCGI -Includes -FollowSymLinks(除非明确需要) - 限制 .htaccess 覆盖能力:
AllowOverride None,防止运行时被恶意覆盖权限规则 - 对静态资源目录显式拒绝写操作(虽系统层已无写权,但双重保险):
Require all granted+Options -All,再配合Header set X-Content-Type-Options "nosniff"防 MIME 类型混淆
阻止敏感文件被直接访问
即使文件系统只读,攻击者仍可能尝试读取配置、日志、备份等敏感文件。需主动屏蔽:
- 在主配置或
<directory></directory>中添加文件类型拦截:
Require all denied
</FilesMatch>
- 将敏感文件(如密码文件
.htpasswd)放在 Web 根目录之外,例如/etc/apache2/.htpasswd,并设权限为600 - 禁用对隐藏文件的访问:
RedirectMatch 404 /\.ht(写入虚拟主机或主配置)
验证与持续防护
设置后务必验证效果,并建立检查机制:
- 用
ls -l /var/www/html确认所有文件无w权限给组/其他用户,目录无w权限给非所有者 - 用
ps aux | grep apache查看进程运行用户,再用sudo -u www-data ls -l /var/www/html模拟其实际访问能力 - 检查错误日志(
/var/log/apache2/error.log)是否有Permission denied报错——正常情况下,只读配置不应导致 403,除非误删了所有者的读权限 - 定期扫描可写目录:
find /var/www -type d -perm -o+w 2>/dev/null,及时清理异常权限

















