日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

android中SELINUX规则分析和语法简介

發布時間:2025/4/16 linux 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android中SELINUX规则分析和语法简介 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

點擊打開鏈接

1. SELINUX是可以理解為一種Android上面的安全機制,是有美國國家安全局和一些公司設計的一個針對linux的安全加強系統
我們可以通過配置SELINUX的相關policy,來定制自己的手機的一些權限,比如,我們可以完全讓root用戶沒有任何的權限和user一樣
2. 在android里面,有兩個類型,一種是文件,一種是進程。
? ?針對這兩種類型,我們可以先來看看他們的不同。
? ?在android上面,adb shell之后進入手機,ps -Z可以查看當前進程所擁有的selinux的權限。

? ?舉例:

[plain]?view plaincopyprint?
  • LABEL??????????????????????????USER?????PID???PPID??NAME??
  • u:r:init:s0????????????????????root??????1?????0?????/init??
  • u:r:kernel:s0??????????????????root??????2?????0?????kthreadd??
  • ...??
  • u:r:kernel:s0??????????????????root??????258???2?????irq/322-HPH_R?O??
  • u:r:logd:s0????????????????????logd??????259???1?????/system/bin/logd??
  • u:r:healthd:s0?????????????????root??????260???1?????/sbin/healthd??
  • u:r:lmkd:s0????????????????????root??????261???1?????/system/bin/lmkd??
  • u:r:servicemanager:s0??????????system????262???1?????/system/bin/servicemanager??
  • u:r:vold:s0????????????????????root??????263???1?????/system/bin/vold??
  • u:r:surfaceflinger:s0??????????system????264???1?????/system/bin/surfaceflinger??
  • u:r:tctd:s0????????????????????root??????265???1?????/system/bin/tctd??
  • u:r:rfs_access:s0??????????????system????268???1?????/system/bin/rfs_access??
  • u:r:tee:s0?????????????????????system????271???1?????/system/bin/qseecomd??
  • u:r:kernel:s0??????????????????root??????280???2?????kworker/3:1H??
  • u:r:kernel:s0??????????????????root??????290???2?????kauditd??
  • u:r:rmt_storage:s0?????????????nobody????291???1?????/system/bin/rmt_storage??
  • u:r:shell:s0???????????????????shell?????292???1?????/system/bin/sh??
  • u:r:netd:s0????????????????????root??????295???1?????/system/bin/netd??
  • u:r:debuggerd:s0???????????????root??????296???1?????/system/bin/debuggerd??
  • u:r:tee:s0?????????????????????system????297???271???/system/bin/qseecomd??
  • ? ? 在這個例子中,我們可以進行分析。
    ? ? 在android中,只定義了一個user即為u. 另外,如果是進程的話,都會統一定義為r,如果是文件的話,會被定義為object_r. 第三個是這個進程type,在andorid里面,定義了100多個type.按照目前我的理解,這個是進程所屬的>類型。第四個是s0,這個是一個安全的等級。但是暫時還沒有接觸到配置這個的地方。

    ? ? 另外就是文件,文件想要查看相關SELINUX權限的話,需要去執行ls -Z
    [plain]?view plaincopyprint?
  • drwxr-x--x?root?????sdcard_r??????????u:object_r:rootfs:s0?storage??
  • drwx--x--x?root?????root??????????????u:object_r:tmpfs:s0?synthesis??
  • dr-xr-xr-x?root?????root??????????????u:object_r:sysfs:s0?sys??
  • drwxr-xr-x?root?????root??????????????u:object_r:system_file:s0?system??
  • drwxrwxr-x?system???tctpersist??????????u:object_r:tct_persist_file:s0?tctpersist??
  • lrwxrwxrwx?root?????root??????????????u:object_r:rootfs:s0?tombstones?->?/data/tombstones??
  • -rw-r--r--?root?????root??????????????u:object_r:rootfs:s0?ueventd.qcom.rc??
  • -rw-r--r--?root?????root??????????????u:object_r:rootfs:s0?ueventd.rc??
  • ? ? 在這個例子中,結合上面的分析,我們知道了object_r是代表的文件,u是android的唯一的用戶,rootfs是這個文件所對應的類型,s0是一個安全的等級限制。

    3. 如何配置selinux
    ? ?首先,按照Google的官方文檔:
    ? ?需要linux內核首先是支持selinux的,另外需要android的selinux的配置文件,也就是extern/sepolicy里面的內容。
    ? ?然后就是修改BoardConfig.mk
    ? ?Google的nexus的sepolicy的支持就放在了 device/lge/mako/sepolicy
    ? ?首先會包含廠商定制的sepolicy的文件夾: BOARD_SEPOLICY_DIRS
    ? ?然后將規則添加到了sepolicy中: BOARD_SEPOLICY_DIRS

    ? 這樣的話,我們編譯出來的image其實就是具有了selinux的功能。
    ? 其實如果沒有廠商定制的話,也是會編譯到external/sepolicy的,這樣的話,就是使用andriod所有默認的sepolicy(It defines the domains and types for the AOSP services and apps common to all devices. )

    ? ? 然后理解了這個之后,我們可以看到其實很多的廠商也是有自己的配置規則在device/***/***/sepolicy下面的.

    4. selinux的配置規則:
    ? ?首先要了解sepolicy的結構:
    ? ?a. App進程?-> mac_permissions.xml
    ? ?b. App數據文件?-> seapp_contexts
    ? ?c. 系統文件??-> ?file_contexts
    ? ?d. 系統屬性?-> property_contexts

    ? ?在te文件中,我們一般遇到的語法是這樣的:
    ???rule_name source_type target_type:class perm_set
    ? ?解讀為: 為source_type設置一個rule_name的規則,規則是對target_type的class 進行 perm_set的操作。

    ? ?然后是一些特殊的配置文件:
    ? ?a. external/sepolicy/attributes?-> 所有定義的attributes都在這個文件
    ? ?b. external/sepolicy/access_vectors?-> 對應了每一個class可以被允許執行的命令
    ? ?c. external/sepolicy/roles??-> Android中只定義了一個role,名字就是r,將r和attribute domain關聯起來
    ? ?d. external/sepolicy/users??-> 其實是將user與roles進行了關聯,設置了user的安全級別,s0為最低級是默認的級別,mls_systemHigh是最高的級別
    ? ?e. external/sepolicy/security_classes?-> 指的是上文命令中的class,個人認為這個class的內容是指在android運行過程中,程序或者系統可能用到的操作的模塊
    ? ?f. external/sepolicy/te_macros?-> 系統定義的宏全在te_macros文件
    ? ?g. external/sepolicy/***.te??-> 一些配置的文件,包含了各種運行的規則

    ? ?另外,selinux有兩種工作模式:
    ? ??“permissive”:所有操作都被允許(即沒有MAC),但是如果有違反權限的話,會記錄日志
    ? ??“enforcing”:所有操作都會進行權限檢查

    ? ?最后,type的命令如下:
    ???type type_id [alias alias_id,] [attribute_id] ??# 將type_id(別名為alias)關聯到attribute. 這樣的話,方便用attribute來管理不同的type中包含相同的屬性的部分。

    ? ?class命令的格式為:
    ? ?class class_name [ inherits common_name ] { permission_name ... }
    ? ?inherits表示繼承了common定義的權限,然后自己額外實現了permission_name的權限

    ? ?在te文件中常見的四種命名的規則:
    ? ?allow:賦予某項權限。
    ? ?allowaudit:audit含義就是記錄某項操作。默認情況下是SELinux只記錄那些權限檢查失敗的操作。allowaudit則使得權限檢查成功的操作也被記錄。注意,allowaudit只是允許記錄,它和賦予權限沒關系。賦予權限必須且只能使
    用allow語句。
    ? ?dontaudit:對那些權限檢查失敗的操作不做記錄。
    ? ?neverallow:前面講過,用來檢查安全策略文件中是否有違反該項規則的allow語句。如例子5所示:

    ? ?舉例:

    [plain]?view plaincopyprint?
  • type?init,?domain;??
  • ? ?將init關聯到domain,即將domain設置為init類型的屬性
    [plain]?view plaincopyprint?
  • allow?init?unlabeled:filesystem?mount;??
  • ? ?允許init類型對unlabeled類型的filesystem進行mount的操作
    [plain]?view plaincopyprint?
  • allow?init?fotad:unix_stream_socket?{?bind?create?};??
  • ? ?允許init類型對fotad類型的unix_stream_socket 進行bind和create的操作
    [plain]?view plaincopyprint?
  • allow?appdomain?anr_data_file:dir?search;??
  • allow?appdomain?anr_data_file:file?{?open?append?};??
  • ? ?首先appdomain是定義在te_macros里面的一個宏,很多的app規則會使用類似app_domain(shell)的命令將其添加進去
    ? ?這兩句話的意思是:1. 允許app去對anr_data_file類型的目錄進行查找的操作
    ? ?2. 允許app對anr_data_file類型的file進行打開和添加操作 ? 其實就是規定了出現anr時候,app往/data/anr/里面寫入的權限限制

    [plain]?view plaincopyprint?
  • neverallow?{?appdomain?-unconfineddomain?}?kmem_device:chr_file?{?read?write?};??
  • ? ?絕對不允許app(除了有unconfineddomain屬性的app)對kmem_device類型的字符設備進行讀寫的操作

    [plain]?view plaincopyprint?
  • neverallow?{?appdomain?-unconfineddomain?}?self:capability2?*;??
  • ? ?絕對不允許除了unconfineddomain以外的app對self類型的capability2進行任何的操作
    [plain]?view plaincopyprint?
  • type?httpd_user_content_t,?file_type,?httpdcontent;??
  • ? ? 聲明一個httpd_user_content_t的類型,具有file_type和httpdcontent的屬性
    [plain]?view plaincopyprint?
  • type?httpd_user_content_t;??
  • typeattribute?httpd_user_content_t?file_type,?httpdcontent;??
  • ? ?聲明一個httpd_user_content_t的類型
    ? ?定義httpd_user_content_t具有file_type, httpdcontent的屬性
    [plain]?view plaincopyprint?
  • allow?appdomain?self:rawip_socket?create_socket_perms;??
  • ? ?所有可以設置類型的地方其實都可以設置為屬性。
    ? ?比如這個例子,我們允許所有具有app屬性的內容可以去對self屬性的rawip_socket進行create的操作
    [plain]?view plaincopyprint?
  • allow?{user_t?domain}?{bin_t?file_type?sbin_t}:file?execute?;??
  • ? ?允許user_t和domain屬性的類對bin_t, file_type, sbin_t類型的file進行可執行的操作
    [plain]?view plaincopyprint?
  • allow?user_t?user_t:process?signal;??
  • allow?user_t?self:process?signal;??
  • ? ?這兩條語句的表述其實是一致的,其實self指的是目標的類型和發起人的類型是一致的
    ? ?所以不能聲明一個類型或者屬性叫做self
    [plain]?view plaincopyprint?
  • allow?user_t?bin_t:file?~{?write?setattr?ioctl?};??
  • ? ?允許user_t對bin_t類型的file進行除了write setattr ioctl相關的操作
    [plain]?view plaincopyprint?
  • type_transition?system?wifi_data_file:sock_file?system_wpa_socket;??
  • ? ?當一個類型為system的類別去進行wifi_data_file類型的sock_file訪問時,類型默認切換到system_wpa_socket

    ? ?如果下面這條語句想要執行成功
    ? ?type_transition init_t apache_exec_t:process apache_t;
    ? ?至少首先聲明下面的三條規則:
    ? ?allow init_t apache_exec_t:file execute;
    ? ?allow init_t apache_t:process transition;
    ? ?allow apache_t apache_exec_t:file entrypoint;

    ? ?type_transition和type_change的語法規則是一樣的, type_change規則的影響不會在內核中生效,而是依賴于用戶空間應用程序,如login或sshd

    5. 生成方法:

    ? ??下面介紹一下最簡單的安全策略(se-policy)添加方法,各組碰到SELinux導致的訪問禁止問題,可以參考用這種方法確認和解決。

    ? ??1)?安裝pc上的工具,用于自動生成安全策略

    $ sudo apt-get install policycoreutils

    ????2),刷userdebug/eng軟件,先將SELinux設置成Permissive模式,只輸出警告不阻止操作

    ?使用getenforce命令查看當前模式:$ adb shell getenforce

    Enforcing

    Enforcing模式下,除安全策略允許外的操作都會被阻止;使用setenforce命令更改當前模式(root權限需要):

    $ adb root

    restarting adbd as root
    $ adb shell setenforce 0
    $ adb shell getenforce
    Permissive

    開發如果碰到懷疑是SELinux?可以通過這種方法關閉SELiunx(?setenforce 0),以確認是不是SELinux引起的

    ????3),按照流程完成整個操作,抓取log,過濾出警告信息

    • 如果log較多,可以先用grep工具過濾一下:

    $ grep "avc: *denied" log.txt > denied.txt
    $ cat denied.txt
    <14>[? 389.521062] avc:? denied? { set } for property=audio.ftm.rcv_reverse scontext=u:r:system_app:s0?tcontext=u:object_r:default_prop:s0 tclass=property_servic

    ??? 4),使用pc工具生成安全策略

    • 命令audit2allow用來一次性生成所有安全策略,輸入為前面抓取的?log

    $ audit2allow -i denied.txt


    總結

    以上是生活随笔為你收集整理的android中SELINUX规则分析和语法简介的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 久久人妻精品白浆国产 | 国产福利91精品一区二区三区 | 男女在线观看 | 日韩成人午夜 | 综合色在线 | 国产精品无码一区二区无人区多人 | 日日日插插插 | 少妇一级淫片免费播放 | 蜜桃视频在线观看污 | 91黄色在线观看 | 一区二区三区精品在线 | 免费看美女被靠到爽的视频 | 国产91丝袜在线播放九色 | 天天操天天撸 | 神马久久久久久久久久 | 日本精品视频一区二区三区 | a级国产毛片| 欧美激情精品久久久久久变态 | 一区二区三区免费视频观看 | 国产成人精品免费 | 亚洲欧美在线视频 | 久久精品五月天 | 中国黄色大片 | 久久久久无码精品 | 国产精品久久久久久一区二区三区 | 911av| 国产一区二区波多野结衣 | 国产美女一区 | 九九热精品在线 | 日韩区欧美区 | 男朋友是消防员第一季 | 伊人免费| 午夜精品久久久久久久99黑人 | 欧美色综合网站 | 九九久久精品 | 色淫湿视频 | 亚洲区一区 | 久久人妖| 国产精品黄在线观看 | 噜噜噜视频| 日韩经典av | 日韩av图片 | 男男受被啪到高潮自述 | 亚洲精品免费播放 | 香蕉视频在线观看视频 | av精选 | 欧美激情一区二区在线 | 欧美亚洲免费 | 传媒视频在线观看 | 特黄一区二区三区 | 少妇三级全黄 | 国产免费成人av | 欧美日韩一区二区三区在线 | 精品精品 | 少妇影院在线观看 | 重囗味sm一区二区三区 | 婷婷六月综合 | 欧美日韩三级在线 | 日本va在线| 一级黄色片免费播放 | 91社区视频 | 成人乱码一区二区三区av | 99综合| 亚洲区一区 | 在线国产区 | 国产精品日韩欧美 | 色资源网站 | 蜜乳av一区 | 亚一区二区 | 欧美黄色短视频 | 成人免费在线观看网站 | 亚洲一区二区三 | 狠狠躁狠狠躁视频专区 | 男女午夜激情 | 日本黄色一区二区 | 日本一卡二卡在线 | 海角国产乱辈乱精品视频 | 国产女人18水真多18精品一级做 | 国产一区二区三区福利 | 国产网站大全 | 中文字幕人妻一区二区在线视频 | 少妇太紧太爽又黄又硬又爽小说 | 亚洲黄色小说视频 | 在线观看免费av网址 | 日本黄色免费大片 | 在线一本| 国产人成免费视频 | 牛牛电影国产一区二区 | 一区二区三区免费网站 | 黄色国产在线视频 | 成人在线一区二区三区 | 国产婷婷一区二区三区 | 在线看的网站 | 四虎国产精品成人免费入口 | aa在线视频 | 久久精品国产亚洲av高清色欲 | 成人在线免费看片 | 2018中文字幕在线观看 | 在线精品福利 |