![¿Cómo uso argumentos de comando con Cmnd_Alias en sudoers?](https://rvso.com/image/36001/%C2%BFC%C3%B3mo%20uso%20argumentos%20de%20comando%20con%20Cmnd_Alias%20%E2%80%8B%E2%80%8Ben%20sudoers%3F.png)
¿Cómo especifico argumentos de comando en sudoers? En segundo plano, aws
el 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, sudo
busca 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/cmd2
puede ser cualquier otro comando.
El propósito de ECHO_CMD
es presentar quién sudo echo X A
solicitará una frase de contraseña, mientras que sudo echo A X
no, 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-remove
ejecutarlo sin contraseña, pero si especifica un nombre .deb, apt install
aú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 cat
en lugar de echo
y hay un archivo C
al 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!