首页 存档 技术 查看内容

Linux强制访问控制机制模块详细描述之核心文件分析

2018-3-30 13:00 |来自: 互联网 272 0

摘要: 2.4 核心文件分析 2.4.1mls.c 2.4.1.1文件描述 对于mls.c文件,其完整文件名为security/selinux/ss/mls.c,该文件实现了MLS策略相关操作函数。 2.4.1.2主要变量及宏定义 在该文件中涉及到的主要变量为polic ...

2.4 核心文件分析

2.4.1mls.c

2.4.1.1文件描述

对于mls.c文件,其完整文件名为security/selinux/ss/mls.c,该文件实现了MLS策略相关操作函数。

2.4.1.2主要变量及宏定义

在该文件中涉及到的主要变量为policydb,其用来表示SELinux所使用的安全策略,它是一个struct policydb类型的结构体,至于该结构体,详细分析参见2.4.1.3小节,这里不再赘述。另外,该文件频繁的调用了ebitmap_for_each_positive_bit()宏,该宏实际上是一个for循环,用于处理位图中所有设置的位。

2.4.1.3结构体定义

对于该文件中涉及到结构体,如policydbcontextmls_rangemls_levelsidtab等,详见“Linux多安全策略和动态安全策略框架机制模块代码分析报告”一文,这里不再赘述。

2.4.1.4外部函数

对于该文件涉及的外部函数功能,详见Linux多安全策略和动态安全策略框架机制模块代码分析报告”一文,这里不再赘述。

2.4.1.5内部函数

对于该文件中定义的各内部函数,其解释如下所示:

mls_compute_context_len()

函数原型:int mls_compute_context_len(struct context*context)

参数含义:context表示待计算的安全上下文。

函数功能:计算字符串形式的安全上下文中MLS域的长度。

返回值:成功执行时返回MLS域的字节长度;反之返回0

mls_sid_to_context()

函数原型:void mls_sid_to_context(struct context*context,char **scontext)

参数含义:context表示待操作的安全上下文;scontext用于存放表示安全上下文的字符串。

函数功能:将参数context中代表MLS域的字符串拷贝到scontext中。

返回值:无。

mls_level_isvalid()

函数原型:int mls_level_isvalid(struct policydb*p, struct mls_level*l)

参数含义:p表示SELinux所使用的策略库;l表示待检查的安全级别。

函数功能:根据指定的安全策略判断安全级别是否有效。

返回值:,若有效,返回真;反之返回假。

mls_range_isvalid()

函数原型:int mls_range_isvalid(struct policydb*p, struct mls_range*r)

参数含义:p表示SELinux所使用的策略库;r表示待检查的安全域。

函数功能:判断安全上下文中的MLS域是否有效。

返回值:若有效则返回真;反之返回假。

mls_context_isvalid()

函数原型:int mls_context_isvalid(struct policydb*p, struct context*c)

参数含义:p表示SELinux所使用的策略库;c表示待检查的安全上下文结构。

函数功能:根据指定的安全策略判断安全上下文中的MLS域是否有效。

返回值:若有效则返回真。

mls_context_to_sid()

函数原型:int mls_context_to_sid(struct policydb*pol,char oldc,char **scontext,

struct context*context,struct sidtab*s,u32def_sid)

参数含义:pol表示SELinux所使用的策略库;oldc表示scontext中是否设置了MLS域;scontext用于存放字符串形式的安全上下文;context表示待修改的安全上下文;s表示相应的SID表;def_sid表示默认的SID

函数功能:根据scontext字符串设置参数context指定的安全上下文结构体中的MLS域。

返回值:成功时返回0;失败时返回相应的错误码。

mls_from_string()

函数原型:int mls_from_string(char *str, struct context*context, gfp_tgfp_mask)

参数含义:str表示修改之后的值;context表示相应的安全上下文;gfp_mask表示内存分配的标志。

函数功能:根据字符串str设置context安全上下文中的MLS域。

返回值:成功时返回0;失败时返回相应的错误码。

mls_range_set()

函数原型:int mls_range_set(struct context*context,struct mls_range*range)

参数含义:context表示待修改的安全上下文;range表示待设置的安全域的值。

函数功能:将参数range指定的安全域拷贝到相应的安全上下文结构体中。

返回值:成功时返回0;失败时返回相应的错误码。

mls_setup_user_range()

函数原型:int mls_setup_user_range(struct context*fromcon, struct user_datum*user,

struct context*usercon)

参数含义:fromcon表示修改之前的安全上下文;user表示表示用户的属性;usercon表示用户的安全上下文。

函数功能:根据指定的参数修改用户安全上下文中的安全级别的相关信息。

返回值:成功时返回0;失败时返回相应的错误码。

mls_convert_context()

函数原型:int mls_convert_context(struct policydb*oldp,struct policydb*newp,

struct context*c)

参数含义:oldp表示旧的策略库;newp表示新的策略库;c表示待修改的安全上下文。

函数功能:将安全上下文结构体c中的MLS域由oldp中指定的值转换为newp中指定的值。

返回值:成功时返回0;失败时返回相应的错误码。

mls_compute_sid()

函数原型:intmls_compute_sid(struct context*scontext,

struct context*tcontext,u16tclass

u32specified,struct context*newcontext,boolsock)

参数含义:scontext表示源安全上下文;tcontext表示目标安全上下文;tclass表示客体类别;specified表示访问向量的类型;newcontext表示新生成的安全上下文;sock表示一个标志。

函数功能:根据访问向量的类型来设置新的安全上下文中的安全级别。

返回值:成功时返回0;失败时返回相应的错误码。

 mls_export_netlbl_lvl()

函数原型:void mls_export_netlbl_lvl(struct context*context,

struct netlbl_lsm_secattr*secattr)

参数含义:context表示一个安全上下文;secattr表示网络标记安全属性。

函数功能:MLS的敏感级别导出到网络标记中。

返回值:无。

mls_import_netlbl_lvl()

函数原型:void mls_import_netlbl_lvl(struct context*context,

struct netlbl_lsm_secattr*secattr)

参数含义:context表示一个安全上下文;secattr表示网络标记安全属性。

函数功能:将网络标记的MLS敏感级别拷贝到安全上下文中。

返回值:无。

 mls_export_netlbl_cat()

函数原型:int mls_export_netlbl_cat(struct context*context,

struct netlbl_lsm_secattr*secattr)

参数含义:context表示一个安全上下文;secattr表示网络标记安全属性。

函数功能:拷贝安全上下文中的低MLS类别到网络标记的MLS类别域中。

返回值:成功时返回0;失败时返回相应的错误码。

 mls_import_netlbl_cat()

函数原型:int mls_import_netlbl_cat(struct context*context,

struct netlbl_lsm_secattr*secattr)

参数含义:context表示一个安全上下文;secattr表示网络标记安全属性。

函数功能:拷贝网络标记的安全属性到selinux的安全上下文中。

返回值:成功时返回0;失败时返回相应的错误码。


声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

相关分类

返回顶部