os/kernel/task/
cred.rs

1use crate::kernel::task::CapabilitySet;
2use crate::uapi::cred::{ROOT_GID, ROOT_UID};
3
4/// 进程凭证结构
5#[derive(Clone, Copy, Debug)]
6pub struct Credential {
7    /// 真实用户 ID
8    pub uid: u32,
9    /// 真实组 ID
10    pub gid: u32,
11    /// 有效用户 ID(用于权限检查)
12    pub euid: u32,
13    /// 有效组 ID(用于权限检查)
14    pub egid: u32,
15    /// 保存的用户 ID(用于 setuid 程序)
16    pub suid: u32,
17    /// 保存的组 ID(用于 setgid 程序)
18    pub sgid: u32,
19    /// 文件系统用户 ID(Linux 扩展,用于文件系统操作)
20    pub fsuid: u32,
21    /// 文件系统组 ID
22    pub fsgid: u32,
23
24    /// 能力集合
25    pub capabilities: CapabilitySet,
26}
27
28impl Credential {
29    /// 创建 root 用户凭证
30    pub const fn root() -> Self {
31        Self {
32            uid: ROOT_UID,
33            gid: ROOT_GID,
34            euid: ROOT_UID,
35            egid: ROOT_GID,
36            suid: ROOT_UID,
37            sgid: ROOT_GID,
38            fsuid: ROOT_UID,
39            fsgid: ROOT_GID,
40            capabilities: CapabilitySet::full(),
41        }
42    }
43
44    /// 检查是否为 root 用户
45    pub fn is_root(&self) -> bool {
46        self.euid == ROOT_UID
47    }
48}