ルート権限を持つさまざまなコンピュータで実行されるスクリプトがありますが、ルートなしでスクリプトの特定のコマンドを実行したいとします。
それは可能ですか?
答え1
答え2
sudo
環境変数SUDO_COMMAND
、SUDO_GID
および SUDO_UID
をエクスポートしますSUDO_USER
。
呼び出しユーザーを使用SUDO_USER
または返すことができます。SUDO_UID
sudo -u "$SUDO_USER" an_unprivileged_command
答え3
sudo
su
より良いアクセス制御を備えた拡張バージョンです。すでにroot
実行している場合は、su
手間をかけずにこれを実行できます。
#!/bin/sh -e
echo -n "Script User: " && id -un
echo -n "Other user: " && su blrfl -c "id -un"
echo -n "Back to script user: " && id -un
実行すると、次のようになります。
Script User: root
Other user: blrfl
Back to script user: root
答え4
私は同意するAlex Pの答え通常、rootではなくユーザーとして実行し、必要なコマンドに対してのみsudoを呼び出す必要があります。ホワイトリストはブラックリストよりも常に安全です。
AlexPの答えに加えて:sudo
ユーザーが実行できないことに気づく前に、多くのことを行わずにsudo
破損した状態を生成しないように、スクリプトの一番上でこれを呼び出すことができます。そのためsudo
、必要に応じてスクリプトの上部に以下を配置することをお勧めします。
#!/bin/bash
sudo true || exit 1
# … other code …
これにより、すぐにパスワードを要求し(必要な場合)、失敗するとスクリプトの実行が中断されますsudo
。