Unix 套接字与本地控制通道
Unix 域套接字承载数据库、容器运行时与 agent 的本地通信,很多高权限操作直接通过它完成,例如控制容器、查询系统状态、下发任务。套接字以文件形式出现在文件系统中,权限位与所在目录权限共同决定谁能连接;放在可被普通用户写入的目录里,等于把服务控制权交给该用户。排查时先用 ss -xlp 列出本地套接字与对应进程,再把路径、属主与目录权限一起核对。
基本信息
| 查看命令 | ss -xlp,或读取 /proc/net/unix |
|---|---|
| 关注对象 | 权限可写的套接字、非标准路径、属主异常 |
| 常见高风险 | /var/run/docker.sock、/run/systemd/private |
| 判断维度 | 套接字权限 + 所属目录权限 + 命名空间 |
典型使用场景
- 排查谁能通过本地通道控制容器或服务
- 寻找被投放在临时目录的非标准套接字
- 确认 agent 与主进程之间的通信路径是否被替换
- 评估容器内挂载宿主套接字带来的提权风险
- 核对近期新建的套接字文件,发现新出现的服务
查看套接字与权限
查看套接字与权限
ss -xlp | head -20 # 列出本地套接字与关联进程
ls -l /var/run/docker.sock /run/systemd/private 2>/dev/null
stat -c '%a %U:%G %n' /run/systemd/private 2>/dev/null # 权限与属主
find / -type s -newermt '-7 days' -not -path '/proc/*' 2>/dev/null | head # 近期新增
cat /proc/net/unix | head -20 # 不经 ss 的原始视图ss -x 输出读法
| 列 | 含义 | 判读要点 |
|---|---|---|
| Netid | 协议类型,unix 表示域套接字 | 结合 -x 参数确认视图 |
| State | 连接状态 | LISTEN 与 ESTAB 反映使用中 |
| Local Address | 套接字对应的文件路径 | 非标准路径重点核查 |
| Process | 关联进程与 pid | 需权限才显示,可用来定位服务 |
把套接字放在可被普通用户写入的目录,等同于把服务控制权交给该用户:即使套接字文件本身权限严格,只要目录允许改名或删除,攻击者也能用自己的文件替换它。
容器与宿主看到的路径可能不同,容器内挂载宿主套接字是常见的提权路径;排查时先确认进程所在命名空间,再判断权限结论是否成立。
取证过程中不要随意连接未知套接字,某些套接字上的单个请求就可能导致服务状态改变,例如触发重启或任务下发。