Permitir comando sudo complexo no Debian Linux


13

Eu preciso permitir um comando específico em uma caixa Debian Linux para um único usuário. Eu tentei isso no /etc/sudoersarquivo:

# User privilege specification
zabbix  ALL=NOPASSWD: /usr/bin/apt-get --print-uris -qq -y upgrade 2>/dev/null |awk '{print $2}' | wc | awk '{print $1}'

Isso não funciona conforme o esperado. Se eu executar o comando como usuário zabbix com sudo, ele solicitará a senha (embora eu tenha especificado a NOPASSWDopção).

No entanto, isso funciona:

# User privilege specification
zabbix  ALL=NOPASSWD: /usr/bin/apt-get

Mas tem a desvantagem de que todos os subcomandos apt-getsão permitidos. Existe uma maneira de corrigir isso para permitir apenas um comando específico?

Respostas:


10

Eu discordo de mentir. Embora funcione, você não precisa awkexecutar como root. Eu não me sentiria confortável com isso, porque você poderá atacar awkde alguma forma. Afinal, é um intérprete de linguagem de programação completo.

Quando um é executado sudo /usr/bin/apt-get --print-uris -qq -y upgrade 2>/dev/null |awk '{print $2}' | wc | awk '{print $1}', eles estão realmente em execução sudo /usr/bin/apt-get --print-uris -qq -y upgradee, em seguida , são redirecionados / redirecionados como o usuário que está chamando.

Tente o seguinte: zabbix ALL=NOPASSWD: /usr/bin/apt-get --print-uris -qq -y upgrade

A propósito, não há nada errado em colocar isso em um script como o lain faz e você ainda pode fazer isso. Eu evitaria executar o awk como root, se possível.


1
Você está correto, mas se o script é inseguro, não importa o que está nele, ele pode ser substituído e o mundo é sua ostra. Se o script é seguro, o que está nele também é seguro.
user9517

25

Você provavelmente está se enganando com a maneira como o redirecionamento interage com o sudo. O redirecionamento é realizado no usuário que chama e não no usuário privilegiado. Provavelmente seria mais fácil envolver seu comando em um script e permitir que o usuário do zabbix execute esse script, por exemplo

#!/bin/bash
/usr/bin/apt-get --print-uris -qq -y upgrade 2>/dev/null |awk '{print $2}' | wc | awk '{print $1}'

os sudoers definidos como

zabbix  ALL=NOPASSWD: /path/to/script

Agora, todo o script será executado como usuário privilegiado e não apenas o comando apt-get específico. Certifique-se de que o usuário do zabbix não possa gravar no script.


1
Alguém provavelmente pode me corrigir se o sudo já resolver isso (eu me lembro de ter problemas com as variáveis ​​env não serem passadas), mas eu sugiro que o awk e o wc tenham seus caminhos completos como uma prática recomendada geral para scripts, para que um usuário possa 't fazer export PATH = ~ user / bin: $ PATH e vara de tudo o que comanda o quer em um script chamado awk (ou wc) em ~ user / bin
Foon

@ Foon: Eu acho que você está confundindo sudo com cron.
user9517

1
Não confundi-la, mas superuser.com/questions/232231/... não indica que a manipulação impede sudo PATH (e LD_LIBARRAY_PATH por padrão)
Foon

Eu fiz algo parecido, apenas substitui o script evocador e o tornei gravável apenas pela raiz. Teste se ele funciona para o usuário com permissões 711, e ele nem consegue ver o que está fazendo para tentar evitá-lo.
Chris K
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.