액세스 권한이 부여되면 Sudo에서 메시지를 표시하도록 할 수 있나요?

액세스 권한이 부여되면 Sudo에서 메시지를 표시하도록 할 수 있나요?

액세스가 거부되면 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런타임에 무슨 일이 일어나는지 생각해 보세요 . 나에게는 다음 두 가지 중 하나가 발생합니다.

  1. Sudo에서 비밀번호를 묻는 메시지를 표시합니다. 비밀번호를 입력하고 터미널이 다음 줄로 이동하는 것을 보지만 dd잠시 동안 아무 것도 출력되지 않습니다. 나는 Sudo가 "죄송합니다. 다시 시도해 주세요"라고 말하고 비밀번호를 다시 묻는 메시지를 기다리지 않았는지 확인하기 위해 몇 초 정도 기다렸습니다.
  2. 내 자격 증명이 캐시되어 있기 때문에 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

관련 정보