Apache不直接支持umask配置指令,需通过systemd的UMask=0027参数设定;同时严格限制配置、网站根目录、日志目录的属主与权限,并禁用AllowOverride、以低权限用户运行。
Apache 本身不直接提供“文件系统掩码”(umask)的配置指令,但它的安全运行高度依赖于启动时继承的系统 umask 值,以及服务运行用户对关键目录(如 DocumentRoot、日志、配置文件)的权限控制。真正起作用的是 让 Apache 进程以低权限用户启动,并确保其工作目录权限严格受限,而非在 httpd.conf 里写 umask。
确认并设置 Apache 启动时的 umask
Apache 不读取配置文件中的 umask 设置,它继承父 shell 或 systemd 的 umask。因此需从服务管理层面控制:
- 在 systemd 环境下(主流 Linux 发行版),编辑 Apache 服务单元文件:
sudo systemctl edit httpd(RHEL/CentOS)或 sudo systemctl edit apache2(Debian/Ubuntu) - 添加以下内容强制设定安全掩码(例如 0027,即新创建文件默认权限为 640,目录为 750):
[Service]
UMask=0027 - 保存后重载并重启服务:
sudo systemctl daemon-reload && sudo systemctl restart apache2
严格限制关键目录的属主与权限
即使 umask 正确,若目录权限过宽,仍可能被越权读写。按功能区分设置:
-
配置目录(/etc/httpd 或 /etc/apache2):仅 root 可读写,组和其他用户无任何权限
sudo chmod 700 /etc/httpd && sudo chmod 600 /etc/httpd/conf/httpd.conf -
网站根目录(DocumentRoot,如 /var/www/html):属主为管理用户,属组为 apache/www-data,禁止组/其他用户写入
sudo chown -R webadmin:apache /var/www/html && sudo chmod -R 750 /var/www/html -
日志目录(/var/log/httpd 或 /var/log/apache2):属主 apache,属组 apache,权限 750;日志文件本身应为 640
sudo chown -R apache:apache /var/log/httpd && sudo chmod 750 /var/log/httpd
禁用 .htaccess 覆盖能力(防权限绕过)
若未严格管控 .htaccess,攻击者可能通过上传恶意配置文件覆盖权限规则。应在主配置中全局禁用:
- 在 <Directory "/var/www/html"> 块内设置:
AllowOverride None - 同时确保该目录下没有遗留可执行脚本(如 CGI、PHP 配置错误导致解析漏洞)
以专用低权限用户运行(关键防线)
避免 Apache 以 root 或高权限用户启动。修改主配置中的 User/Group 指令:
- 编辑 /etc/httpd/conf/httpd.conf 或 /etc/apache2/apache2.conf
- 将 User 和 Group 明确设为非特权账号,例如:
User apache
Group apache(RHEL)或
User www-data
Group www-data(Debian) - 确保该用户 不属于 wheel、root、sudo 等特权组,且 shell 设为 /usr/sbin/nologin