init= として実行される shebang スクリプトは、initrd から実行されると euid が 0 になるのに、それ以外の場合は euid が 0 にならないのはなぜですか?

init= として実行される shebang スクリプトは、initrd から実行されると euid が 0 になるのに、それ以外の場合は euid が 0 にならないのはなぜですか?

ブート コマンドラインから init=/myscript を使用して呼び出される独自の PID 1 init スクリプトを作成しようとしています。これを実際のファイル システムで、任意のカーネルを使用して動作させるにはどうすればよいですか?

initrd で実行すると正常に動作し、マウントなどを行うことができますが、initrd のないファイルシステムで使用すると、次の理由によりマウントに失敗します。

mount: only root can do that (effective UID is 1000)

失敗したコマンドを strace すると、必然的に geteuid32() が発行され、1000 が返されます。なぜでしょうか? euid 0 として実行するにはどうすればよいですか?

答え1

initには特別な処理がないのでinitrd、何か他の問題があるはずです。

として実行する場合root、ビットが設定されてeuidいれば、 はバイナリの所有者と一致しますsetuid

の所有権を確認してください/bin/mount

答え2

権限のないアカウントからSudoを使用する

エラーは、問題が何であるかを示しています。マウントを呼び出すために、UID 0 のルートアカウントではなく、UID 1000 の「モータル」アカウントを使用しています。多くのシステム機能は、ルートとして実行する必要があります。initrd などの多くのプロセスは、ルートとして実行されるため、コマンドを実行するのに十分な権限があります。ただし、日常のユーザーアカウントから何かを実行する場合は、または須藤別のユーザーとしてアクションを実行します。

のためにマウント次のように呼び出すことになります。

sudo mount /mnt/foo

フラグで指定しない限り-u、sudoコマンドのユーザーはデフォルトでrootになります。UID 1000のアカウントが適切な場所に正しく設定されていれば、sudoでコマンドを実行すると、説明した問題が解決されるはずです。/etc/sudoersまたはsudoers.d は、ファイル。

参照

  • man 5 sudo
  • man 5 sudoers
  • man 8 visudo

関連情報