Especifique o comando com argumentos entre aspas em sudoers?

1

O caso geral

Estou tentando habilitar um usuário para executar um comando sudo (com argumentos) sem uma senha. Eu consigo fazer com que a diretiva NOPASSWD funcione, mas somente quando os argumentos não contêm aspas.

Por exemplo, isso funciona:

# /etc/sudoers.d/sample
%sudo   ALL=(ALL)  NOPASSWD: /bin/echo foo

$ sudo echo foo
foo

Mas isso não acontece, porque as aspas são interpretadas literalmente:

# /etc/sudoers.d/sample
%sudo   ALL=(ALL)  NOPASSWD: /bin/echo "foo"

$ sudo echo "foo"
[sudo] password for rlue:
$ sudo echo \"foo\"
"foo"

Meu caso específico

Este é o comando que estou tentando permitir:

$ sudo sh -c 'echo XHCI > /proc/acpi/wakeup'

Na verdade, consegui que funcionasse com o seguinte comando sem aspas:

%sudo   ALL=(ALL)  NOPASSWD: /bin/sh -c echo XHCI > /proc/acpi/wakeup

Mas como chama a sh -c , e como eu claramente não entendo exatamente o que está acontecendo, gostaria de ser mais explícito sobre o que estou permitindo.

Como posso especificar a citação de argumentos de comando no arquivo sudoers?

    
por Ryan Lue 09.05.2018 / 05:02

1 resposta

0

edit: Aviso, parece que o sudo não manipula com segurança espaços no comando, portanto, não é seguro usar o sudo dessa maneira. link

Em vez de usar aspas no arquivo sudoers, você pode escapar de espaços usando barra invertida:

%sudo   ALL=(ALL)  NOPASSWD: /bin/sh -c echo\ XHCI\ >\ /proc/acpi/wakeup

Você ainda pode usá-lo da seguinte forma, porque o shell do usuário lida com o argumento citado de qualquer maneira:

sudo /bin/sh -c 'echo XHCI > /proc/acpi/wakeup'

Você também pode considerar colocar um comando complexo em um script, como sugerido em um comentário. link

    
por 09.05.2018 / 08:40