web-dev-qa-db-ja.com

Android 4.4.4以降でSELinuxを0または許容モードに設定する方法は?

SELinux(Security Enhanced Linux)モードをPermissiveまたは(0)on Android 4.4.4(および可能な場合は上記)に設定します。次のコマンドを使用します:setenforce 0setenforce permissiveおよびsetenforce Permissiveルートの下(私のデバイスはルート化されています)。ただし、getenforceの出力は常にEnforcingです。今、私はこの問題に疲れています。

誰も私に解決策を与えることができますか?前もって感謝します。

11
Vu Tran

どうやら Googleは、多くのStockカーネルからCONFIG_SECURITY_SELINUX_DEVELOPカーネルフラグを削除しました。したがって、William(下記)が言及した標準的なトリックはおそらく機能しません。これらのデバイスの例は、AOS 4.4.4を実行するSamsung Note 4(SM-N910F)です。

上記のリンクの状態:

CONFIG_SECURITY_SELINUX_DEVELOP akaglobal permissive modeは、ボードのデバイス固有のポリシーを最初に開発するときに役立ちます(BOARD_KERNEL_CMDLINEに「androidboot.selinux = permissive」を追加します)。また、一時的なsetenforce 0 in-userdebugまたは-engビルド。これは開発者に役立ちます。

ブートローダーがロックされている場合、カーネルのコマンドラインを変更できません

「また、androidboot.selinux=オプションを処理するためのinitプログラムのコードは-userdebugおよび-engビルドでのみコンパイルされるため、ブートローダーのロックを除き、androidboot.selinux=permissiveは使用できません。 -userビルドで。」

ビルドの種類を確認する方法は次のとおりです。

$ getprop ro.build.type
user
9
not2qubit

デバイスがどのようにルート化されたか、および何Android ROM実行するかによって、それを無効にする方法が決まります。最初に試すことは:

adb Shell su 0 setenforce 0

これは次と同じではありません:

adb Shell setenforce 0

Suで実行すると、シェル(setenforceを実行できない)からsuドメイン(setenforceを呼び出すことができる)にドメインが移行します。たとえば、次を実行します。

$ adb Shell id -Z
context=u:r:Shell:s0

に比べ:

$ adb Shell su 0 id -Z
context=u:r:su:s0

これは、次の3つの理由で失敗する場合があります。

  1. Su実行可能ファイルがありません
  2. Su実行可能ファイルのラベルが間違っています
  3. Suドメインルールはbootimageにコンパイルされませんでした

問題2を修正するには、次のようにします(adbがrootであると仮定):

adb remount
adb Shell chcon /system/xbin/su u:object_r:su_exec:s0

これは失敗する可能性があり、おそらく問題3を示します。問題3を修正するには、suポリシーファイルを含むboot.imgを再コンパイルする必要があります。 AOSPをコンパイルする場合は、デバイスのuserdebugまたはengバリアントを昼食してください。

別のアプローチは、init.cから機能を削除することであり、問​​題3と同様に、boot.imgの再コンパイルが必要です。 system/core/init/init.c(または.cpp)に移動し、security_setenforce()へのすべての呼び出しを削除します。

さらに、XDAにはこのプロセスを自動化して簡単にするアプリケーションがありますが、アプリケーションの品質について話すことはできません。 http://www.xda-developers.com/easily-change-your -Android-selinux-mode /

16
William Roberts

根ざしている必要があります!これがKitKatで動作するかどうかはわかりませんが(必要なはずです)、Nexus 6でこれを使用します。ターミナルまたはADBシェルで次を実行します。

su
mount -o remount,rw /system
mkdir /system/su.d
echo "#!/system/bin/sh" > /system/su.d/permissive.sh
echo "echo 0 > /sys/fs/selinux/enforce" >> /system/su.d/permissive.sh
chmod 755 /system/su.d/permissive.sh

これにより、再起動後に確認してください:

su
/system/bin/getenforce
3
Kristopher