Ubuntu Swap(交换空间)的安全风险及缓解措施
Swap分区或文件用于在物理内存不足时暂存内存数据,若未加密,其中可能包含敏感信息(如密码、加密密钥、用户隐私数据)。若攻击者通过物理访问、磁盘窃取或未授权系统访问获取Swap内容,可直接读取这些敏感数据,导致信息泄露。
即使系统正常关机,Swap中的数据可能不会立即清除(取决于文件系统和配置)。攻击者可通过分析Swap文件恢复之前存储的敏感信息,尤其是当系统频繁使用Swap时,残留数据的概率更高。
攻击者可能将恶意代码或payload写入Swap分区,即使删除恶意软件或修改系统文件,仍可通过Swap恢复其活动。这种持久化方式增加了恶意软件的隐蔽性和清除难度。
使用LUKS(Linux Unified Key Setup)对Swap分区或文件进行加密,确保即使物理介质丢失或被非法访问,数据也无法被读取。操作示例:
# 创建加密Swap文件(以16G为例)
sudo fallocate -l 16G /swapfile
sudo chmod 600 /swapfile # 限制权限仅root可访问
sudo cryptsetup luksFormat /swapfile # 加密文件
sudo cryptsetup open /swapfile myswap # 打开加密设备
sudo mkswap /dev/mapper/myswap # 格式化为Swap
sudo swapon /dev/mapper/myswap # 启用Swap
# 持久化配置(添加到/etc/fstab)
echo '/dev/mapper/myswap none swap sw 0 0' | sudo tee -a /etc/fstab
加密后,每次使用Swap需输入密码(可通过密钥文件自动化,但需妥善保管密钥)。
vm.swappiness参数控制系统使用Swap的倾向(默认值60%,范围0-100)。降低该值可减少对Swap的依赖,降低数据泄露风险:
# 临时调整(立即生效)
echo 20 | sudo tee /proc/sys/vm/swappiness
# 永久调整(修改/etc/sysctl.conf)
echo 'vm.swappiness=20' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p # 生效配置
建议普通用户设置为10-20,内存充足的服务器可设置为0(禁用Swap,除非内存耗尽)。
sudo swapoff -a && sudo swapon -a
free -h、swapon --show或vmstat命令定期检查Swap使用率,及时发现异常(如Swap使用率持续高于80%)。PermitRootLogin no)、使用密钥认证、更改默认端口,限制SSH访问IP。根据物理内存大小调整Swap空间:
通过以上措施,可有效降低Ubuntu Swap带来的安全风险,兼顾系统性能与数据安全。