天天看点

Linux Smack 学习总结

Linux 中的安全模块LSM是一种轻量级的访问控制框架。用户在执行系统调用时,先通过内核接口依次执行功能性的错误检查,接着进行传统的DAC检查,在访问内核之前通过LSM钩子函数调用LSM,LSM根据具体的访问控制策略来决定方法的合法性,以此来实现访问控制。访问控制的架构图:

Linux Smack 学习总结

1, DAC (Discretionary Access Control) 自主访问控制

Linux文件系统中对文件的操作属于DAC,DAC的主要内容包括以下几个概念: 主体、客体、权限(rwx)、所有权(ugo),由客体的属主对自己的客体进行管理,由主体决定是否将自己客体的访问权限授权给其他主体,这种控制方式是自主的。下面的例子看到bigxu用户对xgx管理的客体没有写权限,当bigxu主体对test.c文件进行写操作的时候会被拒绝,xgx用户可以决定test.c能否被bigxu用户写操作这就是DAC.在DAC系统中,文件的所有者是创建这个文件的计算机的使用者,此文件的自主访问控制权限由它的创建者来决定如何设置和分配;

[email protected]-UC7300-series:/home/xgx/smack/smack_test$ ls -lth test.c 
-rw-r--r--  xgx xgx  Jul  : test.c
[email protected]-UC7300-series:/home/xgx/smack/smack_test$ whoami
bigxu
[email protected]-UC7300-series:/home/xgx/smack/smack_test$ echo "a" >> test.c 
-bash: test.c: Permission denied
[email protected]-UC7300-series:/home/xgx/smack/smack_test$ 
           

2,LSM钩子

LSM框架下的访问策略包括selinux,smack,tomoyo,yama 用户还可以注册自己的钩子函数。每个策略都是通过各自的init函数调用register_security函数来注册,注册到LSM框架的模块被加载成功后,就可以进行访问控制。LSM里面给出了结构体security_operations,里面给出了很多钩子函数,实现了相关钩子函数就可以实现访问控制了。

3,SMACK

下面具体介绍一下如何enable的smack,enable smack 需要重新1)编译内核,enable smack选项。

Linux Smack 学习总结
Linux Smack 学习总结
Linux Smack 学习总结

重现编译好内核之后

在/etc/fstab 中添加

smackfs /smack smackfs smackfsdef=* 0 0

创建/smack 目录,执行mount -a

2)源码编译安装smackload

./configure

make && make install

源码下载地址https://github.com/smack-team/smack

3)smack rule

subject:

主体,系统中进程

object:

客体,内核客体对象,如文件、消息队列、套接字、客体也可以是linux进程

label:

标签,Smack安全标签是C语言的字符串,系统默认的安全标签是“_”。

access:

访问方式,Smack最初版本的访问方式有rwxat。其中,在进程之间通信中,一个进程发送消息或者数据包给另一个进程时,这样的操作属于写操作。

access Rule:

(1)安全标签是“*”的进程发起的任何形式的访问都被拒绝;

(2)安全标签是“^”的进程发起的读或执行的请求都被容许;

(3)任何进程对安全标签是“_”的客体发起的读或执行的请求都被容许;

(4)任何进程对安全标签是“*”的客体发起的任何形式的请求都被容许;

(5)如果主体和客体的安全标签相同,那么该主体对该客体发起的任何形式的访问都被容许。

(6)可以根据自己的安全需求,在主、客体安全标签都已经存在的前提下,通过“smackload”工具写入安全策略。

(7)其他策略都被拒绝

4,测试

测试一

root@bigxu-UC7300-series:/home/xgx/smack/smack_test# chsmack a.out 
a.out access="_" execute="aaa"
root@bigxu-UC7300-series:/home/xgx/smack/smack_test# chsmack test.txt 
test.txt access="bbb"
root@bigxu-UC7300-series:/home/xgx/smack/smack_test# 
root@bigxu-UC7300-series:/home/xgx/smack/smack_test# su xgx
xgx@bigxu-UC7300-series:~/smack/smack_test$ ./a.out 
open failed 
xgx@bigxu-UC7300-series:~/smack/smack_test$ su
Password: 
root@bigxu-UC7300-series:/home/xgx/smack/smack_test# echo "aaa bbb rwx" |smack
smackaccess  smackcipso   smackctl     smackload    
root@bigxu-UC7300-series:/home/xgx/smack/smack_test# echo "aaa bbb rwx" |smackload 
root@bigxu-UC7300-series:/home/xgx/smack/smack_test# su xgx
xgx@bigxu-UC7300-series:~/smack/smack_test$ ./a.out 

           

测试二 设置文件的transmutation属性

当文件夹没有设置T属性的时候,主题创建的客体属性和主题一致。当文件夹设置了T属性时,文件中创建的文件属性和文件夹一直(需要添加规则)。

root@bigxu-UC7300-series:/home/xgx/smack/smack_test# chsmack a.out 
a.out access="_" execute="eee"
root@bigxu-UC7300-series:/home/xgx/smack/smack_test# chsmack testdir/
testdir/ access="dirbbb"
root@bigxu-UC7300-series:/home/xgx/smack/smack_test# echo "eee dirbbb rwxat" | smackload 
root@bigxu-UC7300-series:/home/xgx/smack/smack_test# su xgx
xgx@bigxu-UC7300-series:~/smack/smack_test$ ./a.out 
xgx@bigxu-UC7300-series:~/smack/smack_test$ su
Password: 
root@bigxu-UC7300-series:/home/xgx/smack/smack_test# chsmack testdir/test1.txt 
testdir/test1.txt access="eee" 
root@bigxu-UC7300-series:/home/xgx/smack/smack_test# chsmack -t testdir/
root@bigxu-UC7300-series:/home/xgx/smack/smack_test# chsmack testdir/
testdir/ access="dirbbb" transmute="TRUE"
root@bigxu-UC7300-series:/home/xgx/smack/smack_test# su
root@bigxu-UC7300-series:/home/xgx/smack/smack_test# su xgx
xgx@bigxu-UC7300-series:~/smack/smack_test$ ./a.out 
xgx@bigxu-UC7300-series:~/smack/smack_test$ su
Password: 
root@bigxu-UC7300-series:/home/xgx/smack/smack_test# chsmack testdir/test1.txt 
testdir/test1.txt access="eee"
root@bigxu-UC7300-series:/home/xgx/smack/smack_test# rm testdir/test1.txt 
root@bigxu-UC7300-series:/home/xgx/smack/smack_test# su xgx
xgx@bigxu-UC7300-series:~/smack/smack_test$ ./a.out 
xgx@bigxu-UC7300-series:~/smack/smack_test$ su
Password: 
root@bigxu-UC7300-series:/home/xgx/smack/smack_test# chsmack testdir/test1.txt 
testdir/test1.txt access="dirbbb"
root@bigxu-UC7300-series:/home/xgx/smack/smack_test# 
           

参考资料:

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

http://schaufler-ca.com/description_from_the_linux_source_tree

http://www.tuicool.com/articles/ru2yui

继续阅读