ユーザー入力を必要とせずにユーザーがsudo特権を持っているかどうかをテストします


12

ペイロードを配信する前に、リモートホストで多数のテストを実行するローカルシェルスクリプトがあります。これらのテストの1つは、ユーザーがsudo特権を持っているかどうかで、単純にチェックされますsudo -vが、これにはユーザーがパスワードを入力する必要があります。また、リモートホストにはインスタントsudoタイムアウトがあるため、新しい接続ごとにパスワードエントリが必要になりますが、これは(ポリシーとして)変更する権限を持っていません。

もちろん、ユーザーが特定のグループに属しているかどうかをテストできますが、これはリモートホスト構成にとらわれないため、ユーザーのグループを想定する必要がないチェックできる方法があることを望んでいましたユーザー入力を必要としないとして?

ありがとう!

更新:コメントをエコーするために、ユーザーがsudoを実行できるかどうかをテストするだけで、そのテストではユーザーの操作は必要ありません。


ユーザーがsudoを使用できるかどうか、またはsudoを介してシェルスクリプトを実行しているかどうかを確認する必要がありますか?
ニコSP

彼が可能性を持っているかどうか。ローカルスクリプトでは、後でsudoパスワードを入力する必要があるため、リモートホストのユーザーがsudoerであることを早期に確認したいだけです。
-DanH

私のubuntuボックスを簡単に確認すると、sudo -lが得られ、ユーザーが実行できるコマンドが返されます。(すべて)ALLがそれらの一部である場合、ユーザーは任意のコマンドにsudoを使用できます たぶんそれは正しい角度ですか?
ニコSP

1
sudo -lパスワードの入力を求められます。
ThatGraemeGuy

1
sudoはttyに基づいてキャッシュするため、新しいセッションが同じttyを提供する場合、プロンプトが表示されない場合があります。sudo -k最初に実行してみてください。
マークワーグナー

回答:


12

テストできるのは、ユーザーがパスワードなしで sudo権限持っているかどうかだけです。

実行する

sudo -n true

もし$?0の場合、$?の場合、ユーザーはパスワードなしでsudoアクセスを持ちます。1は、ユーザーにパスワードが必要です。

特定のプログラムの確認が必要な場合はtrue、プログラムが何もしないようにプログラムを変更してください。chmod --help


1
コマンドがあれば、これは予備的な検出を助けていないことを注意Xされsudoことができ、パスワードを入力しないと、誤ってそれを実行せず
のtry-catch-ついに

3

「root」などのsudoアクセスを持つユーザーが1人いる場合は、それを使用して他のログインを確認できます。アクセス権を持つユーザーとして実行:

sudo -n -l -U foo 2>&1 | egrep -c -i "sudo | unknown userの実行は許可されていません"

ゼロを返した場合、「foo」にアクセスできます。それ以外の場合、sudoアクセスはありません。


3
単純にsudo -n -l cmd、現在のユーザーがcmdにsudoアクセスできるかどうかが通知されます。結果をテストする場合。
フィリップA.

1

sudo -l

これで、必要な特権が必要かどうかを判断するのに十分なはずです。


1
これは私のシステム(Ubuntu 16.04)でまだパスワードを要求します。
マリオヴィラス

1

これは非常に古い質問であることは知っていますが、-n(非インタラクティブ)フラグと-v/で運が見つかりました-l。ただし、出力を検査する必要があります。

$ sudo -vn && sudo -ln  #User with cached credentials
User adminuser may run the following commands on computername:
    (ALL) ALL
$ sudo -vn && sudo -ln  #User who _can_ sudo but isn't cached
sudo: a password is required
$ sudo -vn && sudo -ln  #User who can't at all
Sorry, user nonadmin may not run sudo on computername.

おそらく、いくつかの出力リダイレクトとgreppingがそこに到達します:

if (sudo -vn && sudo -ln) 2>&1 | grep -v 'may not' > /dev/null; then
  #they're cool
  exit 0 #Or, whatever
fi
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.