🕸️ 第三章 为Web提供支持的技术
📄 一句话概括

装上一个 Web 服务器软件只是开头;真正让站点能安全上线的,是装完之后那一长串看起来琐碎的必修课。

📝 本节和前面几节的关系

3-9 讲了机器从哪来,这一节讲拿到机器之后要做什么。教材把【更新操作系统、安装 Apache、设置权限】写在标题里,这三件事恰好代表了三个层面:系统层、软件层、文件层。

一、装完只是开头

把 Web 服务器软件装上、能打开默认页,这只是【通】了。离【能对外上线】还差一长串动作,而这一串动作里的每一项,都对应着一类真实发生过的事故。

顺序上有一条基本逻辑:先把地基修好,再往上面放东西。系统补丁、账号权限、防火墙规则属于地基;装软件、传页面属于后面的装修。顺序反了,就等于在没锁门的房子里摆家具。

二、权限:三个数字讲完的事

操作系统的文件权限看起来很绕,其实就是三组【谁能读、谁能写、谁能执行】,用三个数字表示。

7 是读写执行都有,5 是读加执行,4 只是读,0 是什么都不能。目录常用 755,文件常用 644——这两个组合能覆盖绝大多数场景。

权限设错的后果很直接:太宽,别人能改你的页面;太紧,服务器自己读不出文件。而最该记住的一条是——永远不要用 777。

三、动手 Demo:检查清单与权限表

下面这张清单,每一项都对应过一次真实的事故,值得照着一条条对。

checks = ["更新系统补丁", "改默认端口与账号", "安装 Web 服务器", "放行 80 与 443",
          "设置文件权限", "用低权限账号运行", "开启日志与备份", "配置 HTTPS 并自动续期"]
for i, c in enumerate(checks, 1):
    print("%d. %s" % (i, c))
print("目录 755 / 文件 644 / 私密 600 / 只读 400 / 永远别用 777")

实跑输出:

--------------------------------------------------------------------
D10  设置 Web 服务器:装完之后还有一长串必修课
--------------------------------------------------------------------

  装上一个 Web 服务器软件只是开头。真正让站点能安全上线的,是后面这些动作。

  要做什么              具体动作                          漏掉的后果
  --------------------------------------------------------------------------------------
  更新操作系统          装完先打补丁再开站                已知漏洞直接对着公网敞开
  改默认端口与账号      别用出厂配置直接上线              被扫描器几秒钟就扫到
  装 Web 服务器软件     按需要装 Apache 或 Nginx          没有能响应请求的程序
  放行 80 与 443        防火墙和云安全组都要放            服务器正常,外面就是打不开
  设置文件权限          网页目录 755、文件 644            权限过宽,被人改掉页面
  别用 root 跑服务      建一个专用低权限账号              程序被攻破就等于机器被交出
  配好日志与备份        访问日志、错误日志、定期快照      出事时查不到、也退不回来
  配好 HTTPS 证书       自动续期,别等过期                到期当天浏览器直接报警告

  上面反复提到的【权限】,在 Linux 上是三个数字就说完的事:

  数字          用在哪                含义
  ----------------------------------------------------------------------------
  755           目录常用              自己可读写执行,别人可进可读
  644           文件常用              自己可读写,别人只能读
  600           私密文件              只有自己能读写,别人一概不行
  400           只读文件              连自己也不能改,防误改
  777           千万别用              所有人可读写执行,等于把门拆了

  至于装哪一个,看 2026 年的实际分布:

  Web 服务器软件        占网站比例          特点
  --------------------------------------------------------------------------
  Nginx                 31.6%               轻量、高并发,反代顺手
  Cloudflare Server     29.1%               由服务商直接响应,不用自己装
  Apache                23.0%               老牌、模块多、配置直观
  LiteSpeed             14.9%               商业软件,常随主机预装
  Node.js               6.8%                直接跑 JavaScript 服务
  Microsoft-IIS         3.1%                Windows 环境的老搭档

清单里有两项特别值得单说。一项是【放行 80 与 443】——服务器内部防火墙和云安全组是两套独立的开关,只开一边照样打不开,这是新手最容易卡住的地方。

另一项是【别用 root 跑服务】。Web 服务器是直接面对公网的程序,万一被攻破,进程的身份就是攻击者能拿到的权限。用 root 跑,等于把整台机器交出去;用专用低权限账号跑,损失就被限制住了。

四、装哪一个

2026 年的实际分布是:Nginx 31.6%、Cloudflare Server 29.1%、Apache 23.0%、LiteSpeed 14.9%、Node.js 6.8%、Microsoft-IIS 3.1%。

Apache 依然是主流选择之一,尤其适合边学边配:模块多、文档全、配置文件直观,出错时的报错信息也更容易查到中文资料。

Nginx 更轻、更擅长应付高并发,也常被当成反向代理放在前面。实际生产里常见的是两者组合:Nginx 挡在前面处理静态资源和转发,后面的应用服务器专心算业务。

30 秒实验

  1. 在本机练一次权限:新建一个文件,用 chmod 777 与 chmod 644 分别设一次,看权限位怎么变,再想想为什么 777 是危险值。
  2. 打开任意一台云服务器控制台的安全组页面,对照清单检查:80 和 443 放行了吗?22 限制来源了吗?还有哪些用不到的端口开着?
  3. 访问你的站点,在浏览器开发者工具里看响应头,确认服务器软件是什么、版本号有没有被暴露——暴露具体版本号是被动信息泄露。

常见误区

  1. 错误:装完 Web 服务器软件,网站就算上线了。——纠正:能打开默认页只是【通】了。补丁、权限、防火墙、证书、备份,少一样都可能在某个时刻变成事故。上线是一个清单,不是一个动作。
  2. 错误:权限给得宽一点,省得报错。——纠正:宽权限省下的时间,会在被人改掉页面的那一天加倍还回去。而且权限太宽还会传导:一个能被改的脚本,就可能变成攻击者的入口。
  3. 错误:防火墙开了,云安全组就不用管了。——纠正:这是两套独立的开关,默认都关着。云安全组在机器外面,系统防火墙在机器里面,两边都放行,流量才过得去。只开一边,现象就是【本机访问正常、外面打不开】。
  4. 错误:用 root 跑服务只是方便。——纠正:这等于把整台机器的钥匙挂在门上。服务一旦被攻破,攻击者拿到的就是最高权限。正确做法是建一个专用账号,只给它需要的目录和权限。
自测三问(点开对答案) 1. 为什么不能只开防火墙、不管云安全组? —— 因为**它们是两套独立的开关**:云安全组在机器外面过滤流量,系统防火墙在机器里面过滤。**两边都要放行,请求才能真正到达服务**。只开一边的典型现象就是——**本机访问没问题,外面就是打不开**。 2. 目录 755、文件 644 分别是什么意思? —— **755**:自己可读写执行,别人可进入、可读,但不能改;**644**:自己可读写,别人只能读。**一个给目录、一个给文件**,这两个组合覆盖了绝大多数网页目录的需求。 3. 为什么 Web 服务不应该用 root 运行? —— 因为**进程的权限就是被攻破后攻击者能拿到的权限**。用 root 跑,一旦程序有漏洞,**攻击者直接拿到整台机器的最高权限**;用专用低权限账号,损失就被限制在它能访问的那部分文件里。

相关笔记