LNMP环境下用户管理的核心流程与安全实践
系统用户是LNMP服务运行的基础,需遵循“专用用户”原则,避免使用root直接运行服务。
adduser命令创建专用用户(如www-data用于Nginx/PHP-FPM、mysql用于MySQL),命令示例:sudo adduser www-data(创建时会提示设置密码及个人信息,若无需交互可使用sudo adduser --disabled-password --gecos "" www-data)。deluser命令彻底删除用户(可选--remove-home删除主目录),示例:sudo deluser www-data --remove-home。passwd命令重置用户密码,示例:sudo passwd www-data。usermod命令将用户添加到指定组(如www-data组),示例:sudo usermod -aG www-data username(-aG表示追加组,避免移除原有组)。Nginx作为Web服务器,需以非root用户运行,降低潜在安全风险。
/etc/nginx/nginx.conf,找到user指令并设置为专用用户(如www-data),示例:user www-data;(需确保该用户在系统中存在)。/var/www/html),执行以下命令:sudo chown -R www-data:www-data /var/www/html # 递归修改所有者 sudo find /var/www/html -type f -exec chmod 644 {} \; # 文件权限644(所有者可读写,其他用户只读) sudo find /var/www/html -type d -exec chmod 755 {} \; # 目录权限755(所有者可读写执行,其他用户可读执行) 数据库用户需遵循“最小权限”原则,避免过度授权。
mydatabase、myuser、mypassword为实际名称):CREATE DATABASE mydatabase; -- 创建数据库 CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'mypassword'; -- 创建本地用户 GRANT ALL PRIVILEGES ON mydatabase.* TO 'myuser'@'localhost'; -- 授权(仅限指定数据库) FLUSH PRIVILEGES; -- 刷新权限使变更生效 localhost,示例:UPDATE mysql.user SET Host='localhost' WHERE User='myuser'; FLUSH PRIVILEGES;。DROP USER命令,示例:DROP USER 'myuser'@'localhost'; FLUSH PRIVILEGES;。PHP-FPM处理PHP请求时,需与Nginx用户保持一致,避免权限冲突。
/etc/php/7.x/fpm/pool.d/www.conf,7.x为PHP版本),找到user和group指令并设置为与Nginx一致(如www-data),示例:user = www-data group = www-data sudo chown www-data:www-data /run/php/php7.x-fpm.sock。sudo systemctl restart php7.x-fpm。合理的权限设置是防止未授权访问的关键。
644(所有者可读写,其他用户只读);755(所有者可读写执行,其他用户可读执行);wp-config.php、数据库配置文件)权限设为600(仅所有者可读写)。sudo chmod 600 /var/www/html/wp-config.php # 敏感文件权限 sudo chown -R www-data:www-data /var/www/html # 递归修改网站目录所有者 若系统启用SELinux或AppArmor,需调整策略允许服务访问必要资源。
sudo setsebool -P httpd_can_network_connect_db 1(允许HTTP服务连接数据库);或通过audit2allow生成自定义策略。sudo aa-enforce /etc/apparmor.d/usr.sbin.nginx(强制启用Nginx的AppArmor profile)。777的文件),示例:sudo find / -type d -perm 777 -exec chmod 755 {} \; # 修复目录权限 sudo find / -type f -perm 666 -exec chmod 644 {} \; # 修复文件权限 sudo apt update && sudo apt upgrade。ufw限制端口访问,仅允许HTTP(80)、HTTPS(443)等必要端口,示例:sudo ufw allow 80/tcp; sudo ufw allow 443/tcp; sudo ufw enable。