
(元々は Stack Overflow に投稿されました)。代わりにこちらを試してみるよう勧められました。元の投稿は次のとおりです:
タイトルを参照してください。sudo を照会できるコマンドが必要です。理想的には、sudo がまだある場合は成功を返し、sudo の有効期限が切れている場合は false を返します。残り時間を取得することも役立つ場合があります (ただし、心配な場合はsudo -v
再検証するだけで済みます)。ああ、パスワードを要求する必要はありません。
私が見つけた中で最も近いものは ですsudo -n true
が、その-n
オプションは職場の Centos 5 マシンにのみ存在します。-n
パスワードを要求する必要がある場合は失敗します。この機能を利用する他の方法はありますか? 実際に作業するすべてのマシンでルート権限を持っているわけではないので、好みに応じて sudo の新しいバージョンをインストールすることはできません。
参考までに、私はプロンプトに sudo ステータスを表示できるようにこれを行っています。どの端末がアクティブに sudo 可能かを知るのは良いことです。また、root のときに色が変わるプロンプトもありますが、root をあまり使用しないので、あまり役に立ちません。
答え1
この-n
オプションは の新しいバージョンで使用できますsudo
が、おっしゃるとおり、オプションではありませんsudo
。パスワードのプロンプトが返されるかどうか試して確認する以外に、探している操作を実行する実際の方法はありません。視覚的な表示が必要な場合は、 を実行してsudo /bin/bash
ルート bash セッションを開始してみてはいかがでしょうか。これは安全ではないことに注意してください。ただし、sudo でプロンプトが変更されたことを誰かが認識した場合も、多少安全ではありません。
答え2
これは本当に古い質問だとは思いますが、今日スクリプトでやってみたところ、sudo であるということは、任意のコマンドを sudo として実行できる (または少なくとも uptime として) ことを意味すると仮定します。
CAN_I_RUN_SUDO=$(sudo -n uptime 2>&1 | grep "load" | wc -l) [ ${CAN_I_RUN_SUDO} -gt 0 ]の場合 それから echo "sudo コマンドを実行できます" それ以外 echo "Sudo コマンドを実行できません" フィ
ただし、ユーザーが に制限を設けている場合visudo
、このチェックだけでは不十分です。たとえば、ユーザーが make コマンドしか使用できない場合などです。動作することが分かっているコマンドをいくつか実行してみてください。
フィルターを追加することもできますgrep -v Sorry
。例:
$(sudo -n uptime 2>&1 | grep "load" | grep -v Sorry | wc -l)
こうした誤検知を回避するためです。
答え3
@wags007の回答を簡略化すると
if sudo -n true
then
sudo id
else
echo "sorry, but did not want to bother you"
fi
しかし、あなたのsudo は、以下の URL からダウンロードできます。設定によっては、defaults mail_badpass
偽の結果となるテストごとにメールが送信されます(プロンプトが表示されます)。このような迷惑を避けるには、sudoersファイルのその部分を次のように変更します。
Defaults mail_badpass
Defaults! /bin/true !mail_badpass
その結果、/bin/true を除くすべてのコマンドに対してセキュリティ警告メールが送信されます。つまり、sudo true
セキュリティ警告メールが送信されずに、無制限の回数呼び出してパスワードをブルートフォース攻撃できるようになったのです。
注意: visudo
sudoers ファイルを編集するときは、常にお気に入りのエディターではなく を使用してください。そうしないと、ロックアウトされる危険があります。
答え4
sudo のマニュアルによると、sudo セッションはタイムスタンプ ファイル ( /usr/lib/sudo/<username>
) に基づいて決定されるため、タイムスタンプ ファイルの日付/時刻を確認することで残り時間がわかる可能性があります。ただし、私のシステムでは、タイムスタンプ ファイルは実際にはディレクトリであり、不可解な内容の 3 つのファイルが含まれています (奇妙なタイムスタンプもありますが、/usr/lib/sudo/<username>
sudo にパスワードを与えた時刻と一致するタイムスタンプがあるようです。/usr/lib/sudo/<username>/0
最新のsudo
実行のタイムスタンプがあると思います。