を使用していくつかのコマンドを呼び出す非特権ユーザーのcrontabからスクリプトを実行していますsudo
。そうでないことを除いて。スクリプトは正常に実行されますが、sudoされたコマンドは黙って失敗します。
スクリプトは、問題のユーザーとしてシェルから完全に実行されます。
sudoはパスワードを必要としません。問題のユーザーにはで
(root) NOPASSWD: ALL
アクセスが許可されてい/etc/sudoers
ます。Cronはスクリプトを実行および実行しています。シンプル
date > /tmp/log
を追加すると、適切なタイミングで出力が生成されます。権限の問題ではありません。繰り返しますが、スクリプトは実行されますが、sudoされたコマンドではありません。
パスの問題ではありません。実行
env
中のスクリプト内から実行$PATH
すると、sudoへのパスを含む正しい変数が表示されます。完全なパスを使用して実行しても役に立ちません。実行中のコマンドにはフルパス名が与えられています。STDERRを含むsudoコマンドの出力をキャプチャしようとしても、有用なものは何も表示されません。
sudo echo test 2>&1 > /tmp/log
スクリプトに追加すると、空のログが生成されます。sudoバイナリ自体は正常に実行され、スクリプト内のcronから実行された場合でもアクセス許可があることを認識します。
sudo -l > /tmp/log
スクリプトに追加すると、出力が生成されます。ユーザーec2-userは、このホストで次のコマンドを実行できます:
(root)NOPASSWD:ALL
を使用してコマンドの終了コードを調べると、$?
エラーが返されています(終了コード:)1
が、エラーは発生していないようです。/usr/bin/sudo /bin/echo test
同じエラーコードを返すような単純なコマンド。
他に何が起こっているのでしょうか?
これは、最新のAmazon Linux AMIを実行する最近作成された仮想マシンです。crontabはユーザーに属しec2-user
、sudoersファイルが配布のデフォルトです。
sudo
、スクリプトで必要なコマンドに対して/ only /権限が制限された別のユーザーを設定し、ログイン機能を完全に無効にします。
The user in question has (root) NOPASSWD: ALL access granted in /etc/sudoers
、そして、私の脳は読み続けるにはあまりにも大声で叫び始めました。