sudoers에서 따옴표로 묶인 매개변수로 명령을 지정하시겠습니까?

sudoers에서 따옴표로 묶인 매개변수로 명령을 지정하시겠습니까?

일반적으로

사용자가 비밀번호 없이 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

관련 정보