讀寫 Selinux 規則

本介面可讓您對系統的 Selinux 規則進行基本的讀取和常規寫入操作,讓您可以設定或繞過一些系統限制。相關介面可能會影響系統功能,請謹慎使用。您自己需要具備對 Selinux 的了解。

取得操作實例

在開始之前,您需要先取得一個 selinux 實例。

selinux = d.stub("SelinuxPolicy")

取得 Selinux 狀態

透過如下的介面呼叫來取得是否已經啟用 Selinux 規則。

selinux.enabled()
>>> selinux.is_enabled( )
True

透過如下的介面呼叫來取得目前是否為 enforce 狀態。

selinux.get_enforce()
>>> selinux.get_enforce()
1

設定 Selinux 狀態

透過如下的介面呼叫來設定 Selinux 為 enforce 或 permissive。

selinux.set_enforce(enable)

透過如下的介面呼叫來設定為 enforce。

>>> selinux.set_enforce(True)
1

透過如下的介面呼叫來設定為 permissive。

>>> selinux.set_enforce( False)
0

建立一個新的域

透過如下的介面呼叫來在 Selinux 中建立一個新的域。

selinux.create_domain(domain_name)
>>> selinux.create_domain("hello_selinux")
True

設定域為 permissive

透過如下的介面呼叫來設定一個 Selinux 域為 permissive 狀態。

selinux.permissive(domain_name)
>>> selinux.permissive("untrusted_app")
True

設定域為 enforce

透過如下的介面呼叫來設定一個 Selinux 域為 enforce 狀態。

selinux.enforce(domain_name)
>>> selinux.enforce("untrusted_app")
True

細化控制規則

透過如下的介面呼叫可以更細緻地寫入 allow 與 disallow 規則。

selinux.disallow(source, target, tclass, action)
selinux.allow(source, target, tclass, action)

其中的 source, target 分別代表來源和目標上下文,tclass 代表目標類別,action 代表具體操作,action 僅支援 *(代表所有)或具體動作。所有參數均不支援多個上下文或動作,例如 {binder system_app} 這種標準規則寫法,在這裡您只能提供單一名稱,下面是範例操作。

>>> selinux.allow("hal_camera_default", "camera_vendor_data_file", "dir", "*")

如上的規則代表,允許 hal_camera_defaultcamera_vendor_data_file 目錄 (dir) 的所有操作權限,同樣地,改為 disallow 方法則代表拒絕這些權限。

>>> selinux.allow("hal_camera_default", "camera_vendor_data_file", "dir", "search")

您也可以像上面這樣提供一個細化的動作,例如 search