起動スクリプトに「sudo」または「su」を使用する必要がありますか?

起動スクリプトに「sudo」または「su」を使用する必要がありますか?

私はサーバー/クライアントデザインを備えたプライベートプログラムを持っています。

サーバーデーモン部分は制限されたユーザーとして実行する必要があり、プログラムはルートとして起動された場合、一部のLinuxプログラムと同様にroot権限を放棄するようには設計されていません。

だから私の質問は、起動スクリプトでこのデーモンを他のユーザーとして/etc/init.d/使用sudoまたは実行する必要がありますか?suこれはどのような違いをもたらしますか?どちらも機能しますか?他にはありませんか?

オペレーティングシステムは、「Linux From Scratch」ガイドラインを使用して構築されたカスタムGNU / Linuxオペレーティングシステムであり、両方のプログラムが正しく実行されます。

答え1

su2つのうち、この方法は設定可能性が低く予測可能性が高いため、この目的に使用します。sudoinitスクリプトでを使用してから(誤ってまたは意図的に)initスクリプトのエントリを削除すると、initroot ALL=(ALL) ALLスクリプト/etc/sudoersは奇妙に中断されます。

また、構成スペースをさらに減らすために、次の形式を使用します。

su -s /bin/sh -c "my_program my_args etc" my_user

この-sオプションは、スクリプトを中断することなく、ユーザーのデフォルトシェルを/bin/falseまたは/sbin/nologinまたは他のものに変更できることを意味します。/dev/nullプログラムがこの問題をまだ処理していない場合は、標準I / Oを別の適切な場所にリダイレクトすることもできます。

答え2

あなたの便宜のために、以下を見てください。CHPSTrunitハイパーバイザースタックのプログラム。これは非常に便利で、コマンドライン引数のエスケープなどのsudo混乱を防ぎますsu

他のユーザーとしてプログラムを実行するには、次のように呼び出すことができます。

chpst -u my_user /path/to/program

それは実際にsetsidあなたのプログラムにありますsetgidexecveそれがすべてです(他の良い機能もたくさんあります)。

ディストリビューションに以下が含まれている場合忙しい箱、アプレットをコンパイルしていることを確認することもできますchpst。すでにアプレットがあり、別個のパッケージが必要ない場合があります。

答え3

権限を放棄するようにプログラムを簡単に変更できる場合は、これが最善のアプローチです。起動スクリプトでユーザーIDを切り替えることは、「動作」しても面倒で柔軟性がありません。

答え4

技術的には両方ともうまく機能しますが、ここではルールに従うことをお勧めします。 sudo は通常、単一のコマンドを実行するための root として権限を高めるために使用されますが、 su は通常新しいユーザーに変更し、その新しいユーザーでコマンドを実行するために使用されます。

つまり、クイックGoogle検索を実行すると、sudoとsuに関するいくつかの考えを見つけることができます。

関連情報