温馨提示×

CentOS Apache权限设置

小樊
44
2025-12-17 13:15:57
栏目: 智能运维

CentOS 上 Apache 权限设置实操指南

一 运行身份与最小权限原则

  • 确认或设置 Apache 的运行身份:编辑 /etc/httpd/conf/httpd.conf,设置 UserGroup(两种常见做法,二选一或保持一致)。
    示例一(系统自带账户):
    User apache
    Group apache
    
    示例二(自建 www 账户,推荐为服务专用且禁止登录):
    sudo groupadd www
    sudo useradd -g www -s /sbin/nologin www
    # 在 httpd.conf 中
    User www
    Group www
    
  • 原则:进程只以最小必要权限运行;网站内容由部署用户(如 centos)拥有,Apache 仅授予读取(必要时写入)能力。

二 目录与文件权限推荐值

  • 典型目录结构:/var/www/example.com/public_html
  • 推荐权限与属主(以运行身份为 www:www 为例):
    • 网站根与目录:chown -R centos:www /var/www/example.com;目录 chmod 755(所有者读写执行,组读执行,其他无)。
    • 网站文件:find /var/www -type f -exec chmod 640 {} ;(所有者读写,组读,其他无)。
    • 需要写入的子目录(如缓存、上传):目录 750,必要时文件 660/770;仅对确需写入的目录放开,避免过度授权。
      示例:
    sudo mkdir -p /var/www/example.com/public_html
    sudo chown -R centos:www /var/www/example.com
    find /var/www/example.com -type d -exec chmod 755 {} \;
    find /var/www/example.com -type f -exec chmod 640 {} \;
    # 例如仅对上传目录放开
    sudo chown -R centos:www /var/www/example.com/public_html/uploads
    find /var/www/example.com/public_html/uploads -type d -exec chmod 750 {} \;
    find /var/www/example.com/public_html/uploads -type f -exec chmod 660 {} \;
    
  • 说明:上述属主与权限组合确保开发者(如 centos)可写,Apache(www)可读,其他用户无权限,符合最小权限原则。

三 SELinux 与访问控制

  • 若启用了 SELinux,需确保目录具有正确的安全上下文;常见为 httpd_sys_content_t(只读内容)。
    # 只读内容
    sudo semanage fcontext -a -t httpd_sys_content_t "/var/www/example.com(/.*)?"
    sudo restorecon -Rv /var/www/example.com
    
    # 需要写入的目录(如 uploads、cache)设置为 httpd_sys_rw_content_t
    sudo semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/example.com/public_html/(uploads|cache)(/.*)?"
    sudo restorecon -Rv /var/www/example.com/public_html
    
  • 目录访问控制示例(在虚拟主机配置中):
    <Directory /var/www/example.com/public_html>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
    
  • 不建议长期关闭 SELinux(如 setenforce 0);应通过正确的 fcontext/布尔值 进行精细化放行。

四 防火墙与端口放行

  • 放行 HTTP/HTTPS 服务:
    sudo firewall-cmd --permanent --add-service=http
    sudo firewall-cmd --permanent --add-service=https
    sudo firewall-cmd --reload
    
  • 如使用云厂商安全组,也需同步放行 80/443 端口。

五 变更生效与验证

  • 语法检查与重载:
    sudo httpd -t                 # 语法检查
    sudo systemctl reload httpd    # 平滑重载
    # 或重启
    sudo systemctl restart httpd
    
  • 快速验证:
    • 访问站点首页与静态资源,确认 200 返回;
    • 验证上传/写入目录是否按预期可写;
    • 查看错误日志定位权限问题:/var/log/httpd/error_log

0