概述
(http://www.zhihu.com/question/21637060/answer/58362892?group_id=614562143606079488#comment-89324790)
用户在执行系统调用时,先通过原有的内核接口依次执行功能性的错误检查,接着进行传统的DAC检查,并在即将访问内核的内部对象之前,通过LSM钩子函数调用LSM。LSM再调用具体的访问控制策略来决定访问的合法性。访问控制整体构架:
LSM框架下访问决策模块包括selinux,smack,tomoyo,yama,apparmor.
每个决策模块都是通过各自的XXX_init函数调用register_security()函数,注册到LSM框架的模块被加载成功后,就可以进行访问控制操作。如果此时还有一个安全模块要使用register_security()函数进行加载,则会出现错误,直到使用框架注销后,下一个模块才可以载入。
Linux安全模块(LSM)提供了两类对安全钩子函数的调用:一类管理内核对象的安全域,另一类仲裁对这些内核对象的访问。对安全钩子函数的调用通过钩子来实现,钩子是全局表security_ops中的函数指针,这个全局表的类型是security_operations结构,这个结构定义在include/linux/security.h这个头文件中。
通过对security代码进行一番简单的分析,LSM启动过程流图:
security_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
make modules_install
make install
查看/proc/filesystems
可以看到smackfs,说明smack已经编进内核
执行如下的命令:
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
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配置启用所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复