![sudoers에서 따옴표로 묶인 매개변수로 명령을 지정하시겠습니까?](https://linux55.com/image/133017/sudoers%EC%97%90%EC%84%9C%20%EB%94%B0%EC%98%B4%ED%91%9C%EB%A1%9C%20%EB%AC%B6%EC%9D%B8%20%EB%A7%A4%EA%B0%9C%EB%B3%80%EC%88%98%EB%A1%9C%20%EB%AA%85%EB%A0%B9%EC%9D%84%20%EC%A7%80%EC%A0%95%ED%95%98%EC%8B%9C%EA%B2%A0%EC%8A%B5%EB%8B%88%EA%B9%8C%3F.png)
일반적으로
사용자가 비밀번호 없이 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