selinux在 android 上的實現

2021-09-27 11:45:01 字數 1522 閱讀 3387

1.  在init.c main函式裡面初始化

int main(int argc, char **ar**)

selinux_initialize()這個函式裡面先判斷selinux 是否啟用,啟用則載入編譯出來的策略檔案,並在使用者空間用mmap方式與核心共享策略檔案,這樣核心之後就按照拿到的策略來控制訪問,然後設定selinux啟動模式。(./external/libselinux/src)

selinux 啟動模式有兩種enforcing 和permissive。 enforcing 是強制安全檢查,不符合安全策略時不允許執行;permissive 模式也進行安全檢測,但是遇到不符合安全策略時僅僅列印警告資訊,依然執行程式執行。

可以在編譯檔案裡面kernel cmdline 裡面加入啟動模式如androidboot.selinux=permissive。 一般eng版本使用的是permissive,user和user-debug版本啟動的是enforcing。當然如果對安全性要求不高,完全可以不啟用selinux。在android5.1 之前預設並沒有真正意義上的使用。

2. 策略檔案在哪配置

android模式的策略配置檔案放在 external/sepolicy目錄下,一般不提倡直接修改這下面的檔案,而是針對平台或者專案在device或者vendor目錄下新增。比如:

自己策略檔案所在目錄:

board_sepolicy_dirs += \

device/***/sepolicy

external/sepolicy/property_contexts 屬性安全上下文定義檔案。比如說新加了乙個persist.log. * 開頭的屬性,那麼就需要給它新增對應的安全上下文,如果不新增或者新增的上下文不對,那麼在的某個程序裡寫入時就寫不進去。

比如做了如下定義,那麼是具有system_prop域安全上下文,只能在system程序裡修改值,在shell裡是不能訪問的。

persist.log.        u:object_r:system_prop:s0

如果希望在shell裡能修改值,就應該這麼寫persist.log.        u:object_r:shell_prop:s0 ,當然如果通過修改相關*.te 檔案也能實現,但是不是很規範。

下面幾個是常用到的規則操作

allow:賦予某項許可權。

allowaudit:audit含義就是記錄某項操作。預設情況下是selinux只記錄那些許可權檢查失敗的操作。allowaudit則使得許可權檢查成功的操作也被記錄。注意,allowaudit只是允許記錄,它和賦予許可權沒關係。賦予許可權必須且只能使用allow語句。

dontaudit:對那些許可權檢查失敗的操作不做記錄。

neverallow:前面講過,用來檢查安全策略檔案中是否有違反該項規則的allow語句

規則命令格式:規則名 主體域 客體域:型別許可權屬性 ;       或者    規則名 主體域 客體域:型別 ;

比如:allow domain system_data_file:dir ;

allow domain system_file:file r_file_perms;

檢視SELinux狀態 關閉SELinux

1.1 getenforce 1.2 usr sbin sestatus current mode表示當前selinux防火牆的安全策略 root localhost usr sbin sestatus selinux status enabled selinuxfs mount sys fs se...

檢視Selinux和關閉Selinux

selinux的檢視和設定 1.1 getenforce 1.2 usr sbin sestatus current mode表示當前selinux防火牆的安全策略 root localhost usr sbin sestatus selinux status enabled selinuxfs m...

centos7 在 selinux先 改ssh埠

今天新購一vps,裝上centos7,然後就開始折騰之路,先改ssh埠,但是改了ssh埠發現怎麼都連不上,然後google了下,發現是selinux在作怪,但是又不想關閉它,而在網上的資料大部分都是以往的。好了開始折騰之路 1 安裝semanage yum y install policycoreu...