android - posix setuid別のプロセス

原文 android c linux posix dalvik

私はAndroid用のアプリケーションを開発していて、Dalvik VMをroot uidに昇格させる必要があります。これは、代わりに、shスクリプトを使用してJavaコードによって開始される多くの小さなアプリケーションを作成する必要があるためです(スーパーユーザーは、ルートになる)そして私は本当にそれをしたくありません!

現在、capsetpを使用してCAP_SETUIDを呼び出しプロセスに設定しようとしていますが、これがすべてのAndroidカーネルで広くサポートされるかどうかわからないので、可能な代替策を探しています。

私のフォールバックソリューションは、最初にseteuidを使用して適切なユーザーに切り替えるルートプロセスを開始し、Dalvik VMをアプリケーション(execl)で起動し、JNIを使​​用してルートユーザーに切り替えることです...

代替案はありますか?



編集

私はこのコードを試していますが、新しい機能(capsetp)を適用できません。

Androidでlibcapを部分的にコンパイルしました(cap_fileはありませんが、必要ありません)が、このコードは標準のディストリビューション(Ubuntu)では動作しません。

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <unistd.h>
#include <sys/types.h>
#ifndef __user
#define __user
#endif
#include <linux/capability.h>
#include <sys/capability.h>

int main(int argc, char** argv)
{
    cap_t caps;
    cap_value_t cap_list[1];

    pid_t process_id = atoi(argv[1]);

    caps = cap_get_pid(process_id);
    if (caps == NULL)
    {
        perror("Failed to get capabilities");
        exit(-1);
    }

    printf("%s\n", cap_to_text(caps, NULL));

    cap_list[0] = CAP_SETUID; 

    if (cap_set_flag(caps, CAP_EFFECTIVE, 1, cap_list, CAP_SET) == -1)
    {
        perror("Failed to add new capability");
        exit(-1);
    }

    if (capsetp(process_id, caps) == -1)     
    {
        perror("Failed to apply capabilities");
        exit(-1);
    }

    cap_free(&caps);

    return 0;
}
答え
別のプロセスの特権を直接昇格させる方法はないと思います。このようなことを行うための標準的な方法は、setuid-rootバイナリをexecして、プログラムを再execする前にプログラム特権を付与するかどうかを決定することです。 suまたはsudoを考えてください。もちろん、そのようなsetuid-rootプログラムは元のrootプロセスと通信して、rootを許可しても安全かどうかを判断できます。危険なコーナーケースが多数発生する可能性があることに注意してください。
関連記事

java - jsonデータ/配列からスピナーオプションを作成する

android - android startActivityForResultでエラーが発生する

android - UbuntuでデバッグするためにHTC Android電話をインストールする方法

android - オブジェクトをバイト配列に変換します(ソケットを介して送信します)。それを元に戻す

android - Android:MediaStore.Audio.Artists.Albumsのクエリ

android - DBデータを含むAndroidアプリを配布する方法は?

android - アルバムまたはカメラから選択するインターフェイスを備えたカメラコード

iphone - AppleとAndroidでの物理的な商品とサービスの購入の可能性

android - android edittextとtextviewは一緒にスクロールします

android - AndroidアプリからPDFを開く