SELinux

本インターフェースは、システムの SELinux ルールに対する基本的な読み取りと一般的な書き込み操作を可能にし、一部のシステム制限の設定や回避を可能にします。関連するインターフェースはシステムの機能に影響を与える可能性があるため、注意して使用してください。ご自身で SELinux に関する知識を持っている必要があります。

操作インスタンスの取得

開始する前に、まず SELinux インスタンスを取得する必要があります。

selinux = d.stub("SELinuxPolicy")

SELinux 状態の取得

以下のインターフェース呼び出しを使用して、SELinux ルールが有効化されているかどうかを取得します。

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

以下のインターフェース呼び出しを使用して、現在が enforcing 状態かどうかを取得します。

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

SELinux 状態の設定

以下のインターフェース呼び出しを使用して、SELinux を enforcing または permissive に設定します。

selinux.set_enforce(enable)

以下のインターフェース呼び出しを使用して enforcing に設定します。

>>> 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

ドメインを enforcing に設定

以下のインターフェース呼び出しを使用して、SELinux ドメインを enforcing 状態に設定します。

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 のような詳細なアクションを提供することもできます。