android selinux

关键字: android, selinux, getenforce, setenforce, audit2allow

20180817 tjy

转载请注明出处

Android在4.3引入selinux, 当时工作上需要了解并解决一些selinux的问题, 这里总结一下涉及到的selinux的一些东西,不是普及性的文章, 只是记录和穿针引线的作用。

  1. logcat日志

如果某些可执行文件或者app或者文件访问的selinux没有设置好, 会在logcat中打印一些类似的日志, 这个时候需要对这些异常添加selinux权限了。

01-15 09:38:34.248    35    35 I kworker/0:1: type=1400 audit(0.0:23): avc: denied { search } for name="/" dev="mmcblk0p34" ino=2 scontext=u:r:kernel:s0 tcontext=u:object_r:persist_file:s0 tclass=dir permissive=1
01-15 09:38:38.468  1382  1382 I iptables-wrappe: type=1400 audit(0.0:26): avc: denied { read write } for path="socket:[18709]" dev="sockfs" ino=18709 scontext=u:r:netutils_wrapper:s0 tcontext=u:r:netmgrd:s0 tclass=netlink_socket permissive=1
01-15 09:38:47.128   410   410 I HwBinder:410_2: type=1400 audit(0.0:27): avc: denied { read } for name="class" dev="sysfs" ino=10 scontext=u:r:hal-server:s0 tcontext=u:object_r:sysfs:s0 tclass=dir permissive=1
01-15 09:38:47.128   410   410 I HwBinder:410_2: type=1400 audit(0.0:28): avc: denied { open } for path="/sys/class" dev="sysfs" ino=10 scontext=u:r:hal-server:s0 tcontext=u:object_r:sysfs:s0 tclass=dir permissive=1
01-15 09:38:48.768   880   880 I BootAnimation: type=1400 audit(0.0:29): avc: denied { dac_override } for capability=1 scontext=u:r:bootanim:s0 tcontext=u:r:bootanim:s0 tclass=capability permissive=1
01-15 09:38:54.208  3214  3214 I m.android.phone: type=1400 audit(0.0:33): avc: denied { open } for path="/dev/__properties__/u:object_r:lab_prop:s0" dev="tmpfs" ino=9703 scontext=u:r:radio:s0 tcontext=u:object_r:lab_prop:s0 tclass=file permissive=1
  1. permissive 和 enforce

如上面的日志所示, 日志以 permissive=1结尾,permissive=1 表示device处于permissive模式, 操作会被执行,但是logcat会打印这些日志, 一般用来调试。

如果手机当前处于enforce模式,则日志会以permissive=0结尾,日志里面描述的操作不会被执行,调试添加selinux权限后,需要在enforce模式下验证结果。

  1. setenforce 和 getenforce

setenforce 0 设置device进入 enforce模式。
setenforce 1 设置device进入 permissive模式。
getenforce 查看当前处于何种模式。

device-name:/system/bin # getenforce
getenforce
Permissive
device-name:/system/bin # setenforce 1
setenforce 1
device-name:/system/bin # getenforce
getenforce
Enforcing
device-name:/system/bin #
  1. file context

在 android代码中对可执行文件/一般文件/app/sysfs 定义了file context, 即它们的selinux域,

#from http://androidxref.com/8.1.0_r33/xref/device/google/dragon/sepolicy/file_contexts

# block devices
/dev/block/platform/700b0600\.sdhci/by-name/UDA       u:object_r:userdata_block_device:s0
/dev/block/platform/700b0600\.sdhci/by-name/CAC       u:object_r:cache_block_device:s0
/dev/block/platform/700b0600\.sdhci/by-name/MD1       u:object_r:metadata_block_device:s0
/dev/block/platform/700b0600\.sdhci/by-name/APP       u:object_r:system_block_device:s0
/dev/block/platform/700b0600\.sdhci/by-name/PST       u:object_r:frp_block_device:s0
/dev/block/platform/700b0600\.sdhci/by-name/recovery  u:object_r:recovery_block_device:s0
/dev/block/platform/700b0600\.sdhci/by-name/KERN-A    u:object_r:boot_block_device:s0
/dev/block/platform/700b0600\.sdhci/by-name/KERN-B    u:object_r:boot_block_device:s0
/dev/block/platform/700b0600\.sdhci/by-name/MSC       u:object_r:misc_block_device:s0
/dev/block/zram0                                      u:object_r:swap_block_device:s0
/dev/block/mmcblk0rpmb                                u:object_r:rpmb_block_device:s0

# /dev
/dev/dri/card0                                  u:object_r:gpu_device:s0
/dev/dri/controlD64                             u:object_r:gpu_device:s0

# system executables
/system/bin/init_regions\.sh                    u:object_r:locale_exec:s0
/system/bin/tune-thermal-gov\.sh                u:object_r:thermal_gov_exec:s0
/system/bin/dump_bq25892\.sh                    u:object_r:dump_bq25892_exec:s0
/system/bin/touchfwup\.sh                       u:object_r:touch_fw_update_exec:s0
/system/bin/rmi4update                          u:object_r:rmi4update_exec:s0
/system/bin/fwtool                              u:object_r:fwtool_exec:s0

# vendor executables
/vendor/bin/hw/android\.hardware\.dumpstate@1\.0-service.dragon      u:object_r:hal_dumpstate_impl_exec:s0

# logs for touch firmware update
/data/misc/touchfwup(/.*)?                      u:object_r:touch_fw_update_log_file:s0

selinux域里面又定义了selinux的权限,权限包含read/write/...。

#from http://androidxref.com/8.1.0_r33/xref/device/google/dragon/sepolicy/fwtool.te

# permissions for /system/bin/fwtool
type fwtool, domain, device_domain_deprecated;
type fwtool_exec, exec_type, file_type;

init_daemon_domain(fwtool)

# access /dev/mtd/*
allow fwtool mtd_device:dir search;
allow fwtool mtd_device:chr_file rw_file_perms;
  1. ls -Z

对于可执行文件, 通过 ls -Z 命令可以查看其selinux域。

device-name:/system/bin # ls -Z
u:object_r:system_file:s0           acpi 
u:object_r:adbd_exec:s0             adbd 
u:object_r:system_file:s0           am   
u:object_r:system_file:s0           app_process
u:object_r:zygote_exec:s0           app_process32
u:object_r:system_file:s0           applypatch
u:object_r:system_file:s0           appops
u:object_r:system_file:s0           appwidget
u:object_r:system_file:s0           arping
u:object_r:system_file:s0           art  
u:object_r:atrace_exec:s0           atrace
u:object_r:audioserver_exec:s0      audioserver
u:object_r:system_file:s0           base64
u:object_r:system_file:s0           basename
u:object_r:system_file:s0           bcc  
u:object_r:blkid_exec:s0            blkid 
u:object_r:system_file:s0           blockdev
u:object_r:system_file:s0           bmgr 
u:object_r:bootanim_exec:s0         bootanimation
u:object_r:system_file:s0           bootctl
u:object_r:bootstat_exec:s0         bootstat
u:object_r:system_file:s0           brctl 
u:object_r:bt_logger_exec:s0        bt_logger
u:object_r:system_file:s0           bu   
u:object_r:system_file:s0           bunzip2
u:object_r:system_file:s0           bzcat 
u:object_r:system_file:s0           bzip2 
u:object_r:system_file:s0           cal  
u:object_r:system_file:s0           cat  
u:object_r:system_file:s0           chcon 
u:object_r:system_file:s0           chgrp 
u:object_r:system_file:s0           chmod 
u:object_r:system_file:s0           chown 
u:object_r:system_file:s0           chroot
u:object_r:system_file:s0           chrt 
...

那么问题来了,源码编译可执行文件的时候, 没有对这个可执行文件定义selinux域,然后添加了可执行文件的selinux域,编译boot.img(selinux域是放在boot.img里面的,而可执行文件一般放在system.img或者vendor.img),把boot.img更新到手机里面(这种情况即更新了selinux域的定义,但是没有更新可执行文件), 此时,更新的selinux域不会在这个可执行文件上面生效。
我记得当时在集成一个feature的时候犯了这个错误。

  1. audit2allow

面对logcat日志里面一对selinux异常,挨个写allow语句太麻烦了,可以试试audit2allow工具, 具体用法请咨询百度。

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

推荐阅读更多精彩内容