ubuntu lamp权限设置注意事项
小樊
39
2025-12-20 05:16:06
Ubuntu LAMP 权限设置注意事项
一 身份与运行用户
- 确保 Apache 以非特权用户运行,Ubuntu 默认是 www-data:www-data。可在 /etc/apache2/envvars 中确认或设置:
- 检查:grep -E ‘^export APACHE_RUN_USER|APACHE_RUN_GROUP’ /etc/apache2/envvars
- 如需调整:export APACHE_RUN_USER=www-data / APACHE_RUN_GROUP=www-data,然后重启 Apache
- 禁止以 root 身份运行 PHP 或 Web 进程,避免提权风险
- 开发/运维人员使用 sudo 执行管理任务,不要将网站目录交给 root 所有或给 www-data 赋过大权限
二 文件系统权限与所有权
- 基本所有权与权限建议(以 /var/www/html 为例):
- 所有权:将网站目录及内容的所有者设为 www-data:www-data
- 命令:sudo chown -R www-data:www-data /var/www/html
- 目录权限:755(rwxr-xr-x),保证可访问与可遍历
- 命令:find /var/www/html -type d -exec chmod 755 {} ;
- 文件权限:644(rw-r–r–),避免脚本被随意执行
- 命令:find /var/www/html -type f -exec chmod 644 {} ;
- 上传与缓存等需要写入的目录(如 uploads/、cache/、sessions/):
- 建议所有权仍为 www-data:www-data,权限 755;仅对需要写入的子目录按需放宽
- 若必须让开发者写入,可将开发者加入 www-data 组,目录组设为 www-data 并使用 775,但务必限制范围,避免全局放宽
- 禁止在生产环境使用 777,这会破坏最小权限原则
- 理解 umask:例如 umask 022 时,新文件通常为 644、新目录为 755,有助于保持一致的默认权限
三 数据库与敏感文件权限
- MySQL/MariaDB 权限:
- 遵循最小权限原则,避免使用 ALL PRIVILEGES
- 按库/表/主机精确授权,例如仅授予应用库必要权限
- 示例:CREATE USER ‘app’@‘localhost’ IDENTIFIED BY ‘强密码’; GRANT SELECT,INSERT,UPDATE,DELETE ON appdb.* TO ‘app’@‘localhost’; FLUSH PRIVILEGES;
- 配置文件与密钥:
- 如 wp-config.php、.env、config.inc.php 等含凭据的文件,权限建议 600(仅所有者可读写)
- 禁止将数据库 root 凭据放在 Web 可访问目录
- 日志与数据文件:
- 数据库数据目录与日志文件建议 640,仅属主与同组可读写,其他用户无权限
四 安全模块与访问控制
- AppArmor:Ubuntu 默认启用,建议保持开启并为 /usr/sbin/apache2 配置最小化策略,限制 Apache 只能访问必要路径
- SELinux:如系统启用,需为 httpd 配置相应策略;不建议直接禁用,若必须临时关闭仅用于排查
- 防火墙与端口:
- 仅开放必要端口,例如 UFW allow ‘Apache Full’,避免暴露数据库端口到公网
五 运维与审计实践
- 持续审计与加固:
- 定期检查关键目录权限:ls -lR /var/www/html
- 定期更新系统与软件包:sudo apt update && sudo apt upgrade
- 部署 fail2ban 防止暴力破解,使用 lynis 等工具做安全基线扫描
- 日志与监控:
- 确保 Apache 访问日志/错误日志 正常记录并定期审查,及时发现异常访问与错误
- 上传与执行控制:
- 禁止上传目录执行脚本(如 .php),可通过 php.ini 的 open_basedir 或应用层校验限制可访问路径
- 对上传文件做类型与内容校验,避免 WebShell 上传风险