SGID 的两类用法
SGID 有两类:SGID 文件在执行时以文件属组的身份运行;SGID 目录让目录内新建的文件自动继承目录的属组,常用于共享协作目录。两类都要清点,重点核查「运行时可写」的 SGID 文件——这类文件会以属组权限执行,一旦其他用户也能改它,就构成了现成的提权通道。
基本信息
| 适用平台 | RHEL / CentOS 系与 Debian / Ubuntu 系 |
|---|---|
| 检查点 | -perm -2000 的清单可解释且与基线一致 |
| 风险等级 | 中 |
| 常见预期项 | 共享协作目录、/var/log/journal 等 SGID 目录 |
| 关联项 | SUID(-perm -4000)需单独清点与处置 |
典型使用场景
- 提权面清点:列出所有以属组身份运行的程序
- 共享协作目录配置核查,确认新文件是否继承属组
- 基线比对:确认 SGID 清单没有新增项
- 应急响应阶段查找被植入的可疑 SGID 文件
- 权限整改前评估误删风险,避免破坏协作目录
清点文件与目录
清点文件与目录
find / -xdev -type f -perm -2000 -print 2>/dev/null | sort > /root/sgid-files-baseline.txt # SGID 文件基线
find / -xdev -type d -perm -2000 -print 2>/dev/null | sort > /root/sgid-dirs-baseline.txt # SGID 目录基线
find / -xdev -type f -perm -2000 -writable -print 2>/dev/null # 运行时可写的 SGID 文件,优先核查
ls -l /path/to/file # 查看属主属组与执行位,确认以谁的权限运行输出逐列读法
| 列 | 含义 | 判读 |
|---|---|---|
| 属组执行位 s | SGID 已设置 | 出现在非预期路径就要核查 |
| 文件属组 | 执行时采用的属组身份 | 属组为特权组时风险更高 |
| 可写位 | 其他用户能否修改该文件 | SGID 加全局可写即提权通道 |
| 目录属组 | 目录内新文件的继承属组 | 共享协作目录依赖此项 |
| 基线差异 | 与上次清单相比的新增项 | 新增项必须能解释来源 |
SGID 目录多数是功能设计(共享目录让新文件继承属组、日志目录让组内成员可读),判定要看属主属组与实际用途,不能一律清除。
清点结果里「可被其他用户写入的 SGID 文件」要优先处理:任何能修改这个文件的人,都能以它所属组的身份执行代码。