ブート コマンドラインから 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