Linux LSM Smack功能简介
- LSM简介
Linux 中的安全模块LSM是一种轻量级的访问控制框架。用户在执行系统调用时,先通过内核接口依次执行功能性的错误检查,接着进行传统的DAC检查,在访问内核之前通过LSM钩子函数调用LSM,LSM根据具体的访问控制策略来决定方法的合法性,以此来实现访问控制。访问控制的架构图(不传了,其它地方也有):
几个相关概念简介(也是来自copy):
- DAC (Discretionary Access Control) 自主访问控制
Linux文件系统中对文件的操作属于DAC,DAC的主要内容包括以下几个概念: 主体、客体、权限(rwx)、所有权(ugo),由客体的属主对自己的客体进行管理,由主体决定是否将自己客体的访问权限授权给其他主体,这种控制方式是自主的。下面的例子看到bigxu用户对xgx管理的客体没有写权限,当bigxu主体对test.c文件进行写操作的时候会被拒绝,xgx用户可以决定test.c能否被bigxu用户写操作这就是DAC.在DAC系统中,文件的所有者是创建这个文件的计算机的使用者,此文件的自主访问控制权限由它的创建者来决定如何设置和分配;
bigxu@bigxu-UC7300-series:/home/xgx/smack/smack_test$ ls -lth test.c
-rw-r--r-- 1 xgx xgx 356 Jul 16 20:13 test.c
bigxu@bigxu-UC7300-series:/home/xgx/smack/smack_test$ whoami
bigxu
bigxu@bigxu-UC7300-series:/home/xgx/smack/smack_test$ echo "a" >> test.c
-bash: test.c: Permission denied
bigxu@bigxu-UC7300-series:/home/xgx/smack/smack_test$ 1234567
- 2LSM钩子
LSM框架下的访问策略包括selinux,smack,tomoyo,yama 用户还可以注册自己的钩子函数。每个策略都是通过各自的init函数调用register_security函数来注册,注册到LSM框架的模块被加载成功后,就可以进行访问控制。LSM里面给出了结构体security_operations,里面给出了很多钩子函数,实现了相关钩子函数就可以实现访问控制。
2 SMACK简介及内核配置方法
LSM框架下的访问策略包括selinux,smack,tomoyo,yama 用户还可以注册自己的钩子函数。每个策略都是通过各自的init函数调用register_security函数来注册,注册到LSM框架的模块被加载成功后,就可以进行访问控制。LSM里面给出了结构体security_operations,里面给出了很多钩子函数,实现了相关钩子函数就可以实现访问控制了。(LSM是软件策略,目前看来与硬件加解密模块无关)。目前信息看smack策略开销小,规则比较全面,策略简单直接,最适合嵌入式系统。
2.1内核配置
Smack需要使能网络配置,
CONFIG_NETLABEL=y (网络功能)
CONFIG_INET=y (tcp ip 那个)
CONFIG_SECURITY=y
CONFIG_SECURITY_NETWORK=y
CONFIG_SECURITY_SMACK=y
2.2 Smack 文件系统挂载
查看/proc/filesystems
如果看到smackfs,说明smack已经编进内核
执行如下的命令:
mkdir -p /smack
在文件/etc/fstab添加下面的一行
smackfs /smack smackfs defaults 0 0
然后执行下面的命令:
mount –a
可以完成smackfs 文件系统的挂载。
3 Smackload工具
Smack依赖扩展文件属性来管理,虽然attr setattr getattr等扩展文件的操作命令可以也可以配置安全标签属性,最好还是使用smackload工具操作比较方便和安全。可以保证属性和命令的正确性
源码下载地址https://github.com/smack-team/smack。
3.1配置与编译
./configure -host aarch64-linux-gnu
make
编译生成的chsmack mackcipso smackload smackaccess smackctl 执行程序拷贝到自己系统。将库函数libsmack.so.1.0.2拷贝到自己系统/lib中。
3.2 命令简单说明
Smackload 这给命令可以帮助正确的加载规则到/smack/cipso
chsmack 这个命令显示smack相关的标签属性。
smackcipso 可以将cipso配置内容加入到/smack/cipso
cipso是互联网安全相关的。smackcipso配置规则后,进行网络操作后,使用tcpdump可以看到在ip选项域增加了cipso标签信息。
主要说明一下smackload和chsmack的文件访问控制功能。
4 Smack规则简介
1. 主体(Subject)
Smack主体是指Linux内核进程。
2. 客体(Object)
Smack客体是指Linux内核客体对象,如文件、消息队列、套接字、共享内存、信号量等,客体也可以是Linux进程或者IPC。
3. 安全标签(Label)
Smack安全标签是C语言的字符串,但最多包含24个字符(包括‘/0’),Smack修改了进程task_struct安全域,在进程被初始创建时,其安全标签是“_”。同样,Smack修改了虚拟文件系统的inode和super_block安全域,使得文件系统被创建时所有文件的安全标签是“_”。长度为1个字符的标签是smack系统保留或待扩展的,我们自己打标签要大于一个字符。
4. 访问方式(Access)
Smack最初版本的访问方式只有四种,即读(r或R)、写(w或W)、执行(x或X)、盲写(a或A)。其中,在进程之间通信中,一个进程发送消息或者数据包给另一个进程时,这样的操作属于写操作。
5. 安全策略(smack rule)
Smack的安全策略分为Smack内置的安全策略和用户可定制的安全策略。Smack内置的安全策略是指原本就已经被Smack访问控制代码所规定的,包括如下几条:
(1)安全标签是“*”的进程发起的任何形式的访问都被拒绝;
(2)安全标签是“^”的进程发起的读或执行的请求都被容许;
(3)任何进程对安全标签是“_”的客体发起的读或执行的请求都被容许;
(4)任何进程对安全标签是“*”的客体发起的任何形式的请求都被容许;
(5)如果主体和客体的安全标签相同,那么该主体对该客体发起的任何形式的访问都被容许。
除此之外,用户可以根据自己的安全需求,在主、客体安全标签都已经存在的前提下,通过“smackload”工具写入安全策略,例如:
(1) abc xyz rwxarW
(2) abc xyz rwr
(3) abc xyz _
smackload工具会自动配置访问方式的格式,(1)表示主体abc对客体xyz有读、写、执行、盲写的权限,(2)表示主体abc对客体xyz有读、写权限,(3)表示主体abc对客体xyz没有任何权限。当用户连续写入以上三条规则后,Smack会将相同主、客体的规则进行覆盖,最终,abc对xyz没有任何权限。
需要指出的是,Smack策略可以被特权进程绕过,正因为此,Smack不能阻止超级用户或特权进程的一切行为。
5 Smack规则测试
Smack功能会对root用户无效,所以需要建立一个新用户。
执行命令 adduser test添加用户test
我们在tmp目录下完成相应测试。记得挂载tmpfs在tmp目录上,这样空间足够
可以在fstab中加入“tmpfs on /tmp type tmpfs (rw,relatime)”
chsmack 好像无法对 /bin/目录下的各个执行程序添加主体标签。提前把cat命令拷贝到tmp目录。我测试的tmp目录信息如下
/tmp # ls
1.txt cat chsmack smackload
利用root用户创建一个1.txt,
/tmp # echo "123" > 1.txt
/tmp #./ cat 1.txt
123
这个时候切到test用户,对1.txt的访问没有任何问题
/tmp # su test
/tmp $./ cat 1.txt
123
利用exit命令切回root用户。开始为1.txt 打标签
先看一下属性。可以看到cat 和 1.txt 默认情况下被访问时(作为客体)都是 "_" 标签
/tmp # ./chsmack 1.txt
1.txt access="_"
/tmp # ./chsmack cat
cat access="_"
修改1.txt的客体标签
/tmp # ./chsmack 1.txt -a abc
/tmp # ./chsmack 1.txt
1.txt access="abc"
这样,1.txt的客体标签就变成了“abc”
切换到test用户,发现已经无法cat这个文件了,提示cat权限被禁止
/tmp # su test
/tmp $ ./cat 1.txt
cat: can't open '1.txt': Permission denied
切换回root用户,给cat 打上执行时(主体)标签为abc,这个时候test用户的cat又可以访问1.txt文件了。(主题与客体标签都是abc,符合标签一致的条件)
/tmp $ exit
/tmp # ./chsmack cat -e abc
/tmp # ./chsmack cat
cat access="_" execute="abc"
/tmp # su test
/tmp $ ./cat 1.txt
123
/tmp $ /tmp # su test
123
切回root用户,修改cat的主体标签为aaa,这个时候,test用户的cat无法访问1.txt(主体aaa 无法访问客体abc)
/tmp # ./chsmack cat -e aaa
/tmp # ./chsmack cat
cat access="_" execute="aaa"
/tmp # su test
/tmp $ ./cat 1.txt
cat: can't open '1.txt': Permission denied
/tmp $
下面配置规则,让aaa主体可以访问abc客体,可以在/smack/load看当前规则情况。
/tmp # echo "aaa abc rwxat" | ./smackload
/tmp # cat /smack/load
aaa abc rwxat
/tmp # su test
/tmp $ whoami
test
/tmp $ ./cat 1.txt
123
可以看到,aaa 访问 abc的规则生效
Linux LSM Smack功能简介相关推荐
- kali Linux各工具功能简介
Kali Linux工具清单 https://tools.kali.org/tools-listing 名称 类型 使用模式 功能 功能评价 dmitry 信息收集 whois查询/子域名收集/端 ...
- linux mint 19新功能,Linux Mint 19.3将在2019年12月正式发布,附新功能简介
Linux Mint 19.3 'Tricia'将定于2019年12月正式发布并提供ISO下载,在2019年圣诞节前后你就可以使用或升级到该版本.它基于稳定的Ubuntu 18.04.3 LTS版本, ...
- gps网络对时Linux,gps网络时间对时服务器的功能简介
gps网络时间对时服务器的功能简介 将通信局域网上各种通信设备或计算机设备的时间信息基于UCT时间偏 差限定在足够小的范围内,这种同步过程叫做网络时间同步. 有源同步和无源同步 任何时间应用系统都应该 ...
- 华为云计算IE面试笔记-华为云迁移工具Rainbow功能简介。支持哪些虚拟化平台和操作系统的迁移?支持哪些业务迁移方式?Windows在线迁移和Linux在线迁移前针对OS需要做哪些检查?
1. 功能简介:Rainbow迁移工具是华为自研的基于操作系统层面的迁移工具,提供将主机(X86架构服务器)系统及数据或其它虚拟化平台的业务系统完整地.在线不中断地迁移到华为FusionSphere虚 ...
- 【Android 逆向】代码调试器开发 ( 代码调试器功能简介 | 设置断点 | 读写内存 | 读写寄存器 | 恢复运行 | Attach 进程 )
文章目录 一.代码调试器功能简介 二.Attach 进程 一.代码调试器功能简介 代码调试器功能 : 设置断点 : 无论什么类型的调试器 , 都必须可以设置断点 , 运行到断点处 , 挂起被调试进程 ...
- Linux 下使用 Sar 简介
Linux 下使用 Sar 简介 提交 我的留言 加载中 已留言 介绍 Sar 最早是实现在 Salaris Unix 系统里,后来移植到了大部分其他的 Unix 系统(如AIX,HP-UX等).Li ...
- Hadoop生态圈-Ambari控制台功能简介
Hadoop生态圈-Ambari控制台功能简介 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在经历一系列安装过程之后(部署过HDP后我终于发现为什么大家喜欢用它了,部署比CDH简 ...
- 经济型EtherCAT运动控制器(一):功能简介与应用场景
XPLC006E功能简介 XPLC006E是正运动运动控制器推出的一款多轴经济型EtherCAT总线运动控制器,XPLC系列运动控制器可应用于各种需要脱机或联机运行的场合. XPLC006E自带6个电 ...
- Linux用户认证方法简介
Linux用户认证方法简介 当今IT环境中,任何计算机系统都要充分考虑设计.使用和运行过程中的安全性.所以在目前主流操作系统的各个环节当中都增加了很多安全方面的功能和特性,而在众多的安全特性和功能中有 ...
最新文章
- 推出第一个免费工具CCT
- 小技巧:帮你批量删除代码前的行号
- bootstrap table使用参考
- windows和linux下的spice客户端使用方法
- java mybatis狂神说sql_狂神说MyBatis01:第一个程序
- 同一界面放两个TTIWDBAdvWebGrid的问题(delphi IW TMS)
- 带瀑布流的电钢琴_《EduOffice数字音乐电钢琴互动教室教学系统》系统特色之六:创...
- MFC TeeChart 用法整理二
- 不存在有效_曝光!吕梁这些单位存在安全隐患!
- java经典算法(八)---zws
- Stroke:利用人类遗传学理解缺血性卒中预后的机制
- 删除脚注分割线(word左下角的横线)
- html实现太极图效果
- 计算机参数含义,电脑内存条参数各有什么含义?
- unity urp内置lit材质源码解析(下)
- 什么是游戏美术(游戏美工)?
- C#集合中的Add与AddRange
- 计算广告学习笔记1.9 广告的基础知识-在线广告系统结构
- 手机页面底部浮动的按钮
- win7 64位 plsql连接Oracle 报不能初始化oci.dll解决方法