/tmp目录权限加固需启用tmpfs挂载(noexec,nosuid,nodev,mode=1777)、systemd privatetmp隔离、/var/tmp清理与环境变量规范,并结合auditd与inotify监控异常行为。

系统 /tmp 目录权限配置不当,极易被攻击者利用创建恶意符号链接、覆盖关键临时文件或劫持进程执行路径,从而实现本地提权。加固核心在于限制写入可控性、隔离用户空间、阻断常见攻击链。
启用 tmpfs 挂载并设置严格挂载选项
将 /tmp 挂载为内存文件系统(tmpfs),可避免磁盘残留、限制文件大小,并通过挂载参数强制权限约束:
- 在
/etc/fstab中添加:tmpfs /tmp tmpfs defaults,noexec,nosuid,nodev,size=2G,mode=1777 0 0 -
关键参数说明:
—noexec:禁止执行任何二进制文件,阻断直接运行恶意 payload;
—nosuid:忽略 setuid/setgid 位,防止利用 suid 程序提权;
—nodev:不解析设备文件,规避设备节点滥用;
—mode=1777:保持 sticky bit(t 权限),确保用户只能删自己创建的文件。 - 执行
mount -o remount /tmp生效,确认结果:findmnt -T /tmp应显示对应选项。
启用 systemd 的 PrivateTmp 隔离机制
对使用 systemd 管理的服务(如 Apache、MySQL、Nginx),启用 PrivateTmp=yes 可为每个服务分配独立的、挂载在 /tmp 下的私有命名空间目录,彻底阻断跨服务临时文件竞争与劫持:
- 编辑服务单元文件,例如:
systemctl edit nginx.service,添加:[Service]<br>PrivateTmp=yes
- 重载并重启服务:
systemctl daemon-reload && systemctl restart nginx - 验证方式:进入服务进程命名空间查看其
/tmp路径,如ls -l /proc/$(pgrep nginx)/root/tmp,应指向类似/tmp/systemd-private-xxx/tmp的隔离路径。
清理并限制传统临时目录继承风险
部分老服务或脚本仍依赖 /var/tmp 或自定义临时路径,需同步加固:
-
/var/tmp不受 tmpfs 保护(需持久化),应设为1777并定期清理:chmod 1777 /var/tmp && find /var/tmp -type f -mtime +7 -delete - 检查全局环境变量(如
TEMP、TMPDIR)是否被恶意覆盖,可在/etc/profile.d/下统一设为安全路径:export TMPDIR="/tmp" - 禁用 world-writable 全局临时目录软链接(如
/usr/tmp → /tmp),避免误导旧程序写入非预期位置。
监控与审计异常临时文件行为
仅靠权限控制无法覆盖所有绕过场景,需叠加运行时检测:
- 启用 auditd 监控
/tmp下敏感操作:aureport -f -m -i | grep '/tmp'查看历史事件;
添加规则:-w /tmp -p wa -k tmp_activity - 部署 inotify-based 工具(如
inotifywait或fanotify)实时告警异常创建、链接、执行行为,尤其关注.so、.sh、ld.so.preload类文件。 - 定期扫描
/tmp中可疑文件:find /tmp -type f -perm -u+x -o -name "*.so" -o -name "ld.so.preload" 2>/dev/null










