デフォルトでは、sudo はコマンドの実行に使用されます。

デフォルトでは、sudo はコマンドの実行に使用されます。

root権限を必要とするコマンドのリストを実行できるLinuxユーザー(「bob」と呼ばれる)が必要です。したがって、 に示されているように root/sbin/firstcommand/sbin/secondcommand(悪名高い bob-daemon の一部) で実行するように要求しますsudo firstcommand。パスワードは必要ありません。

/etc/sudoersこれまで私がしたことは次のとおりです。

Cmnd_Alias BOBCOMMANDS = /sbin/firstcommand, /sbin/secondcommand
bob        ALL=(root) NOPASSWD:BOBCOMMANDS

その結果、bob$ sudo firstcommandrootとして正常に実行されますが、パスワードが指定されてもbob$ sudo secondcommand実行に失敗します。これは私にとって完璧だと感じます。bob$ sudo mount ... ...

bobこれで、前述のbob-daemon1をユーザーとして実行したいと思います。実際には、このコマンドが実行されるたびrootに実行されることを望みます。BOBCOMMANDSbob$ firstcommandbob$ sudo firstcommand

エイリアスはこの問題を解決するようです。bob$ alias firstcommand="sudo firstcommand"; alias secondcommand="sudo secondcommand"実際にはうまくいきますが、Bobにホームディレクトリがないとエイリアスを維持することはできません。

最後に言及したいことはbobを生成しsudoers

解決策はありますか?


1私が単純化したもの

答え1

ユーザーはroot権限でコマンドを実行する必要があると言いましたか/sbin/firstcommand/sbin/secondcommand

これらのコマンドが実際に存在する場合、/sbin通常のユーザーにはそのディレクトリはデフォルトで含まれません。PATHこれにより、2つの非常に単純なスクリプトを生成できます。/usr/local/bin/firstcommandその/usr/local/bin/secondcommand内容は基本的にそれぞれとsudo /sbin/firstcommandですsudo /sbin/secondcommand

ユーザーのシェルは通常/usr/local/bin標準とシェルの/usr/bin前に表示されるため、/binシステム管理者は必要に応じて標準システムコマンドをローカルバージョンにオーバーライドできます。同様に、ユーザーが実行すると、自分のプログラムで最初に見つかったバージョンが何でもfirstcommand実行されますfirstcommand...PATHこれは選択したスクリプトであり、/sbin/firstcommandプレフィックスsudoおよび/またはいくつかの引数を追加した実際のバージョンを実行できます。必要。

sudo実際のプログラムファイルやその他のシステムファイルは、アクセスに必要な構成を除いて、まったく変更する必要はありません。

答え2

これがデーモンプロセスの場合、標準的な慣行はinitスクリプトファイルに次の内容を入れることです。

USER=bob
...
su -c '/command/to/start/actual/daemon' "$USER"

実行する必要があるスクリプトファイルで、その命令の前にbob置くだけです。sudo

またぜひ読んでみてください。これ非対話型 Bash シェル (スクリプトまたはデーモンによって開始されるシェル) でエイリアス拡張を有効にすることに関連しています。

関連情報