LNMP在Ubuntu上的权限管理技巧
为LNMP组件创建专用低权限用户,避免使用root运行服务。Ubuntu默认已存在www-data(Nginx/PHP-FPM)、mysql(MySQL)用户,若未存在可通过以下命令创建:
sudo groupadd www-data # 创建www-data组(若不存在)
sudo useradd -g www-data www-data # 创建www-data用户并加入www-data组
sudo groupadd mysql # 创建mysql组(若不存在)
sudo useradd -g mysql mysql # 创建mysql用户并加入mysql组
将网站文件所有者设置为对应用户(如Nginx/PHP-FPM用www-data,MySQL用mysql):
sudo chown -R www-data:www-data /var/www/html # 网站根目录
sudo chown -R mysql:mysql /var/lib/mysql # MySQL数据目录
/etc/nginx/nginx.conf,将user指令设置为www-data(默认已配置):user www-data;
/var/www/html)需允许Nginx读取,执行以下命令:sudo find /var/www/html -type d -exec chmod 755 {} \; # 目录权限755(所有者可读/写/执行,组和其他可读/执行)
sudo find /var/www/html -type f -exec chmod 644 {} \; # 文件权限644(所有者可读/写,组和其他可读)
SELECT、INSERT),避免使用GRANT ALL PRIVILEGES(除非必需):CREATE DATABASE mydb; -- 创建数据库
CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'StrongPassword123'; -- 创建本地用户
GRANT SELECT, INSERT, UPDATE ON mydb.* TO 'myuser'@'localhost'; -- 授予特定权限
FLUSH PRIVILEGES; -- 刷新权限使变更生效
/etc/mysql/mysql.conf.d/mysqld.cnf,将bind-address设置为127.0.0.1:bind-address = 127.0.0.1
重启MySQL使配置生效:sudo systemctl restart mysql
/etc/php/8.1/fpm/pool.d/www.conf),确保user和group设置为www-data(与Nginx一致):user = www-data
group = www-data
listen.owner = www-data # 监听套接字所有者
listen.group = www-data # 监听套接字组
/run/php/php8.1-fpm.sock):sudo chown www-data:www-data /run/php/php8.1-fpm.sock
sudo chmod 660 /run/php/php8.1-fpm.sock # 所有者和组可读/写,其他无权限
/etc/apparmor.d/usr.sbin.nginx),添加允许访问的路径(如网站目录):/var/www/html/** rwk, # 允许Nginx读/写/执行网站目录
重新加载AppArmor使变更生效:sudo systemctl reload apparmor
sudo chcon -Rv --type=httpd_sys_content_t /var/www/html # 设置内容类型
sudo chcon -Rv --type=httpd_sys_rw_content_t /var/www/html/uploads # 若需写入(如上传目录)
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 -y
/var/log/nginx/error.log、/var/log/mysql/error.log、/var/log/php8.1-fpm.log监控权限相关错误,及时响应异常。若需更细粒度的权限控制(如允许某用户访问特定目录),可使用访问控制列表(ACL):
sudo apt install acl # 安装ACL工具
sudo setfacl -m u:username:rwx /var/www/html/specific_dir # 给指定用户添加读/写/执行权限
sudo getfacl /var/www/html/specific_dir # 查看ACL权限
通过以上技巧,可实现LNMP在Ubuntu上的精细化权限管理,平衡安全性与功能性。