web-dev-qa-db-ja.com

ユーザーがユーザー入力を要求せずにSudo権限を持っているかどうかをテストする

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

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

ありがとう!

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

12
DanH

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

Execute

Sudo -n true

$なら0の場合、ユーザーはパスワードなしでSudoアクセスできます($の場合)。 1の場合、ユーザーにはパスワードが必要です。

特定のプログラムの検証が必要な場合は、プログラムがchmod --helpのように何もしないように、プログラムでtrueを変更します

13
erickzetta

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

Sudo -n -l -U foo 2>&1 | egrep -c -i "Sudo |不明なユーザーの実行は許可されていません"

ゼロを返す場合、「foo」はアクセス権を持っています。それ以外の場合は、Sudoアクセスがありません。

3
Todd Moyer

Sudo -l

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

1
dmourati

これは非常に古い質問であることは知っていますが、-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
1
Matt Moretti