web-dev-qa-db-ja.com

su-cとrunuser-l-cの違い

シェルスクリプトで特定のユーザーとしていくつかのコマンドラインを実行する必要があります。

私は(少なくとも)2つの方法を見つけました:

su user -c 'command'

runuser -l user -c 'command'

この2つのコマンドの間に大きな違いはありますか?

7
Getz

すでに質問のコメントで書かれているように、runuserは基本的にPAMスタックを使用しないsuです。

もう少し詳しく説明すると、Dan Walshの ブログ投稿 (runuserの作成者の1人)によると、runuserは、コンパイルから除外されたPAMスタックを除いて、実際にはsuソースからコンパイルされているようです。違いは、suの代わりにrunuserを使用すると、一部のSELinuxエラーを防ぐことができることです。その投稿はまたこれを言います:

サービスがrootとして実行されていて、シェルを使用してUIDを変更する場合は常に、runuserを使用する必要があります。

ユーザーとしてシェルにログインしていて、rootになりたい場合は、suを使用する必要があります。 (またはもっと良いのはSudo)

7
Radek Liska