Como uso argumentos de comando com Cmnd_Alias ​​em sudoers?

Como uso argumentos de comando com Cmnd_Alias ​​em sudoers?

Como especifico argumentos de comando em sudoers? Como pano de fundo, awso comando é na verdade uma porta de entrada para vários subsistemas e quero restringir o usuário a executar apenasaws s3 cp ...any other args...

Quando 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

Infelizmente, o shell solicita 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á conforme desejado (sem solicitação de senha), mas a autorização será muito ampla.Então, qual é a maneira correta de restringir apenas certos tipos de invocações de comando.

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.

Responder1

Você não usou curingas, mas forneceu dois argumentos. Portanto, sudoprocura comandos exatamente como escritos (exceto pesquisa de caminho) (deman 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.

Responder2

O mesmo que @muru, mas para quem gosta de exemplo 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

Enquanto /sbin/cmd1, /sbin/cmd2pode ser qualquer outro comando.

O objetivo ECHO_CMDé apresentar que sudo echo X Asolicitará a senha, mas sudo echo A Xnão, e permitir que você ganhe confiança por meio de um experimento tão simples.

(Presumiu-se que echo fica em /bin/echo, para verificar onde está em seu sistema, tente whereis echo)

Responder3

você também pode usar regexp em sudoers.

isso permitirá /usr/bin/apt update upgrade and auto-removea execução sem senha, mas se você especificar um nome .deb ou apt installainda solicitará a senha.

Cmnd_Alias UPDATES = /usr/bin/apt (update|upgrade|auto-remove)
%sudo ALL=(ALL:ALL) NOPASSWD: UPDATES
%sudo ALL=(ALL:ALL) ALL

Responder4

Eu sei que isso é antigo, mas digamos que é catem vez de echoe há um arquivo Cao qual o usuário não tem acesso. Você adiciona o usuário ao sudoers que permite:

# Cmnd alias specification
Cmnd_Alias ECHO_CMD=cat A *,cat B *

Eu teria então acesso ao arquivo C executando:

sudo echo A C

já que C segue a sintaxe curinga corretamente. Acho que este é um bom exemplo de segurança ruim ao usar curingas em comandos sudo. Eu tomaria muito cuidado com esse uso e levaria em conta qualquer variação possível que o curinga pudesse produzir!

informação relacionada