SElinux权限

  • 安全增强型Linux(Security-Enhanced Linux)简称SELinux,它是一个linux内核模块,也是linux的一个安全子系统;
  • SElinux由美国安全局开发。2.6及以上版本的linux内核都有SElinux模块;

SElinux 的作用及权限管理机制
1、SElinux主要作用:是最大限度地减少系统中服务进程可访问的资源(最小权限原则)。
2、DAC(自主访问内控制:Discretionary Access Control):在没有SElinux的操作系统中,决定一个资源是否被访问的因素是:某个资源是否有对应用户的权限(读、写、执行等);
只要访问这个资源的进程符合以上条件就可以被访问。而最致命的问题是,root用户不受任何管制,系统上任何资源都可以无限制的访问,这种权限管理机制的主体是用户,也成为自主访问控制(DAC);
3、MAC(强制访问控制:Mandatory Access Contral):在使用了SELinux的操作系统中,决定一个资源是否被访问的因素除了上述因素外,还需要判断每一类进程是否拥有对某一类资源的访问权限;这样一来,即使进程以root身份运行的,也要判断这个进程的类型以及访问的资源类型才能决定是否允许访问某个资源。进程的活动空间也可以被压缩到最小。
即使是以root身份运行的服务进程,一般只能访问到它所需要的资源。即使程序出现了漏洞,影响范围也制式在其允许的访问资源范围内。安全性大大增强。这种权限管理的机制的主体是进程,也被称为强制访问控制(MAC);

SELinux基本概念

  • 主体(subject):可以完全等同于进程;
  • 对象(Object):被主体访问的资源。可以是文件、目录、端口、设备等;
  • 政策和规则(Policy &Rule):系统中通常有大量的文件和进程,为了节省时间和开销,通常我们只是选择性的对某些进程进行管制。而那些进程需要管制、要怎么管制是由政策决定的。
    一套政策里面有多个规则。部分规则可以按照需要启用或禁用;
    规则是模块化的、可扩展的。在安装新的应用程序时,应用程序可通过添加新的模块来添加规则。用户可以手动的增加规则。
  • 安全上下文安全上下文(Security Context):
    安全上下文是 SELinux 的核心。
    安全上下文我自己把它分为「进程安全上下文」「文件安全上下文」
    一个「进程安全上下文」一般对应多个「文件安全上下文」。
    只有两者的安全上下文对应上了,进程才能访问文件。它们的对应关系由政策中的规则决定。
    文件安全上下文由文件创建的位置和创建文件的进程所决定。而且系统有一套默认值,用户也可以对默认值进行设定。
    需要注意的是,单纯的移动文件操作并不会改变文件的安全上下文。
    安全上下文的结构及含义
    安全上下文有四个字段,分别用冒号隔开。形如:system_u:object_r:admin_home_t:s0。

SElinux的三种工作模式

  1. enforcing:强制模式。违反 SELinux 规则的行为将被阻止并记录到日志中。
  2. permissive:宽容模式。违反 SELinux 规则的行为只会记录到日志中。一般为调试用。
  3. disabled:关闭 SELinux。
    SELinux 工作模式可以在 /etc/selinux/config 中设定。
    如果想从 disabled 切换到 enforcing 或者 permissive 的话,需要重启系统。反过来也一样。
    enforcing 和 permissive 模式可以通过 setenforce 1|0 命令快速切换。

te文件基本语法

rule_name source_type target_type:class perm_set
语法 含义
source_type 一个进程或一组进程的标签。也称为域类型,因为它只是指进程的类型
target_type 个对象(例如,文件、套接字)或一组对象的标签
Class 要访问的对象(例如,文件、套接字)的类型
perm_set 要执行的操作(例如,读取、写入)
rule_name命令 含义
allow 允许某个进程执行某个动作
auditallow audit含义就是记录某项操作。默认SELinux只记录那些权限检查失败的操作。 auditallow则使得权限检查成功的操作也被记录。注意,allowaudit只是允许记录,它和赋予权限没关系。赋予权限必须且只能使用allow语句
dontaudit 对那些权限检查失败的操作不做记录
neverallow 没有被allow到的动作默认就不允许执行的。neverallow只是显式地写出某个动作不被允许,如果添加了该动作的allow,则会编译错误
  • 一般添加selinux权限就是先在file.te文件里面定义一个label:
    type sys_lcd_brightness_file, fs_type,sysfs_type;
    然后再在文件file_contexts中将这个label与实际的节点关联起来
    /sys/devices/platform/leds-mt65xx/leds/lcd-backlight/brightness u:object_r:sys_lcd_brightness_file:s0
    最后想添加什么权限在对应的te文件里面allow就可以 了。
    例如:在调试lcd_backlight这个测试项的时候遇到屏幕不会闪动的情况,看log是报sys_lcd_brightness_file这个节点没有写权限
    File.te中添加:
    type sys_lcd_brightness_file, fs_type,sysfs_type;
    type sys_red_brightness_file, fs_type,sysfs_type;
    file_contexts中添加:
    sys/devices/platform/leds-mt65xx/leds/lcd-backlight/brightness u:object_r:sys_lcd_brightness_file:s0
    /sys/devices/platform/leds-mt65xx/leds/red/brightness u:object_r:sys_red_brightness_file:s0
    system_app.te中添加:
    allow system_app sys_lcd_brightness_file:file rw_file_perms;
    allow system_app sys_red_brightness_file:file rw_file_perms;
    /system_server.te中添加:
    allow system_server sys_lcd_brightness_file:file rw_file_perms;
    allow system_server sys_red_brightness_file:file rw_file_perms;

原始设备制造商(OEM)最好从AOSP中的政策入手,然后在这些政策的基础上创建自己的自定义政策

一般应该不需要直接修改 system/sepolicy中的文件,而只需要添加您自己的设备专用政策文件(位于/device/manufactuer/device-name/sepolicy 目录中)即可。

  • 要实现SElinux,您必须船舰或修改一下文件:
    1、新的SElinux政策源代码(*.te)文件,位于/device/manufactuer/device-name/sepolicy 目录中。这些文件用于定义域及其标签。在编译到单个SE Linux内核文件时,新的策略文件会与现有的策略文件组合在一起。
    注意:请勿修改Android开发的源代码项目提供的app.te文件,否则可能破坏所有第三方的应用。
    2、更新后的BoardConfig.mk位于包含sepolicy子目录的目录中,如果初始实现中没有sepolicy子目录,那么在该子目录创建之后,必须更新BoardConfig.mk makefile,以便引用该目录。
    3、file_contexts 位于sepolicy子目录中,该文件用于为文件分配标签,并且可供多种用户空间组件使用,在创建新政策时,请创建或更新该文件,以便为新文件分配新标签。
    4、.genfs_contexts - 位于 sepolicy 子目录中。该文件用于为不支持扩展属性的文件系统(例如,proc 或 vfat)分配标签。此配置会作为内核政策的一部分进行加载,但更改可能对核心内 inode 无效。要全面应用更改,需要重新启动设备,或卸载后重新装载文件系统。此外,通过使用 context=mount 选项,还可以为装载的特定系统文件(例如 vfat)分配特定标签。
    5、property_contexts - 位于 sepolicy 子目录中。该文件用于为 Android 系统属性分配标签,以便控制哪些进程可以设置这些属性。在启动期间,init 进程会读取此配置。

接下来,只需在 sepolicy 子目录和各个政策文件创建之后,更新 BoardConfig.mk Makefile(位于包含 sepolicy 子目录的目录中)以引用该子目录和这些政策文件即可,如下所示。BOARD_SEPOLICY 变量及其含义记录在 system/sepolicy/README 文件中。

BOARD_SEPOLICY_DIRS += \ 
        <root>/device/manufacturer/device-name/sepolicy

BOARD_SEPOLICY_UNION += \
        genfs_contexts \
        file_contexts \
        sepolicy.te
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,222评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,455评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,720评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,568评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,696评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,879评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,028评论 3 409
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,773评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,220评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,550评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,697评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,360评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,002评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,782评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,010评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,433评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,587评论 2 350