Linux 安全模块¶
- 作者:
Casey Schaufler
- 日期:
2023年7月
Linux 安全模块 (LSM) 提供了一种机制,用于对 Linux 安全策略实施附加的访问控制。
各个安全模块可以支持以下任意属性
LSM_ATTR_CURRENT 是进程当前活动的安全性上下文。proc 文件系统在 /proc/self/attr/current 中提供此值。SELinux、Smack 和 AppArmor 安全模块支持此属性。Smack 还在 /proc/self/attr/smack/current 中提供此值。AppArmor 也在 /proc/self/attr/apparmor/current 中提供此值。
LSM_ATTR_EXEC 是当前镜像执行时进程的安全性上下文。proc 文件系统在 /proc/self/attr/exec 中提供此值。SELinux 和 AppArmor 安全模块支持此属性。AppArmor 也在 /proc/self/attr/apparmor/exec 中提供此值。
LSM_ATTR_FSCREATE 是创建文件系统对象时使用的进程安全性上下文。proc 文件系统在 /proc/self/attr/fscreate 中提供此值。SELinux 安全模块支持此属性。
LSM_ATTR_KEYCREATE 是创建密钥对象时使用的进程安全性上下文。proc 文件系统在 /proc/self/attr/keycreate 中提供此值。SELinux 安全模块支持此属性。
LSM_ATTR_PREV 是设置当前安全性上下文时进程的安全性上下文。proc 文件系统在 /proc/self/attr/prev 中提供此值。SELinux 和 AppArmor 安全模块支持此属性。AppArmor 也在 /proc/self/attr/apparmor/prev 中提供此值。
LSM_ATTR_SOCKCREATE 是创建套接字对象时使用的进程安全性上下文。proc 文件系统在 /proc/self/attr/sockcreate 中提供此值。SELinux 安全模块支持此属性。
内核接口¶
设置当前进程的安全属性¶
-
long sys_lsm_set_self_attr(unsigned int attr, struct lsm_ctx __user *ctx, u32 size, u32 flags)¶
设置当前任务的安全模块属性
参数
unsigned int attr要设置的属性
struct lsm_ctx __user * ctxLSM 上下文
u32 sizectx 的大小
u32 flags留作将来使用
描述
设置调用任务的 LSM 上下文。成功时此函数返回 0。如果无法设置指定的属性,则返回一个指示错误原因的负值。
获取当前进程的指定安全属性¶
-
long sys_lsm_get_self_attr(unsigned int attr, struct lsm_ctx __user *ctx, u32 __user *size, u32 flags)¶
返回当前任务的安全模块属性
参数
unsigned int attr要返回的属性
struct lsm_ctx __user * ctx用于存放信息的的用户空间目标地址,或为 NULL
u32 __user * size指向可用于接收数据的可用空间大小的指针
u32 flags特殊处理选项。LSM_FLAG_SINGLE 表示仅报告与传递的 ctx 中标识的 LSM 相关的属性。
描述
返回调用任务的 LSM 上下文。成功时此函数返回 ctx 数组元素的数量。如果未分配 LSM 上下文,该值可能为零。如果 size 不足以容纳返回的数据,则返回 -E2BIG 并且 size 被设置为所需的最小大小。在所有其他情况下,返回一个指示错误的负值。
-
long sys_lsm_list_modules(u64 __user *ids, u32 __user *size, u32 flags)¶
返回活动安全模块的列表
参数
u64 __user * idsLSM 模块 ID
u32 __user * size指向 ids 大小的指针,在返回时更新
u32 flags保留供将来使用,必须为零
描述
返回活动的 LSM ID 列表。成功时此函数返回 ids 数组元素的数量。如果没有活动的 LSM,该值可能为零。如果 size 不足以容纳返回的数据,则返回 -E2BIG 并且 size 被设置为所需的最小大小。在所有其他情况下,返回一个指示错误的负值。