허용되지 않는 명령을 실행할 때 sudo가 비밀번호를 묻는 메시지를 표시하지 않도록 방지


15

sudo를 통해 비밀번호없이 특정 명령을 실행할 수있는 그룹 권한을 부여했습니다. 사용자 중 한 명이 오타를하거나 잘못된 명령을 실행하면 시스템에서 암호를 입력하라는 메시지가 표시되고 오류가 발생합니다. 이것은 사용자를 혼란스럽게하므로 암호를 묻는 메시지 대신 오류를 표시하고 싶습니다. 이게 가능해?

내 sudoers 파일의 예는 다음과 같습니다.

%mygroup ALL=(ALL) NOPASSWD:/usr/local/bin/myscript.sh *

그들이 잘못된 스크립트를 실행할 때의 예 :

# sudo /usr/local/bin/otherscript.sh
[sudo] password for user:
Sorry, user user is not allowed to execute '/usr/local/bin/otherscript.sh' as root on <hostname>.

원하는 출력 :

Sorry, user user is not allowed to execute '/usr/local/bin/otherscript.sh' as root on <hostname>. Please check the command and try again.

비밀번호 프롬프트가 표시되지 않습니다.

내 google-fu가 실패했으며 사용자 명령을 실행할 수있는 경우 비밀번호를 요청하지 않은 결과 만 반환합니다 .


8
가능하다면 (작은) 보안 구멍을 열 수 있습니다. 로그인 한 상태에서 키보드를 "빌려" sudo면 암호를 입력하지 않고 실행할 수 있는 명령 을 볼 수 없습니다 . 원하는 기능으로 특정 명령에 대한 정보를 얻을 수 있습니다.
Keith Thompson

4
이것은 꽤 큰 보안 문제이므로 스크립트로 sudo를 명령으로 사용해서는 안됩니다. 사람들은 스크립트를 편집하고 감사에서 스크립트를 완전히 마스킹하고 싶은 것을 실행할 수 있습니다. 대신 스크립트 내부에 sudo 호출을 추가하십시오.
coteyr

1
바이너리 파일을 실행하는 @coteyr sudo은 사용자가 이러한 파일에 대한 쓰기 권한을 가지고 있다면 큰 문제입니다.
Dmitry Grigoryev

1
@CarlWitthoft는 sudoers에서 허용되는 프로그램을 지정하기 위해 절대 경로를 사용하는 이유입니다.
Dmitry Grigoryev

1
@DmitryGrigoryev, 예. 그러나 단 하나의 파일에 sed 또는 일부를 사용하려는 경우 sudo에 이점이 없습니다. 사용자가 파일을 수정하도록 허용하면 파일에 권한이 있습니다. 바퀴를 재발 명할 필요는 없습니다. 사용자가 파일을 수정할 수있게하려면 허용하십시오. 사용자가 비밀번호없이 파일을 수정할 수 있도록 sudo를 사용하여 후프를 뛰어 넘을 필요가 없습니다. 항상 허용 할 수 있습니다. 올바른 작업에 적합한 도구입니다.
coteyr

답변:


25

빠른 읽기에서 sudo(8)

   -n          The -n (non-interactive) option prevents sudo from
               prompting the user for a password.  If a password is
               required for the command to run, sudo will display an error
               message and exit.

그리고 의심 자들에게 :

# grep jdoe /etc/sudoers
jdoe    ALL=(ALL) NOPASSWD: /bin/echo
#

따라서 테스트 :

% sudo echo allowed
allowed
% sudo -n ed             
sudo: a password is required
% sudo ed               

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.

Password:

따라서 이러한 사람들 aliassudo위한 암호는 암호 프롬프트를 방지하기 위해 트릭을 수행 할 것입니다. 이제 이것이 커스텀 컴파일이 필요한 이유 sudo는 모르겠지만 매뉴얼을 읽었습니다.


과연. 나는 alias sudo="$(which sudo) -n"/ etc / bashrc 와 같은 것을 넣고 원하는대로 sudo(조정 된 행동) 또는 command sudo(기본 행동)을 사용합니다.
CVn

7

나를 위해 일한 한 가지 (Sudo 버전 1.8.17p1) 문제의 일부만을 만족시키는 것은 암호 시도 횟수를 0으로 설정하는 것입니다.

Defaults:%mygroup passwd_tries = 0

이것은 암호를 요구하는 명령이 시도 될 때 코드 1로 sudo를 종료시킵니다. 그러나 어떤 종류의 오류 메시지도 생성하지 않습니다.


이것은 또한 올바른 대답이지만 오류 메시지가 없으면 혼란 스러울 수 있습니다. 위의 답변에서 정확하지만 예기치 않은 오류도 혼란 스럽습니다. 내가 생각하기에 던져 버린다. 다른 답변을 제공해 주셔서 감사합니다. 옵션은 항상 높이 평가됩니다!
user184982

2

당신은 할 수 없습니다.

인증을 받기 전까지는 본인이 누구인지 알 수 없으며 기본적으로 비밀번호없이 인증 할 수 없습니다.

USB 키, 지문 스캐너, 음성 인증, 얼굴 인식 또는 기타 여러 가지를 사용하도록 인증을 변경할 수 있지만 요점은 동일합니다.

sudo를 인증하기 전에 인증없이 AND 인증없이 인증 할 수 없습니다. 실행할 수있는 것과 실행할 수없는 것을 알려주는 비즈니스가 없습니다.


2
sudo를 실행할 때 비밀번호를 입력하는 것은 신원이 아닙니다 (“내가 누구인지 말하십시오”). Sudo는 당신이 누군지 알고 있습니다. 비밀번호를 입력하는 것은 현재 상태 확인입니다.
Gilles 'SO- 악마 그만해'

현재 상태 확인을 "인증"으로 간주합니다. 인증에서와 같이 인증합니다.
coteyr

2
대답은 "식별"이 아니라 "인증"이라고 말합니다. sudo는 해당 터미널에 로그인 한 사용자를 기반으로 자신이 누구인지 주장 하지만 해당 신원을 인증하기 전까지 누구인지 알 수 없습니다 .
Dave Sherohman

2

@StrongBad는 답변이 될만한 의견을 제시했습니다.

가장 좋은 해결책은 항상 sudo올바른 매개 변수로 호출하는 래퍼 스크립트를 작성하는 것 입니다. (포함 -n)

랩퍼 스크립트는 인수 구문 분석 등을 수행하여 호출 된 sudo 스크립트가 가능한 작게되어 버그가 발생할 가능성이 줄어 듭니다.


1

이건 불가능 해. 유일한 방법은 소스 코드를 변경하고 자신의 포크를 컴파일하는 것입니다.sudo


네 말이 맞지만 모든 프로덕션 서버에 사용자 정의 버전의 sudo를로드 할 권한이 없다고 생각합니다. HAH
user184982
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.