怎样在 Apache 中配置安全的文件系统掩码

作者:袖梨 2026-07-11
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

相关文章

精彩推荐