文章目錄
- 1. 權限模型演進背景
- 2. Capability核心原理
- 2.1 能力單元分類
- 2.2 進程三集合
- 2.3 文件系統屬性
- 3. 完整能力單元表
- 4. 高級應用場景
- 4.1 能力邊界控制
- 4.2 編程控制
- 4.3 容器安全
- 5. 安全實踐建議
- 6. 潛在風險提示
1. 權限模型演進背景
在傳統UNIX權限模型中,采用二進制特權劃分(普通用戶 vs root用戶)存在顯著缺陷:
- 權限顆粒度過粗
- 特權程序攻擊面過大
- 特權繼承難以控制
Linux Capability機制應運而生(始于2.2內核),實現:
- 特權操作的細粒度劃分
- 動態權限分配與控制
- 最小特權原則實施
2. Capability核心原理
2.1 能力單元分類
將root特權分解為獨立能力單元,每個單元對應特定操作權限(當前內核6.x共41項)
2.2 進程三集合
集合類型 | 作用描述 | 特性 |
---|---|---|
Permitted | 能力允許的最大集合 | 靜態上限,不可自增 |
Effective | 當前實際生效的能力 | 運行時動態切換 |
Inheritable | 可被子進程繼承的能力 | 影響exec執行時的能力轉移 |
2.3 文件系統屬性
通過擴展屬性存儲執行時的能力分配策略:
- setuid程序特權執行時的能力賦值規則
- 二進制文件的能力白名單定義
3. 完整能力單元表
能力名稱 | 內核版本 | 權限描述 |
---|---|---|
CAP_AUDIT_CONTROL | 2.6.11+ | 配置審計子系統 |
CAP_AUDIT_READ | 3.16+ | 讀取審計日志(RAW/非翻譯格式) |
CAP_AUDIT_WRITE | 2.6.11+ | 生成審計日志記錄 |
CAP_BLOCK_SUSPEND | 3.5+ | 阻止系統掛起(epoll系統調用) |
CAP_BPF | 5.8+ | 管理BPF程序和映射 |
CAP_CHECKPOINT_RESTORE | 5.9+ | 內核checkpoint/restore操作 |
CAP_CHOWN | 2.2+ | 任意文件屬主修改 |
CAP_DAC_OVERRIDE | 2.2+ | 繞過文件讀、寫、執行權限檢查 |
CAP_DAC_READ_SEARCH | 2.2+ | 繞過目錄讀/搜索權限檢查 |
CAP_FOWNER | 2.2+ | 忽略文件屬主檢查(如chmod操作) |
CAP_FSETID | 2.2+ | 設置setuid/setgid時保留位 |
CAP_IPC_LOCK | 2.2+ | 鎖定內存(mlock/mlockall) |
CAP_IPC_OWNER | 2.2+ | 繞過IPC所有權檢查 |
CAP_KILL | 2.2+ | 繞過信號發送權限檢查 |
CAP_LEASE | 2.4+ | 建立文件租約(fcntl F_SETLEASE) |
CAP_LINUX_IMMUTABLE | 2.2+ | 設置FS_IMMUTABLE和FS_APPEND_FL屬性 |
CAP_MAC_ADMIN | 2.6.25+ | 配置MAC策略(SELinux/SMACK等) |
CAP_MAC_OVERRIDE | 2.6.25+ | 覆蓋強制訪問控制(MAC) |
CAP_MKNOD | 2.4+ | 創建設備特殊文件(mknod) |
CAP_NET_ADMIN | 2.2+ | 網絡配置(接口、防火墻、QoS等) |
CAP_NET_BIND_SERVICE | 2.2+ | 綁定低端口(<1024) |
CAP_NET_BROADCAST | 2.2+ | 網絡廣播、組播操作 |
CAP_NET_RAW | 2.2+ | RAW/PACKET套接字操作 |
CAP_PERFMON | 5.8+ | 系統性能監控與觀察 |
CAP_SYS_ADMIN | 2.2+ | 系統管理操作(掛載、ns操作、swapon等) |
CAP_SYS_BOOT | 2.2+ | 觸發系統重啟(reboot) |
CAP_SYS_CHROOT | 2.2+ | 使用chroot()系統調用 |
CAP_SYS_MODULE | 2.2+ | 加載/卸載內核模塊 |
CAP_SYS_NICE | 2.2+ | 提升進程nice值,修改調度策略 |
CAP_SYS_PACCT | 2.4+ | 配置進程記賬(acct) |
CAP_SYS_PTRACE | 2.4+ | ptrace調試任意進程 |
CAP_SYS_RAWIO | 2.2+ | 直接端口訪問(ioperm/iopl)和內存操作 |
CAP_SYS_RESOURCE | 2.2+ | 覆蓋資源限制(如Disk quota) |
CAP_SYS_TIME | 2.2+ | 修改系統時鐘/硬件時鐘 |
CAP_SYS_TTY_CONFIG | 2.6.4+ | 虛擬終端配置(vhangup) |
CAP_SYSLOG | 2.6.37+ | 特權syslog操作(kernel printk速率限制等) |
CAP_WAKE_ALARM | 3.11+ | 設置喚醒定時器(RTC喚醒) |
注:統計截至Linux 6.4內核版本,能力定義位于
include/uapi/linux/capability.h
4. 高級應用場景
4.1 能力邊界控制
# 授予Nginx綁定低端口特權
setcap 'cap_net_bind_service=+ep' /usr/sbin/nginx# 查看二進制文件能力
getcap /usr/sbin/nginx
4.2 編程控制
#include <sys/capability.h>
// 動態放棄能力
cap_t caps = cap_get_proc();
cap_clear_flag(caps, CAP_EFFECTIVE);
cap_set_flag(caps, CAP_PERMITTED, CAP_NET_RAW, CAP_CLEAR);
cap_set_proc(caps);
cap_free(caps);
4.3 容器安全
# 僅允許容器修改系統時間
docker run --cap-drop ALL --cap-add SYS_TIME -it alpine
5. 安全實踐建議
最小權限原則
僅授予必要的能力集,通過 capsh --drop=XXX 啟動進程
文件能力審查
定期使用 getcap -r / 檢查全盤文件能力設置
運行時監控
結合 /proc/[pid]/status 中的CapEff/CapPrm/CapInh字段監控進程能力
命名空間隔離
結合user/network/mount等namespace限制能力作用域
審計系統集成
監控 CAP_AUDIT_* 相關能力的異常使用
6. 潛在風險提示
不可撤銷特權
部分能力一旦獲取無法主動放棄(如CAP_SYS_MODULE)
隱式權限提升
某些系統調用可能隱含多個能力需求
組合攻擊向量
看似無關的兩個能力組合可能產生提權風險
內核版本差異
新能力在不同發行版中的支持情況需精確驗證