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 firstcommand
rootとして正常に実行されますが、パスワードが指定されてもbob$ sudo secondcommand
実行に失敗します。これは私にとって完璧だと感じます。bob$ sudo mount ... ...
bob
これで、前述のbob-daemon1をユーザーとして実行したいと思います。実際には、このコマンドが実行されるたびroot
に実行されることを望みます。BOBCOMMANDS
bob$ firstcommand
bob$ 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 シェル (スクリプトまたはデーモンによって開始されるシェル) でエイリアス拡張を有効にすることに関連しています。