メインルートファイルシステムをインストールする前に、初期ユーザースペースでinitスクリプトでプログラムを実行しています。
root権限なしでアプリケーションを実行できますか?
明らかな問題は、起動プロセスの初期段階に「ユーザー」がないことです。
答え1
root権限なしでアプリケーションを実行できますか?
それはすべてです。 LinuxがMULTIUSERをサポートするようにコンパイルされたとします.)
明らかな問題は、起動プロセスの初期段階に「ユーザー」がないことです。
su
はい、initramfsにまたはを追加しようとすると、sudo
多くの設定ファイル(/etc/passwd
、/etc/groups
など/etc/shadow
)を追加する必要があります。しかし、この複雑さはLinuxに固有のものではありません。結局のところ、UIDはただの数字にすぎないので、root権限を取り除くことができるおもちゃプログラムを作成することが目標であれば非常に簡単です。
#include <stdlib.h>
#include <unistd.h>
int main(int argc, char** argv)
{
setuid(atoi(argv[1]));
execvp(argv[2], argv+2);
}
にコンパイルすると、toysu
次のように呼び出すことができます。
toysu 1234 touch /tmp/example
使用するUIDはどこに1234
あり、残りは実行するコマンドです。最初からルートでなければ機能しないので、sudo
通常のシステムでテストするには、コマンドの前にプレフィックスを付けます。