質問
両方とも sudo アクセス権があり、パスワードがすでに認証されているかどうかをすぐに確認できるようにしたいと考えています。これから実行しようとしている操作専用に sudo アクセス権があるかどうかは心配していませんが、それは素晴らしいボーナスでしょう。
具体的にこれを使用しようとしているのは、さまざまなユーザーが実行できるようにするスクリプトです。sudo アクセス権を持つものもあります。全員が root パスワードを知っています。
スクリプトを実行するときに、可能であればパスワードの入力を求めずに sudo 権限を使用し、それ以外の場合はフォールバックしてパスワードを要求するようにしたいと考えています。 根 パスワード (sudo アクセス権がない可能性があるため)。
私の最初のうまくいかなかった試みはフォークオフでした sudo -S true
STDIN が閉じているか、/dev/null から読み取り中。ただし、それでもパスワードの入力を求められ、数秒待ちます。
すぐに成功するかどうかを確認するために 0.3 秒待つなど、他にもいくつかのことを試しましたが、すべての試みが何らかの状況で失敗してしまいます。(タイムアウトが短すぎるからではありません。)いつものようにただ歩くことができないので、何が起こっているのかを理解するのは困難です。
一つ私は 知る STDINを閉じるか、実行前にSTDINをパイプに接続しないと機能しません sudo -S true
. 。これでパスワードのプロンプトがすぐに失敗することを期待していましたが、依然としてプロンプトが表示され、奇妙な動作をします。端末が欲しいかも知れません。
解決
他のヒント
これを行う必要がある最終的な理由はわかりませんが、根本的な理由が何であれ、再考する必要があるかもしれないと思います。権限を使用して複雑で珍しいことを実行しようとすると、セキュリティ ホールが発生することがよくあります。
より具体的には、スクリプトが何を行おうとしているとしても、sudo ではなく setuid を使用したほうがよい場合があります。(なぜこれほど多くの人が root パスワードを持っているのかも疑問に思うでしょう。Sudo は、特に root パスワードを他人に与えないようにするために存在します。)
getent group admin | grep $particular_user
whoami を使用して現在のユーザーを取得できます。
編集:しかし、これは自分がまだ sudo タスクを実行する権限を持っているかどうかを確認するのには役立ちません...ふーむ..
ランニング
sudo -S true < /dev/null &>/dev/null
うまくいくようですが、失敗するまでに 1 秒遅れます。