前言

在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-dataApache运行组,可读取文件

安全建议

  1. 禁止使用777权限:生产环境绝对不要使用777权限,这是最常见的安全隐患
  2. 最小权限原则:只给需要的目录设置写权限,其他目录只读即可
  3. 定期审计权限:定期检查网站文件和目录的权限设置是否正确
  4. 分离用户身份:网站文件所有者与Web服务器运行用户分离,降低安全风险
  5. 特殊目录单独处理:缓存、日志、上传等需要写入的目录单独设置权限

总结

通过合理设置Linux网站目录权限,可以在保证网站正常运行的同时,大幅提升服务器安全性。核心思路是:文件所有者与Web服务器运行用户分离,目录权限750、文件权限640,特殊需要写入的目录单独设置770权限。这种设置方式既满足了Web应用的正常运行需求,又有效防止了未授权访问和文件篡改。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部