Como uso argumentos de comando com Cmnd_Alias em sudoers?

33

Como eu especifico argumentos de comando em sudoers? Como pano de fundo, o comando aws é na verdade um gateway para um monte de sub-sistemas e eu quero restringir o usuário a executar somente aws s3 cp ...any other args...

Quando eu tento o seguinte em /etc/sudoers

Cmnd_Alias AWSS3_CMD = /usr/local/bin/aws s3 cp, /usr/local/aws/bin/aws s3 cp
gbt1 ALL=(gbt-ops) NOPASSWD: AWSS3_CMD

O shell infelizmente pede senha

$ sudo -u gbt-ops aws s3 cp helloworld s3://my-bucket/hw.1
gbt-ops's password:

Se eu remover o comando args em Cmnd_Alias, ele fluirá como desejado (sem prompt de senha), mas a autorização será muito ampla. Então, qual é a maneira correta de restringir apenas a certos tipos de invocações de comandos .

Cmnd_Alias AWSS3_CMD = /usr/local/bin/aws, /usr/local/aws/bin/aws

Então

$ sudo -u gbt-ops aws s3 cp helloworld s3://my-bucket/hw.1
...happy

Muito obrigado.

    
por Dinesh 08.01.2015 / 03:29

2 respostas

47

Você não usou nenhum curinga, mas forneceu dois argumentos. Portanto, sudo procura comandos exatamente como escritos (exceto a pesquisa de caminho) (de man 5 sudoers ):

 If a Cmnd has associated command line arguments, then the arguments in
 the Cmnd must match exactly those given by the user on the command line
 (or match the wildcards if there are any).

Tente algo como:

Cmnd_Alias AWSS3_CMD = /usr/local/bin/aws s3 cp *, /usr/local/aws/bin/aws s3 cp *

Observe que:

 Wildcards in command line arguments should be used with care.  Because
 command line arguments are matched as a single, concatenated string, a
 wildcard such as ‘?’ or ‘*’ can match multiple words. 

Portanto, apenas um curinga é necessário por comando.

    
por 08.01.2015 / 04:42
7

O mesmo que @muru, mas para quem gosta de exemplo de trabalho completo:

# Cmnd alias specification
Cmnd_Alias ECHO_CMD=/bin/echo A *,/bin/echo B *

# Make USER run specific commands on given HOSTNAME
# USER_NAME 

#userx
userx ALL=(root) NOPASSWD: /sbin/cmd1,/sbin/cmd2,ECHO_CMD

Embora /sbin/cmd1 , /sbin/cmd2 possa ser qualquer outro comando.

A finalidade de ECHO_CMD é apresentar que sudo echo X A pedirá senha, enquanto sudo echo A X não, e permitir que você ganhe confiança por meio de um experimento tão simples.

(Foi assumido que o echo fica em /bin/echo , para verificar onde está no seu sistema, tente whereis echo )

    
por 21.05.2017 / 22:08

Tags