「sudo -u xxx cmd」は失敗しますが、「sudo -u xxx /path/to/cmd」は成功するのはなぜですか?

「sudo -u xxx cmd」は失敗しますが、「sudo -u xxx /path/to/cmd」は成功するのはなぜですか?

最近、AWS Linuxサーバーインスタンスタイプをアップグレードしました。それでもSLES 12 SP1です。しかし、いくつかの違いが見つかりましたが、そのうちのいくつかは混乱しています。

$ sudo -u xyz cmd ...
<it asks for password, causing old scripts to break>

$ sudo -u xyz /path/to/cmd ...
<works>

$ sudo --version
Sudo version 1.8.10p3
Sudoers policy plugin version 1.8.10p3
Sudoers file grammar version 43
Sudoers I/O plugin version 1.8.10p3

$ uname -a
Linux ovcp6hana1 3.12.69-60.64.32-default #1 SMP Wed Feb 15 08:57:04 UTC 2017 (76392c8) x86_64 x86_64 x86_64 GNU/Linux

(sudoerは「/path/to/cmd」のCmnd_Aliasと認証で構成されています)

以前のバージョンは動作していましたが、今は動作しません。以前は、パスは自動的に拡張されたが、もはや拡張されていないのと同じです。

以前のフォームを機能させる方法はありますか?ありがとうございます。

- 編集する

私はそれがまったく同じコマンド、which xyzつまり/path/to/xyz

- 編集2

問題を発見したようですが、まだ私のアプリケーションとの互換性を維持する方法はありません。sudo1.7.6バージョンと1.8.10バージョンには違いがあるようです。しかし、sudoリリースノートでそのような言及が見つかりませんでした。

sudo 1.7を実行している以前のサーバーで、同様の権限を持つ別のユーザーを作成しました。具体的な権限は次のとおりです。両方の構成ファイルのオプションが一致します。

#added in /etc/sudoers
#userA ALL=(userABC) NOPASSWD: /bin/bash, /usr/local/bin/aws

#with both sudo versions
userA$ sudo -u userABC bash -c "echo \$PATH"
/usr/bin:/bin:/usr/sbin:/sbin

userA$ sudo -u userABC bash -c "which aws"
/usr/bin/aws <<<< but this is not reached in either of the two cases

userA$ which aws
/usr/local/bin/aws <<<<<< this is the right binary

#with sudo version 1.7.6
userA$ sudo -u userABC aws
..the right binary runs, so path must have been set between check and run

#with sudo version 1.8.10
userA$ sudo -u userABC aws
failure! sudo asks for password of userABC

このプログラムは/usr/bin/aws一種のパッケージングを実行します。今まで存在するのか分からなかったけど(!)プログラムを一時的に削除しても何の影響もありませんでした。

したがって、問題をよりよく理解していますが、アプリケーションを変更する以外に他のオプションがあるかどうかはまだわかりません。

ベストアンサー1

ファイルの実行可能ファイルへのフルパスを指定するルールを使用してユーザーが別のユーザーとしてコマンドを実行できるようにする場合は、sudoersコマンドラインにもそのフルパスが必要です。

これは安全対策です。

また、ファイル内のコマンドがコマンドsudoersラインフラグを使用して指定されている場合、これらのフラグは必要コマンド呼び出しを転送すると表示されますsudo

おすすめ記事