/dev/shm 为什么要加固
/dev/shm 是内存中的共享内存目录,默认可读可写并且可执行。攻击者常把它当作免磁盘落地的执行点:把程序直接写进内存文件系统运行,既不留磁盘痕迹,也绕开一部分基于文件的检测。加固方式是在挂载选项上加上 nosuid、nodev、noexec,压缩可执行面。
基本信息
| 适用平台 | RHEL / CentOS 系与 Debian / Ubuntu 系 |
|---|---|
| 目标挂载点 | /dev/shm(tmpfs) |
| 加固选项 | nosuid,nodev,noexec |
| 风险等级 | 中 |
| 核查命令 | findmnt /dev/shm |
典型使用场景
- 主机加固基线中的共享内存目录限制项
- 应急响应时排查内存中落地的文件
- 排查无文件落地型攻击手法
- 纯服务器场景的安全收敛
- 与安全加固要求中禁用可执行内存相配合
核查与即时生效
核查与即时生效
findmnt /dev/shm # 查看当前挂载选项
mount | grep shm # 另一种查看方式
sudo mount -o remount,noexec,nosuid,nodev /dev/shm # 立即生效,重启前有效
findmnt -no OPTIONS /dev/shm # 复核选项是否已经加上持久化配置
持久化配置
# /etc/fstab 中增加一行(或修改已有行)
tmpfs /dev/shm tmpfs defaults,noexec,nosuid,nodev 0 0
# 也可以使用 systemd 挂载单元覆盖默认选项挂载选项读法
| 选项 | 含义 | 注意点 |
|---|---|---|
| noexec | 禁止在该目录执行程序 | 依赖可执行映射的软件可能受影响 |
| nosuid | 忽略该文件系统上的 SUID 位 | 与 noexec 配合使用 |
| nodev | 不解析设备文件 | 减少设备节点相关攻击面 |
| size | tmpfs 的容量上限 | 过小会影响依赖共享内存的应用 |
| 默认选项 | 未加固时的挂载参数 | 通常只有 rw、nosuid、nodev 等 |
Chrome 与 Chromium 这类浏览器依赖 /dev/shm 映射可执行内存,noexec 可能影响它们;纯服务器场景一般不受影响。
容器的 /dev/shm 是独立挂载(默认容量较小),宿主机上的策略不会自动继承,容器场景要单独验证。
数据库等对共享内存有依赖的组件,改动挂载选项前要先做功能验证,避免业务高峰期才发现兼容性问题。