《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 LISTEN;lsof -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 sshd 或 kill -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(拔插头)需谨慎——在取证完成后再断开,避免丢失内存状态。