일반적으로
사용자가 비밀번호 없이 sudo 명령(매개변수 포함)을 실행하도록 하려고 합니다. 지시문이 작동하도록 할 수 있지만 NOPASSWD
매개변수에 따옴표가 없는 경우에만 가능합니다.
예를 들어 다음과 같이 작동합니다.
# /etc/sudoers.d/sample
%sudo ALL=(ALL) NOPASSWD: /bin/echo foo
$ sudo echo foo
foo
그러나 인용문은 문자 그대로 해석되기 때문에 그렇지 않습니다.
# /etc/sudoers.d/sample
%sudo ALL=(ALL) NOPASSWD: /bin/echo "foo"
$ sudo echo "foo"
[sudo] password for rlue:
$ sudo echo \"foo\"
"foo"
내 구체적인 사례
이것은 내가 허용하려는 명령입니다:
$ sudo sh -c 'echo XHCI > /proc/acpi/wakeup'
실제로 인용되지 않은 다음 명령을 사용하여 작업했습니다.
%sudo ALL=(ALL) NOPASSWD: /bin/sh -c echo XHCI > /proc/acpi/wakeup
하지만 전화가 오니까 sh -c
그리고 내가분명히무슨 일이 일어나고 있는지 잘 모르겠지만, 내가 허용하는 것이 무엇인지 좀 더 명확하게 설명하고 싶습니다.
sudoers 파일에서 명령 매개변수에 대한 참조를 어떻게 지정합니까?
답변1
편집: 경고, sudo는 명령의 공백을 안전하게 처리하지 못하는 것 같으므로 이런 방식으로 sudo를 사용하는 것은 안전하지 않습니다. https://unix.stackexchange.com/a/279142/39281
sudoers 파일에서 따옴표를 사용하는 대신 백슬래시를 사용하여 공백을 이스케이프할 수 있습니다.
%sudo ALL=(ALL) NOPASSWD: /bin/sh -c echo\ XHCI\ >\ /proc/acpi/wakeup
어쨌든 사용자의 쉘은 인용된 인수를 처리하므로 다음과 같이 계속 사용할 수 있습니다.
sudo /bin/sh -c 'echo XHCI > /proc/acpi/wakeup'
주석에서 제안한 대로 복잡한 명령을 스크립트에 넣는 것을 고려할 수도 있습니다. https://serverfault.com/a/516002