LNMP环境下Ubuntu权限管理指南
在Ubuntu系统中搭建LNMP(Linux+Nginx+MySQL/MariaDB+PHP)环境后,合理的权限管理是保障服务器安全与稳定的核心环节。以下从基础用户管理、核心服务权限配置、文件系统权限设置及安全加固措施四方面展开说明:
Ubuntu遵循“最小权限原则”,建议为LNMP各组件创建专用用户/组,避免使用root用户直接运行服务。
sudo groupadd www-data # Nginx/PHP-FPM共用组
sudo useradd -g www-data -s /usr/sbin/nologin -d /nonexistent www-data # 禁止登录的www-data用户
sudo groupadd mysql
sudo useradd -g mysql -s /usr/sbin/nologin -d /nonexistent mysql
注:
-s /usr/sbin/nologin禁止用户登录,-d /nonexistent设置不存在的家目录,增强安全性。
sudo usermod -aG www-data deploy_user # 将deploy_user加入www-data组
Nginx作为Web服务器,需确保其能读取网站文件,但不能有过多写入权限。
user指令设置为www-data(默认已使用):sudo vim /etc/nginx/nginx.conf
# 找到"user nginx;"改为"user www-data;"
保存后重启Nginx使配置生效:sudo systemctl restart nginx
/var/www/html,需将所有权赋予www-data组,并设置合理权限:sudo chown -R www-data:www-data /var/www/html # 所有权归www-data组
sudo find /var/www/html -type d -exec chmod 755 {} \; # 目录权限755(所有者可读/写/执行,组和其他用户可读/执行)
sudo find /var/www/html -type f -exec chmod 644 {} \; # 文件权限644(所有者可读/写,组和其他用户可读)
数据库需严格控制用户权限,避免未授权访问或越权操作。
mysql -u root -p
CREATE DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; # 创建数据库
CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'StrongPassword123'; # 创建本地用户
GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'localhost'; # 授予数据库所有权限
FLUSH PRIVILEGES; # 刷新权限使变更生效
DELETE FROM mysql.user WHERE User='myuser' AND Host!='localhost'; # 删除非本地用户
FLUSH PRIVILEGES;
sudo chown mysql:mysql /etc/mysql/my.cnf # 所有权归mysql用户
sudo chmod 640 /etc/mysql/my.cnf # 仅所有者(mysql)可读写,组用户可读
PHP-FPM需与Nginx协同工作,通常与Nginx共用www-data用户/组。
/etc/php/8.1/fpm/pool.d/www.conf),设置user和group为www-data:sudo vim /etc/php/8.1/fpm/pool.d/www.conf
# 找到"user = www-data"和"group = www-data"(默认已使用),取消注释并确认
重启PHP-FPM使配置生效:sudo systemctl restart php8.1-fpm
sudo chown www-data:www-data /run/php/php8.1-fpm.sock # 权限需与PHP-FPM运行用户一致
Ubuntu默认使用AppArmor(类似CentOS的SELinux),用于限制进程权限,进一步增强安全性。
sudo aa-status # 查看AppArmor是否启用
/etc/default/grub,将GRUB_CMDLINE_LINUX_DEFAULT改为包含security=apparmor,然后更新GRUB并重启:sudo sed -i 's/GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"/GRUB_CMDLINE_LINUX_DEFAULT="quiet splash security=apparmor"/' /etc/default/grub
sudo update-grub
sudo reboot
/etc/apparmor.d/usr.sbin.nginx)。权限管理需持续维护,避免权限过度开放。
sudo find / -type d -perm 777 -exec chmod 755 {} \; # 修正目录权限
sudo find / -type f -perm 666 -exec chmod 644 {} \; # 修正文件权限
sudo apt update && sudo apt upgrade -y # 更新所有软件包
fail2ban防止暴力破解,auditd记录系统操作日志:sudo apt install fail2ban auditd # 安装工具
sudo systemctl enable --now fail2ban # 启用fail2ban
sudo systemctl enable --now auditd # 启用auditd
通过以上步骤,可构建一个安全、有序的LNMP权限管理体系,有效降低服务器被攻击的风险。需注意,权限设置需根据实际业务需求调整,避免因过度限制导致服务无法正常运行。