
アクセスが拒否されると、Sudoはすでにユーザーに次のことを知らせます。
[jayman@this-machine:~]$ sudo echo hi
[sudo] password for jayman:
Sorry, try again.
[sudo] password for jayman:
Sorry, try again.
[sudo] password for jayman:
sudo: 3 incorrect password attempts
[git@this-machine:~]$ sudo echo hi
Sorry, user git may not run sudo on this-machine.
ただし、Sudoはアクセス権が付与された時期をユーザーに通知しません。sudo dd if=foo of=bar
実行時に何が起こるのか考えてみてください。私には、次の2つのうちの1つが発生します。
- Sudoでパスワードの入力を求められます。パスワードを入力して端末が次の行に移動するのを見ますが、
dd
しばらく何も出力されません。私はSudoが「申し訳ありません。もう一度やり直してください。 - 私の資格情報がキャッシュされているため、Sudoはパスワードの入力を求めません。
dd
しばらく何も出力されません。私はSudoが私のパスワードを求めるメッセージを表示するのに時間がかかっていないことを確認するために数秒待っていました。
私のパスワードが承認された後にSudoがメッセージを印刷したら、パスワードが開始されたことを確認するのを待つ必要はありませんdd
。アクセスを許可した後にSudoでメッセージを印刷する方法はありますか?
答え1
私は最終的に次のようなBashスクリプトを作成しましたsudo
。
set -e
console="$(tty)"
readonly console
/path/to/real/sudo -v
# Sudo normally writes directly to the terminal device instead of
# writing to stdout, so that’s what I’m doing here
echo Access granted. &> "$console"
/path/to/real/sudo "$@"
その後、このソリューションにはいくつかの制限がありますPATH
。"/path/to/fake/sudo/dir:$PATH"
- 資格情報キャッシュが無効になっていると、正しく機能しません。
- 資格情報がキャッシュされていない場合は、パスワードの入力を求められます
sudo --help
。sudo -k