비밀번호없이 특정 sudo 명령을 어떻게 실행합니까?


211

하나의 특정 컴퓨터에서 나는 종종 때때로 sudo명령 을 실행해야합니다 . sudo대부분의 경우 암호를 입력해도 괜찮습니다 .

그러나 암호를 입력하지 않고 실행하려는 세 가지 sudo명령이 있습니다 .

  • sudo reboot
  • sudo shutdown -r now
  • sudo shutdown -P now

비밀번호 보호에서이 명령을 어떻게 제외 할 수 sudo있습니까?


답변:


283

NOPASSWD지시문을 사용하십시오

파일 에서 NOPASSWD지시문을 사용할 수 있습니다 ./etc/sudoers

사용자가 호출 user되고 호스트가 호출 host되면 다음 행을 /etc/sudoers다음에 추가 할 수 있습니다 .

user host = (root) NOPASSWD: /sbin/shutdown
user host = (root) NOPASSWD: /sbin/reboot

이를 통해 사용자 는 비밀번호를 입력하지 않고도 user원하는 명령을 실행할 수 host있습니다. 다른 모든 sudoed 명령에는 여전히 암호가 필요합니다.

맨 페이지에 설명 된대로 sudoers파일에 지정된 명령은 정규화 되어야합니다 (즉, 명령의 절대 경로를 사용하여 실행) . 상대 경로를 제공하는 것은 구문 오류로 간주됩니다.sudoers

명령이 후행 /문자로 끝나고 디렉토리를 가리키는 경우 사용자는 해당 디렉토리에서 하위 디렉토리가 아닌 해당 디렉토리에서 모든 명령을 실행할 수 있습니다. 다음 예제에서 사용자 user는 디렉토리에서 모든 명령을 실행할 수 있습니다 /home/someuser/bin/.

user host = (root) NOPASSWD: /home/someuser/bin/

참고 : 실수로 파일에 잘못된 것을 쓰려는 경우를 대비하여 항상 시스템에서 사용자를 잠그지 않도록 파일 visudo을 편집하려면 명령 을 사용 하십시오. 수정 된 파일을 임시 위치에 저장 하고 수정 된 파일을 오류없이 구문 분석 할 수있는 경우 에만 실제 파일을 덮어 씁니다 .sudoerssudoersvisudosudoers

/etc/sudoers.d수정 대신 사용/etc/sudoers

/etc/sudoers파일 을 편집하는 대신 , /etc/sudoers.d예를 들어 두 줄을 새 파일에 추가 할 수 있습니다 /etc/sudoers.d/shutdown. 이는 sudo권한에 대한 다양한 변경 사항을 분리 하고 sudoers업그레이드하기 쉽도록 원본 파일을 그대로 유지 하는 우아한 방법입니다 .

참고 : 다시 명령 visudo을 사용하여 파일을 편집하여 시스템에서 자신을 잠그지 않도록해야합니다.

sudo visudo -f /etc/sudoers.d/shutdown 

또한 새 파일의 소유자와 권한이 올바르게 설정되도록합니다.

sudoers엉망인 경우

visudo파일을 편집 하는 데 사용하지 않은 상태에서 실수로 파일을 엉망으로 만들 /etc/sudoers거나 엉망으로 /etc/sudoers.d만들면 잠금 상태가 sudo됩니다.

해결책은를 사용 pkexec하는 파일을 수정하는 것 sudo입니다.

해결하려면 /etc/sudoers:

pkexec visudo

해결하려면 /etc/sudoers.d/shutdown:

pkexec visudo -f /etc/sudoers.d/shutdown

sudoers파일에 대한 소유권 및 / 또는 권한이 올바르지 않은 경우 파일이 무시되므로이 sudo상황에서 자신이 잠겨있을 수도 있습니다. 다시이 pkexec문제를 해결 하는 데 사용할 수 있습니다 .

올바른 권한은 다음과 같아야합니다.

$ ls -l /etc/sudoers.d/shutdown 
-r--r----- 1 root root 86 Jul 16 15:37 /etc/sudoers.d/shutdown

소유권과 권한pkexec 을 수정 하려면 다음 과 같이 사용하십시오 .

pkexec chown root:root /etc/sudoers.d/shutdown
pkexec chmod 0440 /etc/sudoers.d/shutdown

2
두 줄은이 두 명령을 구체적으로 나타냅니다. 경우 user주어진 다른 방법에없는 sudo권리를 다른 명령이 사용자에 의해 sudoed 할 수 없습니다. 한 번 봐 가지고 man sudoman sudoers.
mgd

4
@StanKurdziel Mac OS X Yosemite 에서이 줄을 사용해 보았지만 정상적으로 작동했습니다 mgd ALL=(root) NOPASSWD: /var/root/test. 나는 사용자 mgd이며 "모든 호스트에서"를ALL 의미 합니다 . /var/root/test권한이있는 간단한 "Hello World"셸 스크립트입니다 -rwx------ 1 root wheel 27 12 Jun 09:54 /var/root/test. 내가하지 시스템에 다른 변화를.
mgd

2
무엇 host의 sudoers 파일에?
user106563

1
그것은 대답이 아니며, NOPASSWD 지시어에 대한 거의 완전한 가이드입니다. 감사합니다.
Eray

1
@Michael은 맨 페이지를 읽으십시오. 모두 거기에 기록되어 있습니다. 인용하려면 : 그러나 명령 줄 인수 (와일드 카드 포함)를 지정할 수도 있습니다. 또는 ""를 지정하여 명령 행 인수없이 만 명령을 실행할 수 있음을 표시 할 수 있습니다.
mgd

3

미안하지만 이것과 정말 복잡한 답변에 대해 너무 많은 혼란이 있습니다.

visudo 사용 !!

구성에 다음 행을 추가하십시오.

ALL ALL=NOPASSWD: /sbin/reboot,/sbin/shutdown

이를 통해 모든 사용자가 매개 변수를 사용하여 명령, 재부팅 및 종료를 수행 할 수 있습니다.

간단한 간결한 답변을 제공하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.