1. 课程导入与安全模型
在开始学习 Linux 主机安全与系统加固之前,先建立一个整体认知:Linux 主机安全不是“装一个杀毒软件”或“改几个配置项”就能完成的任务,而是一套围绕资产、威胁、控制措施和验证方法持续运转的工程体系。本章从威胁全景出发,引入 CIA 三元组、最小权限原则和纵深防御理念,帮助你在后续章节中理解每一条加固命令背后的安全目标。
一、Linux 主机面临哪些威胁
Linux 主机在网络中通常承担 Web 服务、数据库、容器节点、跳板机、日志服务器等角色,其威胁来源可以按“攻击面”来梳理。攻击面是指攻击者能够与系统交互的所有入口,包括网络端口、系统调用、用户账户、定时任务、服务进程、配置文件、内核模块以及供应链组件。常见威胁大致分为以下几类:
- 远程入侵:SSH 弱口令、暴力破解、未授权访问暴露的数据库端口(如 3306、6379)、Web 应用漏洞导致命令执行。
- 本地提权:利用 SUID 程序、内核漏洞、配置错误的 sudo 规则、可写系统路径,从普通用户提升到 root。
- 持久化:写入 crontab、systemd 服务、SSH 公钥、LD_PRELOAD、PAM 模块,使攻击者在重启后仍能控制主机。
- 横向移动:窃取 SSH 私钥、复用凭据、利用内网信任关系,从一台主机扩散到整个集群。
- 数据泄露与篡改:读取 /etc/shadow、数据库文件、应用配置中的密钥,或篡改日志掩盖痕迹。
- 拒绝服务:耗尽 CPU、内存、文件描述符、磁盘 inode,使正常业务不可用。
这些威胁并非孤立存在,而是常常形成一条攻击链:扫描端口 → 获取初始访问 → 提权 → 持久化 → 横向移动 → 数据窃取。加固的目标,就是在攻击链的多个环节上增加阻力、提高可见性、缩短响应时间。
二、CIA 三元组:安全目标的度量尺
CIA 三元组是信息安全最基础的目标模型,也是判断一项加固措施是否值得做的依据:
- 机密性(Confidentiality):确保数据只被授权主体访问。对应措施包括文件权限控制、加密传输、密钥管理、最小化暴露面。
- 完整性(Integrity):确保数据未被未授权篡改。对应措施包括文件完整性监控(如 AIDE)、签名校验、只读挂载、审计日志。
- 可用性(Availability):确保授权用户在需要时能访问资源。对应措施包括资源限制、冗余、备份、防 DDoS、内核参数调优。
在实际加固中,CIA 三者往往需要权衡。例如,把 SSH 限制为仅允许密钥登录会提升机密性,但如果密钥管理不当导致管理员无法登录,就会损害可用性。因此,每一项加固动作都应明确它主要服务于哪个目标,以及可能带来什么副作用。
三、最小权限原则
最小权限原则(Principle of Least Privilege, PoLP)要求:任何用户、进程或服务,只应拥有完成其任务所必需的最小权限,且仅在必要的时间内拥有。它是 Linux 权限模型设计的核心思想,也是日常加固中最容易落地、收益最高的原则之一。
在 Linux 中,最小权限原则体现在多个层面:
- 账户层面:禁止 root 直接远程登录,管理员使用普通账户 + sudo 执行特权命令;服务账户使用
nologinshell,不分配可交互登录能力。 - 文件层面:配置文件权限设为 600 或 640,目录避免全局可写;定期排查无属主文件和 SUID/SGID 程序。
- 进程层面:使用 systemd 的
User=、CapabilityBoundingSet=、NoNewPrivileges=等指令限制服务能力;容器场景下避免--privileged。 - 网络层面:只开放必要端口,使用防火墙默认拒绝策略;服务绑定到具体网卡或 127.0.0.1,而不是 0.0.0.0。
一个常见的教学示例是:某 Web 应用以 root 运行,一旦被利用即可直接控制主机;改为专用用户 webapp 运行,并仅授予绑定 80 端口的能力(CAP_NET_BIND_SERVICE),即使应用被攻破,攻击者也只能获得低权限账户,显著提高后续提权成本。
四、纵深防御:不依赖单点
纵深防御(Defense in Depth)强调在攻击路径上布置多层、异构的控制措施,使得任何一层被突破都不至于导致系统整体失守。它不是简单地把多个安全工具堆在一起,而是让各层在时间、位置和机制上形成互补。
对于一台典型的 Linux 主机,纵深防御可以划分为以下层次:
- 网络层:边界防火墙、安全组、端口最小化、VPN/跳板机。
- 主机层:主机防火墙(iptables/nftables/firewalld)、SSH 加固、账户与口令策略。
- 系统层:内核参数(sysctl)、SELinux/AppArmor、文件权限、审计(auditd)。
- 应用层:服务以最小权限运行、配置加固、依赖更新、日志脱敏。
- 数据层:加密存储、备份、完整性校验、访问审计。
- 运营层:补丁管理、漏洞扫描、日志集中、入侵检测、应急响应。
下面这张图展示了 Linux 主机从攻击面到纵深防御各层的对应关系,以及 CIA 目标在其中的落点。它可以帮助你在后续章节中把每一条加固措施“挂”到正确的层次上,而不是零散地记忆命令。
五、加固目标与优先级
面对一台新交付的 Linux 主机,加固工作不应从“把网上看到的命令都执行一遍”开始,而应先明确目标。一个可操作的加固目标可以表述为:在保证业务可用性的前提下,减少可被利用的攻击面,限制攻击成功后的影响范围,并保留足够的审计证据用于发现和追溯。
据此,可以给出一个优先级排序的参考:
| 优先级 | 加固方向 | 典型动作 | 主要服务目标 |
|---|---|---|---|
| P0 | 账户与远程访问 | 禁用 root 远程登录、密钥认证、失败锁定 | 机密性、完整性 |
| P0 | 补丁与暴露面 | 更新内核与关键组件、关闭无用服务与端口 | 机密性、可用性 |
| P1 | 权限与提权面 | 清理 SUID、收紧 sudo、服务降权运行 | 完整性、机密性 |
| P1 | 审计与日志 | 启用 auditd、集中日志、关键文件监控 | 完整性、可用性 |
| P2 | 强制访问控制 | SELinux enforcing、AppArmor profile | 完整性、机密性 |
| P2 | 内核与资源 | sysctl 加固、ulimit、cgroup 限制 | 可用性 |
需要强调的是,优先级不是绝对的。对于直接暴露在公网的主机,P0 中的远程访问和补丁应最先处理;对于内网跳板机,账户与 sudo 权限的收敛可能更为关键。实际工作中,应结合资产重要性、暴露程度和业务窗口来调整顺序。