Ubuntu LAMP多用户管理方法
LAMP(Linux+Apache+MySQL+PHP)环境的多用户管理需覆盖操作系统用户、数据库用户、Web应用权限及安全加固四大核心维度,通过分层隔离与最小权限原则,确保系统安全与协作效率。
操作系统用户是LAMP环境的底层基础,需遵循“最小权限”原则分配权限,区分系统管理员、开发人员、普通用户等角色。
adduser(交互式,自动设置家目录与密码)或useradd(非交互式,需手动指定参数)命令。例如,创建开发用户dev1并设置家目录:sudo adduser dev1 # 交互式输入密码、姓名等信息
# 或
sudo useradd -m -s /bin/bash dev1 # -m创建家目录,-s指定bash shell
passwd命令为用户设置强密码(包含大小写字母、数字及特殊字符);使用usermod调整用户属性,如将用户加入www-data组以访问Web目录:sudo passwd dev1 # 设置/修改密码
sudo usermod -aG www-data dev1 # -aG追加至www-data组(避免移除原有组)
deluser命令彻底清理用户及主目录(--remove-home选项):sudo deluser --remove-home dev1 # 删除用户及家目录
合理的权限设置是隔离用户访问的核心,需区分文件与目录的权限类型,避免过度开放。
644(所有者可读写,组及其他用户可读);敏感配置文件(如/etc/apache2/sites-available/000-default.conf)限制为600(仅所有者可访问):sudo chmod 644 /var/www/html/*.php # 批量设置PHP文件权限
sudo chmod 600 /etc/apache2/sites-available/000-default.conf # 敏感配置文件
/var/www/html)设置为755(所有者可读写执行,组及其他用户可读执行);上传目录(如/var/www/html/uploads)设置为775(允许组内用户写入):sudo chmod 755 /var/www/html # Web根目录通用权限
sudo chmod 775 /var/www/html/uploads # 允许组内用户上传文件
www-data组(Apache运行组),确保用户可编辑文件,Apache可读取:sudo chown -R dev1:www-data /var/www/html/project1 # 递归修改项目目录所有者及组
组管理可避免逐个分配权限的繁琐,适合团队协作场景。
groupadd命令创建专用组(如webdev组用于Web开发人员):sudo groupadd webdev
gpasswd或usermod将用户添加到组(如将dev1、dev2加入webdev组):sudo gpasswd -a dev1 webdev # 将dev1添加到webdev组
sudo usermod -aG webdev dev2 # 将dev2添加到webdev组
chmod的g选项赋予组读写权限(如允许webdev组成员修改项目文件):sudo chmod -R g+rw /var/www/html/project1 # 赋予webdev组读写权限
Apache需以非特权用户(www-data)运行,降低安全风险。
/etc/apache2/envvars文件,检查APACHE_RUN_USER和APACHE_RUN_GROUP变量(默认为www-data):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>
数据库用户权限需严格匹配其职责,避免使用root账户连接应用。
root用户登录MySQL控制台:sudo mysql -u root -p
project1_db)及本地用户(如db_user),设置强密码:CREATE DATABASE project1_db; -- 创建数据库
CREATE USER 'db_user'@'localhost' IDENTIFIED BY 'StrongPassword123!';
SELECT、INSERT),避免使用ALL PRIVILEGES:GRANT SELECT, INSERT, UPDATE ON project1_db.* TO 'db_user'@'localhost';
FLUSH PRIVILEGES; -- 刷新权限使变更生效
'%'(任意主机)权限,仅保留localhost:REVOKE ALL PRIVILEGES ON *.* FROM 'db_user'@'%';
多用户环境下,安全加固是防止攻击的关键补充。
php.ini文件,禁用exec、passthru等危险函数,防止恶意代码执行:sudo nano /etc/php/8.1/apache2/php.ini # 根据PHP版本调整路径
# 找到disable_functions,添加以下内容
disable_functions = exec,passthru,shell_exec,system
sudo apt install certbot python3-certbot-apache
sudo certbot --apache -d example.com # 替换为你的域名
ls -la /var/www/)、监控Apache日志(sudo tail -f /var/log/apache2/error.log),及时发现异常行为。chown限制文件访问权限(如/var/www/html/user1仅user1可写)。www-data用户运行,数据库以mysql用户运行,避免权限交叉(如Apache无法直接访问MySQL的root账户)。