web-dev-qa-db-ja.com

AndroidでSELinuxを一時的に無効化または変更します

私はAndroid用のroot-appの開発者です。

悲しいことに、一部のデバイス/ ROMにはSELinux inenforce-modeがあり、アプリの一部のアクションを妨げています。

これはルートアプリであるため、ユーザーはルートアクセスを許可しています。

現在、SELinuxが私のアクションの一部をブロックしているため、これに対する解決策を見つける必要があります。

SELinuxを一時的に無効にしようとしました

setenforce permissive -> no failure, but getenforce still returns "Enforcing"
cat 0 > /sys/fs/selinux/enforce -> no failure, but getenforce still returns "Enforcing"

実行時にsepolicy-fileを編集してブロックされたコマンドを許可し、そのリロードをトリガーするというアイデアで遊んでいますが、これが機能するかどうか、どのように機能するかはわかりません良いアイデア。

誰か他のヒントやリソースがありますか?

16
Martin L.

SuperSUアプリから supolicy を使用できます。いつ、どのように呼び出されるかの詳細な説明については、リンクを参照してください。

要するに:

  • 監査メッセージをチェックして、SELinuxによって何かがブロックされている理由を調べます。 dmesg | grep "audit"
  • allow ...ブロックされた操作を許可するルール。 SELinux * .teファイルの「許可」ルールに似ています(同一?)。
  • 実行supolicy --live "allow ..."ルートシェルで、操作が成功するかどうかを確認します。そうでない場合は、「許可」ルールを拡張します。 1つのsupolicy呼び出しで複数の「許可」ルールを指定できます。

supolicyは高価な操作なので、必ず1回だけ呼び出してください。

ChainfireのSuperSUに依存したくない場合は、 sepolicy-inject 。私はそれを自分でテストしませんでした。

11
Martin Gerczuk

編集build.prop最初のディレクトリのシステムフォルダにあるファイル。テキストエディタ検索「selinux」を使用します。
enable_selinux = 1のようなものが表示された場合、0に変更します。再起動または起動後に適用されます。

私の場合、彼らはすでにそれを無効にしましたが、それはコメント行にありました

#ro.boot.selinux = disable

#で始まる行はコメントであり、何も変更しません。同様に、マルチユーザーアカウント、システムアップデートのオン/オフを切り替えることができます。

デバイスの製造元がシステムアップデートを無効にしました。

2
Rahul

私はAndroid 4.3でSELinuxを無効にしてみましたが、これは私が思いついたものです。

Samsung S4の場合Android 4.3、setenforce 0Permissiveモードに変わります。

Samsung Note 3の場合Android 4.3、setenforce 0はSELinuxステータスを変更しません。

Nexus 4 Android 4.3を試しましたが、デフォルトではPermissiveモードです

2
user1546570

アプリ名selinux mode changerをダウンロードできます。 Playストアにはないので、chromeまたは他の任意のブラウザからダウンロードしてください。アプリはルート権限が必要なので、試してみてください。

1
Herik

ルートアクセスがある場合は、su 0 setenforce 0を実行してPermissiveモードに変更します。

// Set SELinux to permissive
private static final String COMMAND = "su 0 setenforce 0"; 
try {
  Runtime.getRuntime().exec(COMMAND);
} catch (IOException e) {
  e.printStackTrace();
}
0
t1mz0r