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 * ctx

LSM 上下文

u32 size

ctx 的大小

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 * ids

LSM 模块 ID

u32 __user * size

指向 ids 大小的指针,返回时更新

u32 flags

保留供将来使用,必须为零

描述

返回活动 LSM ID 的列表。成功后,此函数返回 ids 数组元素的数量。如果没有活动的 LSM,则此值可能为零。如果 size 不足以包含返回的数据,则返回 -E2BIG 并且 size 设置为最小所需大小。在所有其他情况下,返回指示错误的负值。

其他文档