我是靠谱客的博主 自由纸鹤,最近开发中收集的这篇文章主要介绍Linux内核LSM介绍及smack配置启用,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

(http://www.zhihu.com/question/21637060/answer/58362892?group_id=614562143606079488#comment-89324790)

用户在执行系统调用时,先通过原有的内核接口依次执行功能性的错误检查,接着进行传统的DAC检查,并在即将访问内核的内部对象之前,通过LSM钩子函数调用LSM。LSM再调用具体的访问控制策略来决定访问的合法性。访问控制整体构架:

18143741_gvp0.jpg

LSM框架下访问决策模块包括selinux,smack,tomoyo,yama,apparmor.

每个决策模块都是通过各自的XXX_init函数调用register_security()函数,注册到LSM框架的模块被加载成功后,就可以进行访问控制操作。如果此时还有一个安全模块要使用register_security()函数进行加载,则会出现错误,直到使用框架注销后,下一个模块才可以载入。

18143741_bsav.jpg


Linux安全模块(LSM)提供了两类对安全钩子函数的调用:一类管理内核对象的安全域,另一类仲裁对这些内核对象的访问。对安全钩子函数的调用通过钩子来实现,钩子是全局表security_ops中的函数指针,这个全局表的类型是security_operations结构,这个结构定义在include/linux/security.h这个头文件中。

通过对security代码进行一番简单的分析,LSM启动过程流图:

18143741_64qw.jpgsecurity_initcall只能调用selinux_init,smack_init ,tomoyo_init , yama_init 和apparmor_init中的一个,因为内核不允许多种安全机制同时一起工作。一旦一个安全模块被加载,就成为系统的安全策略决策中心,而不会被后面的register_security()函数覆盖,直到这个安全模块被使用unregister_security()函数向框架注销。


因此LSM框架下只能开启一种安全机制,smack编译进Linux内核的配置和要求:

(1)要求smack和selinux不能够同时运行,不能同时存在于同一个运行中的内核;

查看内核是否开启以下的功能(如果没有则需要开启):


CONFIG_NETLABEL=y

CONFIG_SECURITY=y

CONFIG_SECURITY_NETWORK=y

CONFIG_SECURITY_SMACK=y

CONFIG_SECURITY_SELINUX should not be
set


步骤:


make menuconfig


18143741_ww4m.jpg18143741_aldn.jpg18143742_lnp6.jpg18143742_mx9k.jpg

make modules_install

make install

查看/proc/filesystems

可以看到smackfs,说明smack已经编进内核

18143742_o13a.jpg

执行如下的命令:

mkdir -p /smack

在文件/etc/fstab添加下面的一行

smackfs /smack smackfs defaults 0 0

然后执行下面的命令:

mount –a


然后就体验一下它的功能了:

1. 比如在用户test的home目录下(/home/test),新建文件夹 mkdir testdir

cd testdir/

touch testfile

2. 给新建的testfile 打上TheOther标签

setfattr
--name=security.SMACK64 --value=TheOther testfile

查看其标签

getfattr
--only-values -n security.SMACK64 -e text testfile

可以看到标签TheOther

18143742_a1hd.jpg

3. echo TheOne
2>/dev/null > /proc/self/attr/current,当前执行的进程默认都会被打为/proc/self/attr/current下的标签

4.配置策略echo -n "TheOne TheOther r---"> /sma ck/load

因为当前进程只要是没有特殊配置过的都被打为TheOne,所以当转换到普通用户test下,cat testfile是可读的

5.现在我将当前进程打为NotTheOne ,echo NotTheOne 2>/dev/null >
/proc/self/attr/current

当转换到普通用户test下,cat testfile则变成不可读的了

6.如果你想单独对某个进程打标签,而不是对当前进程打,就

attr -s security.SMACK64 -V TheOne /bin/cat

此时cat被标为TheOne,根据策略可以看出,当转换到普通用户test下,cat testfile是可读的

若attr -s
security.SMACK64 –V Not TheOne /bin/cat

根据策略可以看出,当转换到普通用户test下,cat testfile是不可读的

(需要说明的一点是,当cat本身被标上标签和/proc/self/attr/current打入标签共存时,cat本身的标签生效,而/proc/self/attr/current打入标签没有生效)


转载于:https://my.oschina.net/u/591648/blog/496570

最后

以上就是自由纸鹤为你收集整理的Linux内核LSM介绍及smack配置启用的全部内容,希望文章能够帮你解决Linux内核LSM介绍及smack配置启用所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(32)

评论列表共有 0 条评论

立即
投稿
返回
顶部