これは非常に古い質問であることは知っていますが、今日スクリプトで行ったのは次のとおりです。 sudo であることは、任意のコマンドを sudo として実行できることを意味すると仮定します (または、少なくともアップタイム)
CAN_I_RUN_SUDO=$(sudo -n uptime 2>&1|grep "load"|wc -l) if [ ${CAN_I_RUN_SUDO} -gt 0 ] then echo "I can run the sudo command" else echo "I can't run the Sudo command" fi
ただし、ユーザーが visudo に制限を設けている場合、たとえば、ユーザーが make コマンドしか使用できない場合、このチェックは十分ではありません。動作することがわかっているコマンドを実行してみてください。これらの誤検知を回避するために、フィルター grep -v 申し訳ありません。例:$(sudo -n uptime 2>&1|grep "load" | grep -v 申し訳ありません|wc -l) を追加できます。
-n
オプションはsudoの新しいバージョンで利用できますが、あなたが述べたようにそれはオプションではありません。 sudo を試して、パスワードのプロンプトが表示されるかどうかを確認する以外に、探していることを実行する実際の方法はありません。視覚的な表示が必要な場合は、 do sudo /bin/bash を実行して root bash セッションを開始してみませんか?これは安全ではないことに注意してください。ただし、sudo でプロンプトが変更されたことに誰かが気付いた場合も、いくらか安全ではありません。
@wags007 によって与えられた答えを単純化するには
if sudo -n true
then
sudo id
else
echo "sorry, but did not want to bother you"
fi
ただし、 https://www.sudo.ws/man/1.8.15/sudoers.man.html 構成に defaults mail_badpass
がある場合 結果が false である (プロンプトが表示される) テストごとにメールが送信されます。このような迷惑な変更を避けるには、sudoers ファイルのその部分を次のように変更してください
Defaults mail_badpass
Defaults! /bin/true !mail_badpass
その結果、/bin/true を除くすべてのコマンドに対してセキュリティ警告メールが送信されます。そうです、誰かが sudo true
を呼び出すことでパスワードを総当たり攻撃しようとする可能性があります セキュリティ警告メールが送信されない回数に制限はありません。
注:常に visudo
を使用してください お気に入りのエディターの代わりに、sudoers ファイルを編集します。そうしないと、ロックアウトされる危険があります。