質問は古いものですが、未回答(私のタグ)の質問の上に表示され続けます。だから私はこれに答えるべきだと思う:)
AOSPの能力サポート:
質問は特にGoogleデバイスに関するもので、Googleデバイスを使用したことはありません。ただし、確かに言えるのは、Android 1.6程度の低さで動作するほとんどのデバイス(すべてではないにしても)でLinux(プロセス)機能が有効になっている必要があるということです。参照はとにinitありsystem_server、どちらもAOSPの非常に主要なコンポーネントです。たとえば、Android 4.2では、installdもう1つのコアコンポーネントが、機能が削除されて実行されるようになりました。
ファイルシステム機能は、Android 4.3の主要なセキュリティ拡張機能の 1つであり、などのバイナリからファイルシステムを削除set-uid/ 削除しました。これにより、Androidのルート化の道に革命的な変化が生じました。set-gidrun-as
アンビエント機能のサポートがAndroid 8に追加され、ファイル機能の使用が推奨されなくなりました。
ファイル機能は、ファイル機能を持つファイルを実行するプロセスがこれらの機能を取得できるため、セキュリティリスクをもたらします。
多くのinitサービスは、例えば、それらに依存しstoraged、私自身を含め、sshdおよびdnscrypt-proxyサービスを提供しています。
カーネルの機能サポート:
カーネルの部分では、機能なしでカーネルを構築することはオプションではありません。
カーネル2.5.27からカーネル2.6.26まで、機能はオプションのカーネルコンポーネントであり、CONFIG_SECURITY_CAPABILITIESカーネル構成オプションを使用して有効/無効にすることができました。
そして:
Linux 2.6.33より前のカーネルでは、ファイル機能はCONFIG_SECURITY_FILE_CAPABILITIESオプションで構成可能なオプション機能でした。Linux 2.6.33以降、構成オプションは削除されており、ファイル機能は常にカーネルの一部です。
Androidリポジトリで最も古い一般的なカーネルバージョンは2.6.39で、ファイル機能のサポートも含まれています。
カーネル側のファイルシステム機能のサポートは、一部のOEMから遅れている必要がありますが、機能を壊す可能性があるため、切り替えなければなりませんでした。たとえば、surfaceflinger(Androidの表面作曲)のAndroid 7.1以降のファイル機能なしでは動作しません。
メインラインLinuxカーネル4.3は、アンビエント(プロセス)機能用に2016年9月にパッチが適用され、2016年にAndroidカーネル3.18および4.1にバックポートされました。したがって、それらは必然的にカーネルの一部です。
結論:
Linuxディストリビューションでは、ごく少数のプログラムがLinuxの機能を利用しています。ありますがpam_cap、主に、(または全て?)のディストリビューションは、まだ使用set-uid上su、sudo、ping、mount、passwdなどなど。しかし、Androidの機能は、フレームワークとコアサービスに深く統合されています。それらを削除するには、AOSPおよびカーネルソースで数百行または数千行を編集する必要があります。OEM(特にGoogle、AOSPを開発し、Android用のLinuxカーネルを修正したGoogle)がこの無料のセキュリティ機能をAndroidカーネルですぐに利用できる場合、それを利用しないのは意味がありません。これは純粋なOS関連の機能であり、追加のハードウェアサポートを必要としません。したがって、どのメーカーのどの電話でもサポートされている機能が必要です。
質問:
元のカーネルバイナリを変更せずに実行可能ファイルの機能を設定できますか?
はい、あなたはそうでなければなりません。
必要なものは、上限を設定するためのツールです...
私が使用してきましたcapsh、getcap、setcap、getpcapsからlibcapとnetcap、pscapからlibcap-ng何の問題もなく。しかし、私はアンビエント機能を好みます。これらは設定が簡単で、ファイル機能の場合のように拡張属性などのファイルシステム機能に依存しません。使用することもできlistxattr、getxattr、setxattrおよびremovexattrからのツールがxattr_syscall_wrapper操作するために、security.capabilityまたは任意の他のxattrの直接。
あなたのコメントから:
/system/bin/pingコマンドがsetuid実際のSamsungデバイスにないことに気付いたので、CAP_NET_RAW
Androidのpingにはがありset-uidませんCAP_NET_RAW。特別な非RAWソケットIPPROTO_ICMPを作成します。これとは異なりIPPROTO_RAW、特権は必要ありません。
その他の参考資料:
上記の10以上のリファレンスに加えて、Linux機能をサポートおよび利用するAOSPコードの他のいくつかの部分を以下に示します。
- コアコンポーネント:バイオニック
libc、init、trusty(OS)
- 外部コンポーネント:
libcap、libcap-ng
- デーモン/サービス:
zygote(フォークアプリ、system_server)、 、hostapd、wpa_supplicant、dnsmasq、(logd マネージャー、プライベートDNS)、 (テスト)、デーモン、、、、(PERFETTO)、(IPSec)の、など、HALデーモンの数。netdNetLinkdebuggerdsdcardperformancedincidentdmtpdtraced_probesracoonwificondrild
- 実行可能ファイル:
reboot(INIT)、 、 、dumpstate、(tcpdump 、 など)straceiputilspingtraceroute
- Minijail:機能を中心に展開する専用のサンドボックスツールとライブラリ。
adbdこのライブラリを使用して特権を削除します。
- SELinuxは
capabilityクラスを使用して、ドメインに機能を許可/拒否します。
AndroidはLinuxの機能に大きく依存していると結論付けています。これは、あまり使用されていない機能ではありません。
関連: