Ubuntu LAMP(Linux+Apache+MySQL+PHP)环境的多用户管理需覆盖操作系统用户、数据库用户、Web应用用户三个核心层面,同时结合权限控制、安全配置及审计机制,确保系统安全与稳定。
操作系统用户是LAMP环境的基础,需遵循“最小权限原则”分配权限。
adduser命令创建系统用户(交互式设置密码及个人信息),或useradd命令(非交互式,需手动指定参数):sudo adduser username # 交互式创建,设置密码及用户信息
sudo useradd -m -s /bin/bash username # 非交互式创建(-m创建家目录,-s指定shell)
passwd命令为用户设置强密码(包含大小写字母、数字及特殊字符):sudo passwd username
usermod调整用户所属组、家目录等属性(如将用户加入www-data组以访问Web目录):sudo usermod -aG www-data username # 将用户添加到www-data组(-aG避免移除原有组)
sudo usermod -d /new/home username # 修改用户家目录
deluser命令彻底删除用户(--remove-home选项清理家目录):sudo deluser --remove-home username
合理的权限设置是防止未授权访问的关键,需区分文件与目录的权限类型:
644(所有者可读写,组及其他用户可读),敏感文件(如配置文件)可限制为600:sudo chmod 644 /var/www/html/*.php # 设置PHP文件的通用权限
sudo chmod 600 /etc/apache2/sites-available/000-default.conf # 敏感配置文件限制为所有者可访问
755(所有者可读写执行,组及其他用户可读执行),Web目录(如/var/www/html)可放宽至775(允许组内用户写入):sudo chmod 755 /var/www/html # Web目录通用权限
sudo chmod 775 /var/www/html/uploads # 允许组内用户上传文件的目录
chown命令将文件/目录所有者设置为对应用户及组(如将Web目录所有者设为www-data):sudo chown -R username:www-data /var/www/html/project1 # 递归修改项目目录的所有者及组
组管理可实现多用户共享权限,避免逐个分配的繁琐:
groupadd命令创建新组(如webdev组用于Web开发人员):sudo groupadd webdev
gpasswd或usermod将用户添加到组(如将user1、user2加入webdev组):sudo gpasswd -a user1 webdev # 将user1添加到webdev组
sudo usermod -aG webdev user2 # 将user2添加到webdev组
chmod的g选项赋予组读写权限(如允许webdev组修改项目文件):sudo chmod -R g+rw /var/www/html/project1 # 赋予webdev组成员读写权限
Apache需以非特权用户运行,降低安全风险:
/etc/apache2/envvars文件,设置APACHE_RUN_USER和APACHE_RUN_GROUP为www-data(Ubuntu默认):sudo nano /etc/apache2/envvars
# 修改以下两行
export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data
sudo systemctl restart apache2
Require指令控制客户端访问(如仅允许本地IP访问管理后台):<Directory /var/www/html/admin>
Require ip 192.168.1.100 # 仅允许指定IP访问
</Directory>
数据库用户权限需严格遵循“最小权限原则”,避免过度授权:
mysql -u root -p
db_user)并设置密码:CREATE USER 'db_user'@'localhost' IDENTIFIED BY 'StrongPassword123!';
SELECT、INSERT),避免使用ALL PRIVILEGES:GRANT SELECT, INSERT ON project1_db.* TO 'db_user'@'localhost';
FLUSH PRIVILEGES; # 刷新权限使变更生效
DROP USER 'db_user'@'localhost';
PHP配置需限制危险功能,防止恶意代码执行:
/etc/php/8.1/apache2/php.ini(根据PHP版本调整路径),设置上传文件大小限制:upload_max_filesize = 10M # 单个文件最大10MB
post_max_size = 10M # POST数据最大10MB
exec、system等可执行系统命令的函数:disable_functions = exec,passthru,shell_exec,system
display_errors = Off # 生产环境关闭错误显示
log_errors = On # 开启错误日志
error_log = /var/log/php_errors.log # 指定错误日志路径
sudo aa-status # 检查AppArmor状态
sudo nano /etc/apparmor.d/usr.sbin.apache2 # 编辑Apache的AppArmor配置
/var/log/apache2/access.log、/var/log/apache2/error.log)和MySQL(/var/log/mysql/error.log)日志,发现异常访问(如大量404请求、未授权登录尝试)。sudo apt install fail2ban # 安装fail2ban
sudo systemctl enable fail2ban # 开机自启
sudo nano /etc/fail2ban/jail.local # 自定义防护规则(如针对Apache的防护)
lynis工具扫描系统漏洞,生成安全报告:sudo apt install lynis # 安装lynis
sudo lynis audit system # 执行系统审计
根据应用需求创建应用层用户(如WordPress、Drupal),并遵循以下原则:
sudo apt install certbot python3-certbot-apache # 安装Certbot
sudo certbot --apache # 自动获取并配置SSL证书
通过以上方案,可实现Ubuntu LAMP环境下多用户的精细化权限管理,兼顾系统安全性与易用性。