centos lnmp如何进行权限管理
导读:CentOS LNMP 权限管理实操指南 一 核心原则 最小权限原则:各组件以非 root运行,按“Nginx 只读静态资源、PHP-FPM 写上传与缓存、数据库最小权限”划分能力边界。 身份与组分离:为 Web 服务创建专用用户与组(如...
CentOS LNMP 权限管理实操指南
一 核心原则
- 最小权限原则:各组件以非 root运行,按“Nginx 只读静态资源、PHP-FPM 写上传与缓存、数据库最小权限”划分能力边界。
- 身份与组分离:为 Web 服务创建专用用户与组(如 webuser),Nginx、PHP-FPM 统一以该身份运行,便于权限收敛与审计。
- 权限最小化:目录多用750,文件多用640,敏感配置600;上传目录禁止执行;必要时用 ACL 做细粒度授权。
- 强化周边:启用 firewalld 仅开放 22/80/443(数据库端口仅内网),禁用 root 远程登录,定期更新与审计。
二 用户与运行身份
- 创建专用 Web 用户与组(示例:webuser):
- 创建用户:
sudo adduser -r -s /sbin/nologin webuser - 将站点目录属主设为 webuser:
sudo chown -R webuser:webuser /var/www/html
- 创建用户:
- Nginx 运行身份:
- 编辑 /etc/nginx/nginx.conf:
user nginx;(或统一改为 webuser 以便与 PHP-FPM 一致) - 重启:
sudo systemctl restart nginx
- 编辑 /etc/nginx/nginx.conf:
- PHP-FPM 运行身份与池配置:
- 编辑 /etc/php-fpm.d/www.conf:
user = webuser、group = webuser - 与 Nginx 通信套接字权限(按需):
listen.owner = nginx、listen.group = nginx、listen.mode = 0660 - 重启:
sudo systemctl restart php-fpm
- 编辑 /etc/php-fpm.d/www.conf:
- 数据库运行身份(系统层):
- 确保 /var/lib/mysql 属主为 mysql:mysql:
sudo chown -R mysql:mysql /var/lib/mysql - 权限建议:750(仅 mysql 组可读写执行)
- 确保 /var/lib/mysql 属主为 mysql:mysql:
三 文件与目录权限落地
- 标准站点目录(示例:/var/www/html):
- 目录:
find /var/www/html -type d -exec chmod 750 { } \; - 文件:
find /var/www/html -type f -exec chmod 640 { } \; - 属主:
sudo chown -R webuser:webuser /var/www/html
- 目录:
- 上传目录(示例:/var/www/html/uploads):
- 禁止脚本执行:
chmod 750 /var/www/html/uploads - 仅 webuser 可写:
chown webuser:webuser /var/www/html/uploads
- 禁止脚本执行:
- 敏感配置与密钥:
- Nginx、PHP、数据库配置等:
chmod 600 /path/to/config - 私钥(如 /etc/pki/tls/private/*.key):
chmod 600且仅 root 可访问
- Nginx、PHP、数据库配置等:
- 需要跨用户协作时,用 ACL 精确授权(示例:给 deploy 用户读取站点目录):
- 设置:
setfacl -R -m u:deploy:rX /var/www/html - 查看:
getfacl /var/www/html
- 设置:
- 权限速查表:
- 目录:750(rwxr-x—)适合代码与上传目录
- 文件:640(rw-r-----)适合源码、静态资源
- 配置:600(rw-------)适合密钥与敏感配置
- 临时上传:600(rw-------)并隔离执行权限
四 数据库与网络权限
- 数据库账户最小权限:
- 登录:
mysql -u root -p - 创建应用用户(仅本地):
CREATE USER 'webuser'@'localhost' IDENTIFIED BY 'StrongPass!'; - 授权最小集:
GRANT SELECT, INSERT, UPDATE, DELETE ON appdb.* TO 'webuser'@'localhost'; - 刷新:
FLUSH PRIVILEGES;
- 登录:
- 远程访问策略:
- 默认仅本地:
bind-address = 127.0.0.1(如需远程仅对受控网段开放) - 防火墙仅内网放行 3306:
sudo firewall-cmd --permanent --zone=internal --add-port=3306/tcp & & sudo firewall-cmd --reload
- 默认仅本地:
- 安全基线:
- 运行
sudo mysql_secure_installation完成 root 强口令、匿名用户移除、测试库删除与远程 root 禁用
- 运行
五 SELinux 与防火墙
- SELinux(默认启用,优先用策略而非关闭):
- 状态检查:
sestatus - 目录上下文(示例将站点目录标记为 httpd 可读):
sudo semanage fcontext -a -t httpd_sys_content_t "/var/www/html(/.*)?"sudo restorecon -Rv /var/www/html
- 特定访问需求(如允许 Nginx 连接数据库):
sudo setsebool -P httpd_can_network_connect_db 1 - 临时禁用仅用于排障:
sudo setenforce 0(生产不建议)
- 状态检查:
- 防火墙(firewalld):
- 放行 Web:
sudo firewall-cmd --permanent --zone=public --add-service=http --add-service=https & & sudo firewall-cmd --reload - 仅内网放行数据库:
sudo firewall-cmd --permanent --zone=internal --add-port=3306/tcp & & sudo firewall-cmd --reload
- 放行 Web:
- 风险提示:关闭 SELinux 或过度放宽策略会降低系统安全,优先使用正确的类型与布尔值配置
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: centos lnmp如何进行权限管理
本文地址: https://pptw.com/jishu/783429.html
