init =で実行されているShebangスクリプトがinitrdで実行されたときにeuidが0ですが、そうでないのはなぜですか?

init =で実行されているShebangスクリプトがinitrdで実行されたときにeuidが0ですが、そうでないのはなぜですか?

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

initrdで実行すると、うまく機能し、背中をマウントできます。ただし、initrdなしでファイルシステムで使用すると、次の理由でマウントできません。

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

失敗したコマンドを追跡すると、必然的にgeteuid32()が実行され、1000が返されます。なぜ?どのようにeuid 0で実行できますか?

答え1

initon には特別な処理がないので、initrd他の問題があるでしょう。

次回実行すると、rootこのビットが設定されるとeuidバイナリの所有者が一致します。setuid

タイトルを確認してください/bin/mount

答え2

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

このエラーは問題を通知します。つまり、マウントを呼び出すために、UID 0のルートアカウントではなく、UID 1000の「削除」アカウントを使用しています。多くのシステム機能をrootとして実行する必要があります。 initrdなどの多くのプロセスがrootとして実行されるため、コマンドを実行するのに十分な権限があります。ただし、毎日のユーザーアカウントで何かを実行するには、次のものが必要です。またはSudo他のユーザーで操作を実行します。

~のため、次のように呼び出したいと思います。

sudo mount /mnt/foo

このフラグを指定しないと、-usudo コマンドのユーザーはデフォルトで root に設定されます。 UID 1000のアカウントが適切に設定されている場合は、sudoを介してコマンドを実行して説明した問題を解決します。/etc/sudoersまたは/etc/sudoers.d文書。

また、見ることができます

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

関連情報