LAMP(Linux、Apache、MySQL、PHP)环境中,权限设置直接影响系统安全性和功能可用性。以下是针对Ubuntu系统的详细权限配置步骤及注意事项:
网站文件通常存放在/var/www/html目录(默认文档根目录)。需确保Apache(以www-data用户/组运行)能正确访问这些文件:
/var/www/html及其子文件/目录的所有者设为www-data,组也设为www-data。sudo chown -R www-data:www-data /var/www/html
sudo find /var/www/html -type d -exec chmod 755 {} \; # 目录权限755(所有者:rwx;组/其他:r-x)
sudo find /var/www/html -type f -exec chmod 644 {} \; # 文件权限644(所有者:rw-;组/其他:r--)
uploads目录),需赋予写权限,但仍需限制执行权限(避免上传的脚本被执行)。sudo chmod -R 775 /var/www/html/uploads # 目录权限775(所有者:rwx;组:rwx;其他:r-x)
sudo chown -R www-data:www-data /var/www/html/uploads
安全提醒:上传目录应禁止执行权限(可通过
chmod -R 775 uploads确保),并在应用层验证上传文件类型(如禁止PHP脚本上传)。
默认情况下,Apache以www-data用户/组运行。若需修改(如自定义用户),需编辑配置文件:
sudo nano /etc/apache2/envvars
export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data
sudo systemctl restart apache2
验证用户:可通过
ps aux | grep apache2命令查看Apache进程的运行用户是否为www-data。
数据库权限需针对数据库用户和数据库对象(如表)进行配置:
sudo mysql -u root -p
CREATE DATABASE mydatabase;
CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'StrongPassword123!';
GRANT ALL PRIVILEGES ON mydatabase.* TO 'myuser'@'localhost';
FLUSH PRIVILEGES;
说明:
ALL PRIVILEGES表示授予用户对mydatabase数据库的所有权限(可根据需求替换为SELECT, INSERT等具体权限);FLUSH PRIVILEGES用于刷新权限表,使变更立即生效。
PHP脚本的执行权限需与Apache用户一致,避免因权限不足导致脚本无法运行:
/tmp以外的目录),可编辑php.ini文件:sudo nano /etc/php/$(php -v | grep -oP '(?<=PHP )\d+\.\d+)/apache2/php.ini'
找到open_basedir选项,设置为允许的目录(如/var/www/html/:/tmp/):open_basedir = /var/www/html/:/tmp/
注意:
open_basedir会限制PHP脚本的文件系统访问范围,需根据实际需求调整。
777权限,775足以满足需求)。ls -l /var/www/html命令定期检查文件/目录权限,确保无异常(如不应有777权限的敏感文件)。sudo setenforce 0
或永久禁用(需重启系统):sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
对于AppArmor,可修改Apache配置文件(/etc/apparmor.d/usr.sbin.apache2),添加允许访问的目录:/var/www/html/** r,
/var/www/html/uploads/** rw,
然后重新加载AppArmor:sudo systemctl reload apparmor
755)或所有权错误(需www-data:www-data)导致,可通过上述步骤修复。775)和所有权(需www-data:www-data),并确认open_basedir未限制访问。通过以上步骤,可完成Ubuntu LAMP环境的权限配置,兼顾功能需求与系统安全。需根据实际场景(如多用户协作、虚拟主机)调整权限策略,定期审查权限设置以应对新的安全威胁。