모든 명령에 대해 sudo를 실행할 수 있는 사용자에 대한 항목이 /etc/sudo에 있습니다.
프레드 ALL=(ALL:ALL) ALL
문서에 따르면 최종 ALL은 모든 명령에 대한 액세스를 허용하는 역할을 담당합니다.
나는 fred가 sudo 비밀번호를 제공하지 않고 Ubuntu 14.04에서 nginx를 다시 시작하면서 다른 명령에 대해 sudo를 호출하는 기능을 계속 유지할 수 있기를 바랍니다. 그만큼sudoers문서가 명확하지 않지만 나는 믿습니다
프레드 ALL=(ALL) NOPASSWD: /usr/sbin/service
fred가 명령 하나만 실행하도록 하세요. fred에게 sudo를 통해 루트로 모든 명령을 실행할 수 있는 기능을 부여하고 싶습니다. /usr/sbin/service를 제외한 모든 명령에는 비밀번호가 필요합니다.
문서의 BNF 살펴보기
User_Spec ::= User_List Host_List '=' Cmnd_Spec_List (':' Host_List '=' Cmnd_Spec_List)*
Cmnd_Spec_List ::= Cmnd_Spec | Cmnd_Spec ',' Cmnd_Spec_List
Cmnd_Spec ::= Runas_Spec? SELinux_Spec? Solaris_Priv_Spec? Tag_Spec* Cmnd
Runas_Spec ::= '(' Runas_List? (':' Runas_List)? ')'
SELinux_Spec ::= ('ROLE=role' | 'TYPE=type')
Solaris_Priv_Spec ::= ('PRIVS=privset' | 'LIMITPRIVS=privset')
Tag_Spec ::= ('EXEC:' |
'NOEXEC:' | 'FOLLOW:' | 'NOFOLLOW' |
'LOG_INPUT:' | 'NOLOG_INPUT:' | 'LOG_OUTPUT:' |
'NOLOG_OUTPUT:' | 'MAIL:' | 'NOMAIL:' | 'PASSWD:' |
'NOPASSWD:' | 'SETENV:' | 'NOSETENV:')
따라서 여러 Cmnd_Spec_List를 사용할 수 있는 것 같습니다.
프레드 ALL=(ALL : ALL) ALL, NOPASSWD: /usr/sbin/service
그러나 문서에는 후자의 NOPASSWD: Cmnd_Spec이 해당 명령에 대해서만 ALL 명령 루트 액세스를 무시한다고 나와 있지 않습니다.
제가 처음에 제대로 하고 싶은 일인데, 마지막 줄이 특정 목적에 맞게 작동하는지(또는 작동하지 않을 것이라고 말하든지) 누구든지 확인해 주실 수 있나요?
또한 fred가 sudo 비밀번호 없이 서비스를 실행할 수 있도록 허용하는 경우, 서비스에 대한 인수를 제한하여 fred가 서비스 nginx에서 비밀번호 없이만 작동할 수 있도록 하거나 더 나은 방법으로 fred가 해당 서버만 다시 시작할 수 있도록 하는 방법이 있습니까? 비밀번호 없이?
감사해요.
답변1
구성 하단에 있는 명령은 위의 명령보다 우선합니다. 의 문서에 언급되어 있습니다.https://www.sudo.ws/man/1.8.15/sudoers.man.html#SUDOERS_FILE_FORMAT그런 식으로 순서를 지정하지 않는 한 그것은 가장 구체적이지 않습니다.
여러 줄을 사용하여 이 작업을 수행합니다. 상황이 더욱 복잡해지면 여러 줄과 규칙을 읽고 이해하기가 더 쉽습니다. 여러 줄을 사용하면 순서를 설정하는 데 도움이 됩니다.
# I don't know what order this is interpreted in:
fred ALL=(ALL : ALL) ALL, NOPASSWD: /usr/sbin/service
# I do know what order this is interpreted in:
fred ALL=(ALL) ALL
fred ALL=(ALL) NOPASSWD: /usr/sbin/service
다음 줄은 내 sudoers 파일에서 가져온 것입니다. 그룹 구성원이 wheel
모든 명령을 실행할 수 있도록 허용한 다음, 특히 REBOOT
비밀번호 없이 별칭에서 명령을 실행할 수 있습니다.
Cmnd_Alias REBOOT = /sbin/halt, /sbin/reboot, \
/sbin/poweroff, /sbin/shutdown
%wheel ALL=(ALL) ALL
%wheel ALL=(ALL) NOPASSWD: REBOOT
불행하게도 여러분에게 알려줄 공개 문서가 많지 않습니다. sudoers 맨 페이지는 말도 안됩니다. 나는 얼마 전에 그것에 관한 훌륭한 (읽기 쉬운) 책을 읽었습니다.스도 마스터리작성자: Michael W. Lucas) 이 예제는 여러 Linux 및 BSD 시스템에서 작동합니다.
답변2
안녕하세요. 작동할 수 있습니다. 루트로 로그인하고 아래 명령을 따르세요. $sudoers 파일에 아래 줄을 추가하세요.
프레드 ALL=(ALL)NOPASSWD:ALL