¿Cómo especifico argumentos de comando en sudoers? Como fondo, el aws
comando es en realidad una puerta de entrada a un montón de subsistemas y quiero restringir al usuario para que solo se 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
El shell lamentablemente solicita contraseña
$ sudo -u gbt-ops aws s3 cp helloworld s3://my-bucket/hw.1
gbt-ops's password:
Si elimino el comando args en Cmnd_Alias, fluye según lo deseado (sin solicitud de contraseña), pero la autorización es demasiado amplia. Entonces, ¿cuál es la forma correcta de restringir solo a ciertos tipos de invocaciones de comandos ?
Cmnd_Alias AWSS3_CMD = /usr/local/bin/aws, /usr/local/aws/bin/aws
Luego
$ sudo -u gbt-ops aws s3 cp helloworld s3://my-bucket/hw.1
...happy
Muchas gracias.
Respuestas:
No ha utilizado ningún comodín, pero ha proporcionado dos argumentos. Por lo tanto,
sudo
busca los comandos exactamente como están escritos (excepto la búsqueda de ruta) (desdeman 5 sudoers
):Intenta algo como:
Tenga en cuenta que:
Por lo tanto, solo se necesita un comodín por comando.
fuente
/usr/local/bin/aws s3 cp
en sudoers, es más seguro reemplazar eso con un script (solo escribible por root).Lo mismo que @muru, pero para aquellos que les gusta el ejemplo de trabajo completo:
Mientras
/sbin/cmd1
,/sbin/cmd2
puede ser cualquier otro comando.El propósito de
ECHO_CMD
es presentar quesudo echo X A
solicitará una frase de contraseña, mientras quesudo echo A X
no, y permitirle ganar confianza a través de un experimento tan simple.(Se asumió que el eco se encuentra
/bin/echo
, para verificar dónde está en su sistema, intentewhereis echo
)fuente
/bin/echo
binarios, pero la mayoría de los shells también tienen una función incorporadaecho
que se usará en lugar de este binario si no proporciona la ruta completa.