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 arquivo /etc/sudoers :

# 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 como esperado. Se eu executar o comando como usuário zabbix com sudo, ele pedirá a senha (embora eu tenha especificado a opção NOPASSWD ).

No entanto, isso funciona:

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

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

    
por Daniel 14.02.2013 / 11:22

2 respostas

10

Eu não concordo com lain. Embora funcione, você não precisa de awk para ser executado como root. Eu não ficaria confortável com isso porque você pode atacar awk de alguma forma. É um intérprete de linguagem de programação completa, afinal.

Quando uma pessoa executa sudo /usr/bin/apt-get --print-uris -qq -y upgrade 2>/dev/null |awk '{print $2}' | wc | awk '{print $1}' , na verdade eles estão executando sudo /usr/bin/apt-get --print-uris -qq -y upgrade e, em seguida, canalizando / redirecionando como o usuário chamador.

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

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

    
por 14.02.2013 / 16:57
25

Você provavelmente está caindo na forma como o redirecionamento interage com o sudo. O redirecionamento é executado no usuário chamador e não no usuário privilegiado. Provavelmente seria mais fácil envolver o comando em um script e permitir que o usuário do zabbix executasse 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}'

o conjunto de sudoers como

zabbix  ALL=NOPASSWD: /path/to/script

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

    
por 14.02.2013 / 11:35