¿Cómo uso argumentos de comando con Cmnd_Alias ​​en sudoers?

¿Cómo uso argumentos de comando con Cmnd_Alias ​​en sudoers?

¿Cómo especifico argumentos de comando en sudoers? En segundo plano, awsel comando es en realidad una puerta de entrada a una gran cantidad de subsistemas y quiero restringir al usuario para que solo ejecuteaws s3 cp ...any other args...

Cuando intento lo siguiente en/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

Desafortunadamente, el shell solicita una contraseña.

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

Si elimino los argumentos del comando en Cmnd_Alias, entonces fluye como se desea (sin solicitud de contraseña), pero la autorización es demasiado amplia.Entonces, ¿cuál es la forma correcta de restringir solo ciertos tipos de invocaciones de comandos?.

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

Entonces

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

Muchas gracias.

Respuesta1

No ha utilizado ningún comodín, pero ha proporcionado dos argumentos. Por lo tanto, sudobusca comandos exactamente como están escritos (excepto la búsqueda de ruta) (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).

Pruebe algo como:

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

Tenga en cuenta 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. 

Por lo tanto, sólo se necesita un comodín por comando.

Respuesta2

Lo mismo que @muru, pero para aquellos a quienes les gusta el ejemplo 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

Mientras que /sbin/cmd1, /sbin/cmd2puede ser cualquier otro comando.

El propósito de ECHO_CMDes presentar quién sudo echo X Asolicitará una frase de contraseña, mientras que sudo echo A Xno, y permitirle ganar confianza a través de un experimento tan simple.

(Se supuso que el eco se encuentra en /bin/echo, para verificar dónde está en su sistema, intente whereis echo)

Respuesta3

También puedes usar expresiones regulares en sudoers.

esto permitirá /usr/bin/apt update upgrade and auto-removeejecutarlo sin contraseña, pero si especifica un nombre .deb, apt installaún le solicitará la contraseña.

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

Respuesta4

Sé que esto es antiguo, pero digamos que es caten lugar de echoy hay un archivo Cal que el usuario no tiene acceso. Agrega el usuario a sudoers lo que permite:

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

Entonces tendría acceso al archivo C ejecutando:

sudo echo A C

ya que C sigue correctamente la sintaxis de comodines. Creo que este es un buen ejemplo de mala seguridad al usar comodines en los comandos sudo. ¡Tendría mucho cuidado con este uso y tendría en cuenta cualquier posible variación que pueda producir el comodín!

información relacionada