讀寫 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_default 對 camera_vendor_data_file 目錄 (dir) 的所有操作權限,同樣地,改為 disallow 方法則代表拒絕這些權限。
>>> selinux.allow("hal_camera_default", "camera_vendor_data_file", "dir", "search")
您也可以像上面這樣提供一個細化的動作,例如 search。