前言
在Windows上运行好好的项目,迁移到Linux上就遇到了很多问题,其中最为重要的是网站目录权限的设置。虽然简单期间可以用 chmod 777 -R your_website 命令来解决,但如果项目部署在公网或租用的Linux服务器上,这样做非常不安全——任何用户都可以对站点下的文件和目录进行操作,严重影响网站安全。
下面以Ubuntu 14.04系统为例,详细分析如何正确设置网站目录权限。
为什么不建议用777权限
最简单的做法(不推荐):
chmod 777 -R /var/www/html/demo
如果网站部署在公网或租用的Linux服务器上,强烈不建议这么做。因为设置777权限后,任何用户都可以对该站点下的文件和目录进行操作,这样既影响网站的运营,也存在严重的安全隐患。
理解Apache的用户和用户组
在Ubuntu安装完Apache之后,默认会往系统中增加 www-data 用户和 www-data 用户组。可以通过以下命令查看Apache进程:
ps -ef | grep apache
你会发现Apache的主进程是用root用户启动的,而子线程的用户都是 www-data。这意味着Apache服务器运行的用户和用户组是 www-data。
权限设置步骤
假设网站的用户为 demo,项目目录为 /var/www/html/demo,接下来分几个步骤来设置(用root用户执行下面的命令):
步骤1:设置网站目录和文件的所有者
首先把网站的目录和文件的所有者设置为 demo,所属组设置为 www-data:
chown -R demo:www-data /var/www/html/demo
这样 demo 用户成为文件所有者,www-data 组成为文件所属组,Apache进程(以www-data用户运行)就能通过组权限访问文件。
步骤2:设置网站目录权限为750
750权限表示:所有者(demo)拥有读写执行权限,组用户(www-data)有读和执行权限,其他用户没有任何权限。
chmod 750 /var/www/html/demo
cd /var/www/html/demo
find -type d -exec chmod 750 {} \;
这样demo用户可以在任何目录下创建文件,www-data组有进入目录的权限,其他用户无法访问。
步骤3:设置网站文件权限为640
640权限表示:所有者(demo)对网站文件有读写权限,Apache服务器(www-data组)只有读取文件的权限,无法更改文件,其他用户无任何权限。
find -not -type d -exec chmod 640 {} \;
这样设置后,即使Web应用存在漏洞,攻击者也无法通过Web进程修改网站文件,大大提升了安全性。
步骤4:针对特殊目录设置额外权限
某些目录需要Apache服务器有写入权限。以ThinkPHP为例,它的 Runtime 目录存储日志文件和与数据库做ORM映射的数据库表信息,Apache服务器需要对这些目录有访问和写入权限:
cd /var/www/html/demo
find . -name "Runtime" -type d -exec chmod -R 770 {} \;
注意:上面的命令中 {} 与 \ 之间是有空格的。-R 参数是递归给Runtime目录下面的目录和文件赋予770权限。
虽然日志文件不需要执行权限,不过这里没关系——当日志文件被删除后,新生成的日志文件所有者和用户组都是 www-data,权限会自动适配。
权限设置总结
| 对象 | 权限 | 说明 |
|---|---|---|
| 网站目录 | 750 | 所有者读写执行,组读执行,其他无权限 |
| 网站文件 | 640 | 所有者读写,组只读,其他无权限 |
| 特殊目录(如Runtime) | 770 | 所有者和组都有读写执行权限 |
| 文件所有者 | demo | 网站所有者,拥有完全控制权 |
| 文件所属组 | www-data | Apache运行组,可读取文件 |
安全建议
- 禁止使用777权限:生产环境绝对不要使用777权限,这是最常见的安全隐患
- 最小权限原则:只给需要的目录设置写权限,其他目录只读即可
- 定期审计权限:定期检查网站文件和目录的权限设置是否正确
- 分离用户身份:网站文件所有者与Web服务器运行用户分离,降低安全风险
- 特殊目录单独处理:缓存、日志、上传等需要写入的目录单独设置权限
总结
通过合理设置Linux网站目录权限,可以在保证网站正常运行的同时,大幅提升服务器安全性。核心思路是:文件所有者与Web服务器运行用户分离,目录权限750、文件权限640,特殊需要写入的目录单独设置770权限。这种设置方式既满足了Web应用的正常运行需求,又有效防止了未授权访问和文件篡改。

发表评论 取消回复