《UNIX/Linux系统管理技术手册-读书笔记-第二十七章

安全

1. 安全三要素(CIA三元组)

要素 说明 破坏示例
机密性(Confidentiality) 数据仅限授权人员访问 黑客窃取客户数据库
完整性(Integrity) 数据未被篡改,来源可信 中间人篡改消息内容
可用性(Availability) 授权用户需要时能访问 DDoS攻击、服务器宕机

💡 安全格言:“安全是一个过程,不是一个产品。”

核心安全原则

原则 说明
最小权限原则 每个实体仅授予完成其任务所需的最低权限(用户/防火墙规则/文件权限)
纵深防御 多层安全措施(勿单靠外部防火墙,“外表坚硬,内部柔软”)
攻击面最小化 不必要的服务/端口/系统越少,漏洞风险越低
安全性 vs 便利性 安全性提升通常伴随便利性下降——需平衡

2. 安全是如何被破坏的

攻击类型 说明 防御措施
社交工程(Social Engineering) 利用人性弱点(电话假扮、网络钓鱼、鱼叉式钓鱼) 员工培训;管理员绝不索要密码;报告可疑行为
软件漏洞 缓冲区溢出、输入验证缺陷 及时打补丁;以最小权限运行服务;使用SELinux/容器隔离
DDoS攻击 流量泛洪耗尽资源(Mirai僵尸网络曾达620Gbps) 云DDoS防护;网络层缓解;监控
内部人员滥用 雇员/承包商滥用权限 最小权限;审计日志;不可否认性
配置错误 默认不安全配置(如无引导密码、宽松防火墙、裸露数据库) 遵循安全基准(CIS Benchmarks);自动化配置管理

开源安全优势:数千人审查代码 → 漏洞发现和修复更快;但开源≠自动安全,仍需警惕。

3. 基本安全措施

3.1 核心实践清单

措施 说明 实施方法
软件更新 最有价值的安全工作:补丁已知漏洞 自动化更新(APT/yum);订阅安全列表;测试后部署
关闭不必要服务 减少攻击面 netstat -an | grep LISTENlsof -i:端口;禁用/删除无用服务
远程日志记录 集中存储日志,防黑客篡改 syslog/rsyslog转发到安全主机;中央日志聚合(ELK)
定期备份 CIA的“可用性”保障 定期备份+场外存储;加密备份文件;测试恢复
病毒防护 UNIX/Linux对病毒免疫,但可扫描邮件/SMB共享中的Windows病毒 ClamAV(开源);Windows Defender(Windows)
Rootkit检测 隐藏进程/文件/网络活动的恶意软件 OSSEC;AIDE(文件完整性);chkrootkit
分组过滤 防火墙限制网络访问 网关防火墙;基于主机的iptables/ufw/ipfw;云安全组(细化入站+出站规则
密码与MFA 多因子认证是安全“唾手可得的胜利” 强制强密码/口令(长密码>复杂密码);MFA(Google Authenticator/Duo)
持续警惕 定期监控系统健康、网络连接、进程表 安全扫描工具;外部渗透测试

3.2 密码管理核心原则

原则 说明
长密码优于复杂密码 长口令(>12字符)比短随机密码更容易记忆、更安全
密码专用 绝不在多个服务间复用密码(大规模泄露太常见)
定期更改 至少每6个月;有人离职时;怀疑泄密时
密码保险箱 使用KeePass/1Password/SecretServer集中管理,可审计、可追溯
共享登录(组登录) 禁止使用(如“guest”账户)——黑客首选目标;违反HIPAA等法规

3.3 密码老化配置

Linux(chage)

1
2
sudo chage -m 2 -M 90 -E 2017-07-31 -W 14 ben
# -m 最小间隔天数 -M 最大间隔 -E 到期日期 -W 警告天数

FreeBSD(pw)

1
sudo pw user mod trent -p 2017-09-25 -e 90

4. 强力安全工具速查

工具 类型 用途 关键特性
Nmap 网络扫描 发现开放端口、运行服务、OS识别 -sV服务版本;-O操作系统猜测;扫描前需获许可
Nessus 漏洞扫描 30000+插件检查安全缺陷 主动利用漏洞验证,非仅依赖版本号
Metasploit 渗透测试 自动化漏洞利用 数百个现成利用工具;支持命令行/Web/GUI
Lynis 安全审计 系统配置/补丁/加固状态检查 运行在系统上(非网络扫描);数百项合规性检查
John the Ripper 密码破解 发现弱密码 支持多种加密算法;操作前需获明确许可
Bro NIDS(网络入侵检测) 可编程流量分析,关联会话行为 检测跳板、后门、非标准端口协议;配置复杂
Snort NIDS/NIPS 基于规则匹配已知攻击签名 开源事实标准;需订阅最新规则集(Cisco)
OSSEC HIDS(主机入侵检测) 文件完整性、rootkit检测、日志分析、主动响应 服务器(manager)+代理(agent)架构;加密通信
Fail2Ban 蛮力攻击响应 监视日志→临时封禁IP 监视SSH/Web日志;自动防火墙封禁

4.1 OSSEC快速配置

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 服务器端安装
sudo /var/ossec/bin/ossec-control start
sudo /var/ossec/bin/manage_agents   # 添加代理→提取密钥

# 代理端
sudo /var/ossec/bin/manage_agents   # 导入密钥

# 配置忽略文件(/var/ossec/etc/ossec.conf)
<syscheck>
    <ignore>/var/log/customapp.log</ignore>
</syscheck>

💡 OSSEC警告级别0~15,可发送邮件、执行主动响应。需数周调优过滤噪声。

5. 密码学入门(核心概念)

5.1 加密三属性

属性 说明
保密性 非接收方无法读取
完整性 不经检测无法修改
不可否认性 消息真实性可验证(数字签名)

5.2 对称密钥加密 vs 公钥加密

对比 对称密钥 公钥(非对称)
密钥数 单一共享密钥 公钥+私钥对
密钥分发 需安全私下交换 公钥可公开
性能 快(适合大量数据) 慢(适合会话建立+签名)
代表算法 AES、Twofish、Blowfish RSA、Diffie-Hellman
典型用途 加密数据传输(TLS会话) 密钥交换、数字签名

5.3 公钥基础设施(PKI)与TLS

概念 说明
CA(证书颁发机构) 第三方担保公钥合法性(GeoTrust/VeriSign/Let’s Encrypt)
证书 CA签名后的公钥+身份信息
信任存储 操作系统预置受信CA证书列表(现代系统有数百个)
TLS(传输层安全) 使用公钥加密+PKI保护网络通信(HTTPS的核心)
CA被黑风险 若CA私钥泄露,整个信任链崩溃——需谨慎选择CA
免费替代 Let’s Encrypt(2016推出,已颁发>2400万证书)——推荐

5.4 加密散列函数

特性 说明
定义 任意长度输入→固定长度输出(指纹/摘要)
关键属性 纠缠、伪随机、不可逆
常见算法 SHA-2/SHA-3(推荐);MD5(已不安全,存在碰撞攻击)
用途 文件完整性验证、密码存储、数字签名
1
2
3
# 验证文件完整性
sha256sum /path/to/file
# 与官方发布的散列值比对

5.5 随机数生成

说明
/dev/random Linux中熵不足时阻塞(可能耗尽)
/dev/urandom 永不阻塞(专家推荐用于大多数场景
FreeBSD /dev/random/dev/urandom相同

6. openssl实用命令

命令 功能
openssl genrsa -out key.pem 2048 生成2048位RSA私钥
openssl req -new -sha256 -key key.pem -out cert.csr 生成证书签名请求(CSR)
openssl x509 -noout -text -in cert.pem 查看证书属性(有效期/颁发者/主题)
openssl s_client -connect host:443 调试远程TLS服务器
openssl s_server 启动通用TLS服务器(测试客户端)

7. SSH(Secure Shell)核心工具

7.1 基本概念

组件 说明
OpenSSH 开源SSH实现(OpenBSD项目)
sshd 服务器守护进程(端口22)
ssh 客户端
ssh-keygen 生成密钥对
ssh-agent 缓存已解密私钥
scp / sftp 安全文件传输

7.2 服务器配置(/etc/ssh/sshd_config)

推荐安全配置

# 仅允许公钥认证(禁用密码)
PasswordAuthentication no
ChallengeResponseAuthentication no
PubkeyAuthentication yes

# 禁止root登录(强制sudo)
PermitRootLogin no

# 限制可登录用户/组
AllowUsers foo bar hsolo
AllowGroups admins

# 减少最大认证尝试次数
MaxAuthTries 3

# 连接超时(断空闲连接)
ClientAliveInterval 300
ClientAliveCountMax 1

# 禁用X转发(如不用X11)
X11Forwarding no

# 记录失败登录
LogLevel VERBOSE

💡 修改后重载:sudo systemctl reload sshdkill -HUP $(cat /var/run/sshd.pid)

7.3 客户端配置(~/.ssh/config)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
# 全局默认
PasswordAuthentication no

# 主机别名
Host web
    HostName 54.84.253.153
    User han
    Port 2222
    IdentityFile ~/.ssh/id_ecdsa
    ForwardAgent yes

Host debian
    Hostname debian.admin.com
    User hsolo
    PasswordAuthentication yes

7.4 公钥认证(推荐最强方法

1
2
3
4
5
6
7
# 生成密钥对
ssh-keygen -t ecdsa -b 384   # 或 -t rsa -b 4096

# 添加公钥到服务器
cat ~/.ssh/id_ecdsa.pub >> ~user/.ssh/authorized_keys
chmod 0700 ~user/.ssh
chmod 0600 ~user/.ssh/authorized_keys

私钥绝不可共享!公钥认证 + 口令保护私钥提供双重安全。

7.5 ssh-agent + 密钥转发

1
2
3
ssh-add ~/.ssh/id_ecdsa          # 载入私钥(需口令)
ssh -A server                     # 启用代理转发
# 从server跳转到其他主机时无需再次输入密码/密钥

风险:仅转发给信任的服务器——被控服务器可冒充你的身份。

7.6 连接复用(ControlMaster)

1
2
3
4
Host web
    ControlMaster auto
    ControlPath ~/.ssh/cm_socket/%r@%h:%p
    ControlPersist 30m

后续SSH连接复用现有连接 → 大幅提高WAN性能(30秒配置,OpenBSD基金会感谢你)。

7.7 SSHFP DNS记录(自动验证主机密钥)

1
2
3
4
5
6
# 生成SSHFP记录
sshfp server.admin.com

# 添加到DNS区文件后,启用客户端验证
# ~/.ssh/config 或 /etc/ssh/ssh_config
VerifyHostKeyDNS yes

解决“首次连接盲目接受主机密钥”的安全风险。

7.8 端口转发(隧道)

1
2
3
# 本地端口转发:本地8000→远程Web服务器80
ssh -L 8000:webserver:80 server.admin.com
# 访问 http://localhost:8000 即可通过加密隧道访问内网Web

安全风险:隧道可成为后门。服务器端禁用:AllowTcpForwarding no

8. 防火墙

类型 说明 代表
分组过滤防火墙 基于IP/端口/协议过滤 iptables/ufw(Linux);ipfw(FreeBSD)
状态检查防火墙 跟踪连接状态,验证协议行为 企业级设备(CheckPoint/Cisco)
DMZ(非军事区) 内外网之间的隔离区 放置面向Internet的服务

安全原则

  • 防火墙不是唯一防线——纵深防御
  • 防火墙是安全组成部分,不是“银弹”
  • 服务器自身仍需加固+监控(Nmap/Nessus/OSSEC)
  • 云环境用安全组,细化入站+出站规则

9. VPN(虚拟私有网络)

概念 说明
VPN 通过不受信网络(Internet)建立安全加密隧道
IPsec IETF标准协议,Linux/FreeBSD原生支持
MTU陷阱 IPsec加密后分组变大,需设置MTU≤1400避免分片
SSH隧道 可作为应急VPN替代(-L/-R端口转发)
VPN风险 端点(如CEO家)被控 → 整个内网暴露。将VPN连接视为外部连接,限制权限

10. 专业认证与标准

10.1 认证

认证 机构 特点
CISSP (ISC)² 广度覆盖,安全通用知识体系(CBK)
GIAC SANS 深度技术,30+专项,GSE为最难认证之一
CISA ISACA 审计与过程导向,适合安全官角色

10.2 标准

标准 适用 说明
ISO27001 通用信息安全 34页,11部分,管理导向;非技术性
PCI DSS 信用卡数据处理 免费,12部分,强制合规;Visa/MasterCard共同维护
NIST SP800系列 美国联邦政府 100+文档;免费;800-53安全控制,800-123服务器安全指南
通用标准(Common Criteria) IT产品安全评估 国际委员会标准
OWASP Top 10 Web应用安全 Web应用安全风险排行榜,开发必读
CIS Benchmarks 操作系统加固 覆盖所有示例系统,最佳配置指南

11. 安全事件响应(9步法)

步骤 行动
1 别慌——问题通常已持续数小时/天,冷静应对
2 确定适当的响应级别——勿过度渲染
3 囤积跟踪信息——备份所有系统;检查日志/记账文件;物理写保护可移动存储
4 评估暴露程度——哪些数据已泄露?制定缓解策略
5 拔插头——断开受损系统的网络连接(止血)
6 制订恢复计划——离键盘,白板上协作;聚焦灭火;不指责
7 沟通恢复计划——坦诚相待;安全事件是正常挑战,非个人失败
8 实施恢复计划——遵循计划,相信直觉
9 向CERT等权威部门报告——提供受损系统/补丁/账户/远程IP/日志

12. 本章核心命令速查表

命令 功能
netstat -an | grep LISTEN 查看监听端口
lsof -i:端口 查看端口占用进程
nmap -sV -O target 扫描端口、服务版本、OS
nmap -sT target TCP连接扫描
john /etc/shadow 破解弱密码(需授权
ssh-keygen -t ecdsa -b 384 生成SSH密钥对
ssh-add ~/.ssh/id_ecdsa 载入私钥到agent
ssh -A server 启用密钥转发
ssh -L 8000:webserver:80 server 本地端口转发(隧道)
scp file user@host:path 安全复制
sftp user@host 安全FTP交互
openssl genrsa -out key.pem 2048 生成RSA私钥
openssl req -new -sha256 -key key.pem -out cert.csr 生成证书签名请求
openssl s_client -connect host:443 调试TLS服务器
sha256sum file 计算文件SHA-256散列
fail2ban-client status 查看Fail2Ban状态

DBA视角补充

  • 数据库安全CIA
    • 机密性:加密传输(TLS)、加密存储(TDE/透明数据加密)、访问控制(最小权限)
    • 完整性:数据库审计(审计日志记录所有DDL/DML)、校验和、备份验证
    • 可用性:备份+恢复测试、高可用架构(主从/集群)、监控+告警
  • 密码管理:数据库账户(如root@localhost、应用账户)应使用强密码/口令,通过密码保险箱管理。绝不在代码/配置文件中硬编码明文密码
  • TLS加密:数据库连接应启用TLS(MySQL的require_secure_transport、PostgreSQL的ssl)。证书管理(有效期跟踪、续期)是DBA的常规安全任务。
  • 审计与合规:启用数据库审计(MySQL企业审计/PostgreSQL pgAudit)满足PCI-DSS/HIPAA等合规要求,记录谁+何时+做了什么+结果
  • 安全工具应用
    • Nmap扫描数据库端口(3306/5432/1521)是否暴露到不必要的网络
    • Nessus扫描数据库已知漏洞
    • OSSEC监控数据库日志文件变更和异常登录尝试
    • Fail2Ban封禁多次连接失败的IP(防暴力破解)
  • SSH安全实践
    • 数据库服务器禁止PermitRootLogin + 仅公钥认证 + SSH端口非标准(谨慎,安全通过隐蔽性有限)
    • 使用ssh-agent转发时,仅从受信跳板机连接数据库服务器
    • SSH端口转发可用于加密访问内网数据库(如开发人员通过SSH隧道连接RDS)
  • 备份加密:数据库备份文件(mysqldump输出、pg_basebackup)应加密存储,防止泄露;加密密钥与备份数据分开保管。
  • 事件响应:数据库被入侵时,步骤3(囤积跟踪信息)特别重要——保留审计日志、慢查询日志、错误日志、二进制日志,不急于删除。步骤5(拔插头)需谨慎——在取证完成后再断开,避免丢失内存状态。