粘滞位挡住的是什么
共享临时目录必须带粘滞位,表现为 drwxrwxrwt(权限 1777):任何用户都能在里面建文件,但只有文件属主、目录属主或 root 能删除和改名他人的文件。少了这个 t,任何本地用户都能删掉或替换别人的临时文件——典型的利用方式是替换 root 定时任务、安装程序或脚本写下的临时文件,从而在后续以更高权限执行时接管流程。
基本信息
| 加固项 | 所有全局可写目录设置粘滞位 |
|---|---|
| 适用平台 | Linux(RHEL/CentOS、Debian/Ubuntu) |
| 权限要求 | root |
| 基线值 | /tmp、/var/tmp 为 1777(drwxrwxrwt) |
| 扩展范围 | SHM 目录、应用自建共享目录同样适用 |
典型使用场景
- 系统基线巡检,逐项检查全局可写目录的粘滞位
- 应用上线前核查其自建共享目录(如上传临时目录)
- 从旧系统迁移目录结构后,tar 解包常丢失粘滞位
- 排查本地提权事件时确认是否出现过可被替换的共享文件
- 容器镜像构建后检查 /tmp 的权限设置是否被改坏
核查:找缺粘滞位的全局可写目录
核查:找缺粘滞位的全局可写目录
ls -ld /tmp /var/tmp # 期望 drwxrwxrwt 开头
find / -xdev -type d -perm -0002 ! -perm -1000 -print 2>/dev/null # 全局可写但无粘滞位
findmnt /tmp # 确认 /tmp 是否被挂成 tmpfs,重启清空的语义不同修复
修复
chmod 1777 /tmp /var/tmp # 注意 1 不能丢,漏写只得到 777
chmod +t /path/to/shared_dir # 保留原权限只加粘滞位的写法
ls -ld /tmp /var/tmp # 复核末尾是否为 t权限末尾字符读法
| 显示 | 数值 | 含义与风险 |
|---|---|---|
| drwxrwxrwt | 1777 | 有粘滞位,达标 |
| drwxrwxrwx | 777 | 无粘滞位,任何用户可删他人文件 |
| drwxrwxrwx+ | 777+ACL | 带 ACL,需 getfacl 确认实际授权 |
| drwxrwx--T | 1770 | 有粘滞位但组内可写,仍要评估组范围 |
发现共享目录缺粘滞位时,先恢复权限再追溯:目录可写且无粘滞位期间,攻击者可以替换脚本、配置文件或定时任务文件。做完权限修复还应检查期间被写入的脚本内容,而不是修完就结案。
现代发行版常把 /tmp 挂成 tmpfs,重启即清空:好处是残留物少,代价是入侵痕迹与故障现场不易留存。若业务需要保留临时文件做审计,应改用独立分区并配套清理策略(如 systemd-tmpfiles)。