netlinkコマンドを使用してネットワークインターフェイス(この場合はsocketcanインターフェイス)を構成するJNIライブラリを利用するAndroidアクティビティがあります。アクティビティを実行すると、ネットワークインターフェイスの構成が失敗し、RTNETLINKからのEPERMエラーが発生します。失敗するコマンドを正常に完了するには、 CAP_NET_ADMIN機能が必要です。そのため、rootとしてコードを実行すると成功し、rootとして実行してから、capsetを使用して機能をCAP_NET_ADMINのみに制限します。
アプリケーションマニフェストに次のアクセス許可を追加して、プロセスにNET_ADMIN機能が与えられるという印象を与えました。
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.NET_ADMIN" />
これにより、プロセスはinetグループとnet_adminグループに入れられましたが、プロセスはCAP_NET_ADMIN機能を受け取らなかったため、netlinkコマンドがEPERMで失敗しました。
このトピックについて行ったさまざまな検索で、この機能を適用する必要があるというヒントが見つかりました。例:http://elinux.org/Android_Securityから
#define GID Capability
AID_NET_BT_ADMIN 3001 Can create an RFCOMM, SCO, or L2CAPP Bluetooth socket
AID_NET_BT 3002 Can create a Bluetooth socket
AID_INET 3003 Can create IPv4 or IPv6 socket
AID_NET_RAW 3004 Can create certain kinds of IPv4 sockets??
AID_NET_ADMIN* 3005 Allow CAP_NET_ADMIN permissions for process
残念ながら、これは私のシステムには当てはまらないようです。
注:チップセットベンダーによって変更されたシステムとカーネルを使用して実行しているため、これが機能しなくなるような変更が行われている可能性があります。
誰か知っている
- これがうまくいくはずですか?
- プロセスに機能を追加するには、他にどのような手順が必要ですか?
- それも可能かどうか?