php网站目录权限应设为755、文件设为644,是兼顾功能与安全的最小权限实践:web服务器仅需读取和进入权限,开发者通过所有权分离(如deploy:www-data)实现写入,上传目录须隔离并禁用php执行。

phpEnv 环境下网站目录权限设为 755、文件权限设为 644,不是随便定的数字,而是兼顾功能可用性与安全性的最小权限落地方式。核心逻辑是:Web 服务器(如 Nginx + PHP-FPM)只需读取 PHP 文件、进入目录即可运行,完全不需要写权限;而开发者或部署用户才需要写入能力——这两类权限必须分离。
根目录与子目录统一设为 755
目录权限 755 表示所有者可读、写、执行(rwx),组用户与其他用户仅可读、执行(r-x)。这意味着 Web 进程能顺利进入目录、列出内容、加载资源,但无法在其中创建、删除或重命名文件——有效阻断目录遍历、恶意脚本上传后直接执行等攻击路径。
- 执行
find /path/to/webroot -type d -exec chmod 755 {} \;递归设置全部目录 - 特别注意:不要对整个网站根目录(如
/var/www/html)设 775 或 777,即使你用 FTP 用户上传,也应通过组权限(如www-data)协同控制,而非放宽“其他用户”权限 - 若使用 phpEnv 自带的站点管理器,确认其新建站点默认目录权限是否已锁定为 755;未锁定则需手动修正
PHP 脚本与静态文件统一设为 644
PHP 文件(.php)、CSS、JS、HTML 等非可执行资源,设为 644(rw-r--r--)即足够。Web 服务进程只需读取内容来解析或返回,写权限反而构成风险——比如被利用的漏洞可能覆盖 index.php 或注入后门。
- 执行
find /path/to/webroot -type f \( -name "*.php" -o -name "*.html" -o -name "*.css" -o -name "*.js" \) -exec chmod 644 {} \; - 避免混合设置:不要因某几个文件“报错无法访问”就盲目给所有 .php 加执行位(如设成 755),那是权限误配的典型表现,根源常在于 Web 用户无读权限或 SELinux/ACL 限制
- 配置文件(如
config.php)建议进一步收紧至 600,且移出 Web 根目录(例如放到/etc/phpenv/sites/example.com/config/)
上传目录必须单独隔离并禁用 PHP 解析
像 /uploads/、/files/ 这类用户可写目录,不能和普通代码混用同一套权限逻辑。它们需要 Web 进程有写权限,但绝不能允许执行 PHP 代码——否则上传一张伪装成图片的 webshell 就会立刻被解析执行。
- 目录权限设为
755或更严的750(后者要求 Web 用户与部署用户同属一个私有组) - 在 Nginx 配置中明确禁止该目录下所有
.php请求:location ~ ^/uploads/.*\.php$ { return 403; } - Apache 下可通过
.htaccess添加:php_flag engine off或Deny from all(配合AllowOverride All生效)
所有权比权限数字更重要
chmod 只是表面,chown 才决定谁真正能操作。phpEnv 多数基于 Linux,推荐标准组合:
- 所有者设为部署用户(如
deploy),方便日常更新与维护 - 所属组设为 Web 服务组(如
www-data或nginx),确保服务能读取资源 - 执行:
chown -R deploy:www-data /path/to/webroot - 之后再统一跑 chmod 命令,否则权限数字生效但用户组不匹配,仍会 403 或 500
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











