Esta pregunta es totalmente general y no solo se aplica a mi situación, sino que ... Tengo un pequeño dispositivo busybox donde quiero que un usuario no root pueda ejecutar un script en particular con privilegios de root. Por ejemplo, algo así como este pequeño script para habilitar DHCP, donde la única variable ( $1
) para enviar en la línea de cm (!!) es qué nombre de host enviar:
#!/bin/bash
udhcpc -b -i eth0 -h $1
ejecutar udhcpc de esta manera requiere acceso de root, por lo que para hacer esto planeo modificar /etc/sudoers
para contener esta línea:
joe ALL = NOPASSWD: /path/to/enable_dhcp.sh
que debería permitir que "joe" ejecute fácilmente ese script con privilegios de root simplemente ejecutando:
sudo /path/to/enable_dhcp.sh
y no se me pide una contraseña (que es lo que quiero, ya que quiero que Joe pueda escribir esto).
Ahora ... sé (o al menos creo que lo hago) que usar $1
un script que se puede ejecutar fácilmente con privilegios de root es una idea HORRIBLE ya que puedes inyectar lo que quieras en eso.
Entonces ... ¿cuál es la mejor manera de lidiar con esto? ¿Cómo dejo que Joe haga lo que quiero con los privilegios de root, permitirle pasar una variable (o efectivamente hacerlo como con una variable de entorno), sin estar abierto a ataques de inyección?
Debe hacer coincidir la entrada pasada con un patrón conocido.
Por ejemplo, parece que una dirección IP podría ser una entrada válida para usted. Entonces podrías usar algo como esto:
Tenga en cuenta que regexp no ha sido probado, usted es responsable de asegurarse de que su regexp no permita nada peligroso.
fuente