Skip to content

安全防护

本章将介绍 macOS 安全配置,包括系统安全、隐私保护、网络安全等内容。

安全概述

macOS 安全架构

text
macOS 安全架构:

系统完整性保护 (SIP)
├── 保护系统文件
├── 限制内核扩展
├── 防止进程调试
└── 默认启用

Gatekeeper
├── 验证应用签名
├── 检查应用来源
├── 阻止恶意软件
└── 默认启用

XProtect
├── 内置恶意软件检测
├── 自动更新定义
└── 后台运行

FileVault
├── 全盘加密
├── 保护数据安全
└── 防止未授权访问

沙盒机制
├── 限制应用权限
├── 隔离应用数据
└── 保护系统安全

查看安全状态

bash
# 查看 SIP 状态
csrutil status

# 查看 Gatekeeper 状态
spctl --status

# 查看 FileVault 状态
fdesetup status

# 查看防火墙状态
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --getglobalstate

# 查看安全设置
# 系统设置 → 隐私与安全性

系统完整性保护 (SIP)

SIP 功能

text
SIP 保护范围:
├── /System 目录
├── /usr 目录
├── /bin 目录
├── /sbin 目录
├── 预装的 Apple 应用
└── 系统内核扩展

SIP 限制:
├── 无法修改受保护的系统文件
├── 无法加载未签名的内核扩展
├── 无法调试系统进程
└── 无法修改系统目录权限

管理 SIP

bash
# 查看 SIP 状态
csrutil status

# 禁用 SIP(需要恢复模式)
# 1. 重启进入恢复模式
# 2. 打开终端
# 3. 执行: csrutil disable
# 4. 重启

# 启用 SIP
# 在恢复模式执行: csrutil enable

# 查看 SIP 配置
csrutil report

# 部分禁用 SIP(高级)
# csrutil enable --without debug
# csrutil enable --without fs
# csrutil enable --without kext

Gatekeeper

Gatekeeper 设置

bash
# 查看 Gatekeeper 状态
spctl --status

# 启用 Gatekeeper
sudo spctl --master-enable

# 禁用 Gatekeeper(不推荐)
sudo spctl --master-disable

# 允许特定应用
sudo xattr -rd com.apple.quarantine /Applications/App.app

# 查看允许的应用
spctl --list

# 评估应用
spctl --assess --verbose /Applications/App.app

应用签名验证

bash
# 查看应用签名
codesign -dv --verbose=4 /Applications/App.app

# 验证应用签名
codesign --verify --deep --strict --verbose=2 /Applications/App.app

# 查看签名证书
codesign -dvvv /Applications/App.app

# 公证状态检查
spctl -a -t exec -vv /Applications/App.app

FileVault 加密

启用 FileVault

bash
# 查看 FileVault 状态
fdesetup status

# 启用 FileVault
sudo fdesetup enable

# 启用并设置恢复密钥
sudo fdesetup enable -personal

# 查看加密进度
fdesetup status -verbose

# 查看恢复密钥
sudo fdesetup displayrecoverykey

# 更改恢复密钥
sudo fdesetup changerecovery -personal

# 禁用 FileVault
sudo fdesetup disable

FileVault 用户管理

bash
# 查看授权用户
fdesetup list

# 添加用户到 FileVault
sudo fdesetup add -usertoadd 用户名

# 移除用户
sudo fdesetup remove -user 用户名

# 验证用户密码
fdesetup authrestart -user 用户名

防火墙配置

基本防火墙设置

bash
# 查看防火墙状态
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --getglobalstate

# 启用防火墙
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setglobalstate on

# 禁用防火墙
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setglobalstate off

# 查看防火墙日志
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --getloggingmode

# 启用日志
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setloggingmode on

# 查看防火墙版本
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --getversion

防火墙规则管理

bash
# 查看已添加的应用
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --listapps

# 添加应用到防火墙
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --add /Applications/App.app

# 删除应用
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --remove /Applications/App.app

# 允许传入连接
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --unblockapp /Applications/App.app

# 阻止传入连接
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --blockapp /Applications/App.app

# 查看被阻止的应用
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --listblockedapps

隐身模式

bash
# 查看隐身模式状态
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --getstealthmode

# 启用隐身模式
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setstealthmode on

# 禁用隐身模式
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setstealthmode off

隐私设置

权限管理

text
隐私权限类型:
├── 位置服务
├── 相机
├── 麦克风
├── 通讯录
├── 日历
├── 提醒事项
├── 照片
├── 蓝牙
├── 文件和文件夹
├── 辅助功能
├── 完全磁盘访问权限
├── 输入监控
└── 屏幕录制

命令行管理权限

bash
# 查看权限数据库
sqlite3 ~/Library/Application\ Support/com.apple.TCC/TCC.db "SELECT client, auth_value FROM access WHERE service='kTCCServiceCamera';"

# 重置权限
tccutil reset All

# 重置特定权限
tccutil reset Camera
tccutil reset Microphone
tccutil reset Location
tccutil reset Contacts
tccutil reset Calendar
tccutil reset Photos
tccutil reset Accessibility

# 查看辅助功能权限
# 系统设置 → 隐私与安全性 → 辅助功能

定位服务

bash
# 查看定位服务状态
defaults read /var/db/locationd/Library/Preferences/ByHost/com.apple.locationd

# 启用/禁用定位服务
# 系统设置 → 隐私与安全性 → 定位服务

# 查看使用定位的应用
# 定位服务列表中查看

密码安全

钥匙串安全

bash
# 锁定钥匙串
security lock-keychain

# 锁定所有钥匙串
security lock-keychain -a

# 设置钥匙串自动锁定时间
security set-keychain-settings -t 3600 -l ~/Library/Keychains/login.keychain-db

# 查看钥匙串设置
security show-keychain-info

# 更改钥匙串密码
security set-keychain-password

# 验证钥匙串密码
security unlock-keychain -p 密码

密码生成

bash
# 生成随机密码
openssl rand -base64 12

# 使用 pwgen(需安装)
brew install pwgen
pwgen -s 16 1

# 使用 security 命令
security generate-password -h

# 生成并存储密码
security add-generic-password -a "用户名" -s "服务名" -w "密码"

网络安全

安全网络连接

bash
# 查看 SSL 证书
openssl s_client -connect www.baidu.com:443 -showcerts

# 验证证书
openssl verify -CAfile /etc/ssl/cert.pem certificate.pem

# 查看证书信息
openssl x509 -in certificate.pem -text -noout

# 测试 TLS 连接
openssl s_client -connect www.baidu.com:443 -tls1_2

# 查看支持的加密套件
nmap --script ssl-enum-ciphers -p 443 www.baidu.com

SSH 安全

bash
# 生成 SSH 密钥
ssh-keygen -t ed25519 -C "your@email.com"

# 生成 RSA 密钥
ssh-keygen -t rsa -b 4096 -C "your@email.com"

# 查看公钥
cat ~/.ssh/id_ed25519.pub

# 添加到 SSH 代理
ssh-add --apple-use-keychain ~/.ssh/id_ed25519

# 查看已添加的密钥
ssh-add -l

# SSH 配置文件
# ~/.ssh/config
# Host myserver
#     HostName server.example.com
#     User username
#     IdentityFile ~/.ssh/id_ed25519
#     Port 22

VPN 安全

bash
# 查看 VPN 连接
scutil --nc list

# 检查 VPN 状态
scutil --nc status "VPN名称"

# 查看 DNS 设置
scutil --dns

# 检查 DNS 泄漏
nslookup www.baidu.com
dig www.baidu.com

安全审计

系统日志

bash
# 查看系统日志
log show --predicate 'subsystem == "com.apple.security"' --last 1h

# 查看登录日志
log show --predicate 'eventMessage contains "Login Window"' --last 1d

# 查看认证日志
log show --predicate 'subsystem == "com.apple.Authorization"' --last 1h

# 查看 sudo 日志
log show --predicate 'eventMessage contains "sudo"' --last 1d

# 实时监控日志
log stream --predicate 'subsystem == "com.apple.security"'

安全检查脚本

bash
#!/bin/bash
# 安全检查脚本

echo "=== macOS 安全检查 ==="

# 检查 SIP
echo -e "\n[系统完整性保护]"
csrutil status

# 检查 Gatekeeper
echo -e "\n[Gatekeeper]"
spctl --status

# 检查 FileVault
echo -e "\n[FileVault]"
fdesetup status

# 检查防火墙
echo -e "\n[防火墙]"
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --getglobalstate

# 检查自动更新
echo -e "\n[自动更新]"
defaults read /Library/Preferences/com.apple.SoftwareUpdate AutomaticCheckEnabled

# 检查管理员账户
echo -e "\n[管理员账户]"
dscl . read /Groups/admin GroupMembership

# 检查登录项
echo -e "\n[登录项]"
osascript -e 'tell application "System Events" to get the name of every login item'

# 检查开放端口
echo -e "\n[监听端口]"
lsof -i -P | grep LISTEN | head -10

echo -e "\n=== 检查完成 ==="

安全最佳实践

日常安全建议

text
安全最佳实践:

账户安全:
├── 使用强密码
├── 启用 FileVault
├── 设置自动锁定
├── 启用双重认证
└── 定期更换密码

系统安全:
├── 保持系统更新
├── 启用 SIP
├── 启用 Gatekeeper
├── 启用防火墙
└── 定期检查权限

网络安全:
├── 使用 WPA3 Wi-Fi
├── 避免公共 Wi-Fi
├── 使用 VPN
├── 检查 SSL 证书
└── 管理浏览器权限

数据安全:
├── 定期备份
├── 加密敏感数据
├── 安全删除文件
├── 管理钥匙串
└── 检查共享设置

安全删除

bash
# 安全删除文件
srm 文件名

# 安全删除目录
srm -r 目录名

# 安全清空废纸篓
# Finder → 清倒废纸篓(按住 Option)

# 使用磁盘工具抹掉磁盘
# 选择"安全抹掉"选项

# 命令行安全抹除
diskutil secureErase 1 disk2
# 级别:0=最快, 1=单次覆盖, 2=7次覆盖, 3=35次覆盖

小结

本章介绍了 macOS 安全防护的主要内容:

  1. 安全架构:了解 SIP、Gatekeeper、XProtect 等
  2. 系统完整性保护:管理 SIP 设置
  3. Gatekeeper:控制应用来源
  4. FileVault:全盘加密保护
  5. 防火墙:网络访问控制
  6. 隐私设置:管理应用权限
  7. 密码安全:钥匙串和密码管理
  8. 网络安全:SSL、SSH、VPN 安全
  9. 安全审计:日志和检查脚本
  10. 最佳实践:日常安全建议

下一步

下一章我们将学习 故障排查,了解 macOS 常见问题的解决方法。