내 스크립트에서 sudo를 사용할 수 있도록 requiretty를 비활성화하고 싶지만 모든 명령에 대해 비활성화하는 것보다 단일 명령에 대해 비활성화하는 것이 좋습니다. sudoers 구성에서 이것이 가능합니까?
답변1
특정 사용자나 특정 명령(또는 특정 실행 중인 사용자나 호스트) 과 같은 옵션에 대한 기본 설정을 재정의할 수 있지만 requiretty
특정 사용자로 실행되는 특정 명령에 대해서는 재정의할 수 없습니다.
예를 들어, 다음 파일은 requiretty
컴파일 기본 옵션에 설정되어 있다고 가정하여 스크립트에서 root 로 sudoers
허용 되고 실행됩니다 . 비밀번호는 필요하지 않으며 오히려 비밀번호를 입력해야 합니다(아마도 일부 터미널에서 닫혔고 최근에 입력되었을 것입니다).artbristol
bob
/path/to/program
artbristol
bob
tty_tickets
bob
artbristol ALL = (root) NOPASSWD: /path/to/program
bob ALL = (root) /path/to/program
Defaults!/path/to/program !requiretty
특정 매개변수를 사용하여 명령 설정을 변경하려면 명령 별칭을 사용해야 합니다(이것은 구문 제한 사항입니다). 예를 들어 다음 스니펫은 스크립트 내에서 실행될 수 있지만 artbristol
다른 매개변수로는 실행될 수 없습니다./path/to/program --option
/path/to/program
Cmnd_Alias MYPROGRAM = /path/to/program --option
artbristol ALL = (root) /path/to/program
artbristol ALL = (root) NOPASSWD: MYPROGRAM
Defaults!MYPROGRAM !requiretty
답변2
이 같은:
myuser ALL=(ALL) NOPASSWD:/usr/local/bin/mycmd
Defaults:myuser !requiretty
답변3
나는 그것이 나에게 효과적이라는 것을 알았습니다 /etc/sudoers.d
. 확인하는 것은 매우 간단했습니다.
먼저 /etc/sudoers.d/01build
다음을 만들었습니다.
build ALL=(ALL) NOPASSWD:/bin/date
Defaults:build !requiretty
그런 다음 작동하는지 테스트합니다.
ssh host sudo -n /bin/date
Mon Nov 16 16:04:27 CST 2015
/etc/sudoers.d/01build
그런 다음 해당 줄을 수정 하고 삭제한 Defaults:
후 다음을 얻었습니다.
ssh host sudo -n /bin/date
sudo: sorry, you must have a tty to run sudo