Linux下 ThinkPHP 权限管理实践
一 运行用户与目录所有权
ps -ef | grep -E 'apache|httpd|php-fpm|nginx'。chown -R deploy:www-data /var/www/your-app。chmod 777 -R,该做法对公网环境极不安全。二 目录与文件权限基线
# 1) 基线:目录750,文件640
chown -R deploy:www-data /var/www/your-app
find /var/www/your-app -type d -exec chmod 750 {} \;
find /var/www/your-app -not -type d -exec chmod 640 {} \;
# 2) 可写目录:按需放开到770
# TP5 常见 Runtime 路径
find /var/www/your-app/Application/Runtime -type d -exec chmod 770 {} \;
find /var/www/your-app/Application/Runtime -type f -exec chmod 660 {} \;
# TP6 常见 runtime 路径(单应用)
find /var/www/your-app/runtime -type d -exec chmod 770 {} \;
find /var/www/your-app/runtime -type f -exec chmod 660 {} \;
# TP6 多应用(每个应用均有 runtime)
find /var/www/your-app/app -path '*/runtime' -type d -exec chmod 770 {} \;
find /var/www/your-app/app -path '*/runtime' -type f -exec chmod 660 {} \;
三 安全加固要点
Order Allow,Deny
Deny from all
location ^~ /runtime/ {
deny all;
}
location ^~ /public/uploads/ {
deny all;
}
location ~* \.(php|php5)$ { deny all; }),并限制可访问类型与大小。四 多应用与多环境配置
app 下多模块):为每个应用的 runtime 单独设置 770/660,避免跨应用越权写入。# 批量将多个 TP 项目的 runtime 设为 770/660
for d in /webserver/*/www; do
if [ -d "$d/app" ]; then
find "$d/app" -path '*/runtime' -type d -exec chmod 770 {} \;
find "$d/app" -path '*/runtime' -type f -exec chmod 660 {} \;
elif [ -d "$d/Application/Runtime" ]; then
chmod -R 770 "$d/Application/Runtime"
fi
done
五 常见问题与排查
php think、队列)生成的日志/缓存属主为 root,导致 Web 无法写入。
sudo -u www-data php think ...。