El script para cambiar MAC con suid no funciona.

El script para cambiar MAC con suid no funciona.

Necesito un script que pueda ejecutarse como usuario y que modifique la dirección MAC de eth0. Se me ocurrió el siguiente script:

#!/bin/bash
/etc/init.d/networking stop
ifconfig eth0 hw ether 00:50:56:98:00:19
/etc/init.d/networking start

Configuré el permiso setuid y lo asigné a root: -rwsr-xr-x 1 root root 110 May 24 14:22 ChangeMac.sh pero aún así me daría el siguiente resultado cuando lo ejecuto como usuario:

$ ./ChangeMac.sh
stop: Rejected send message, 1 matched rules; type="method_call", sender=":1.100" (uid=1000 pid=6746 comm="stop networking ") interface="com.ubuntu.Upstart0_6.Job" member="Stop" error name="(unset)" requested_reply="0" destination="com.ubuntu.Upstart" (uid=0 pid=1 comm="/sbin/init")
SIOCSIFHWADDR: Operation not permitted
start: Rejected send message, 1 matched rules; type="method_call", sender=":1.103" (uid=1000 pid=6753 comm="start networking ") interface="com.ubuntu.Upstart0_6.Job" member="Start" error name="(unset)" requested_reply="0" destination="com.ubuntu.Upstart" (uid=0 pid=1 comm="/sbin/init")

¿Por qué es esto? ¿Cómo puedo hacer para que un usuario pueda invocarlo pero se ejecute como root?

Respuesta1

Si desea poder ejecutar este y solo este script como un usuario normal sin ningún otro derecho de sudo, o desea ejecutarlo con sudo sin escribir contraseña, puede agregarlos a sus sudoers.

p.ej sudo echo "[username] ALL = NOPASSWD: /path/to/your/script" >/etc/sudoers.d/myscript

Sin embargo, esto es un poco normal en términos de seguridad, ya que si alguien puede editar este script como usuario, puede ejecutar cualquier comando como sudo sin conocer su contraseña, así que tenga cuidado al usarlo.

Solo asegúrese de que el script sea propiedad de root y que los derechos de escritura sean solo de su propietario para que nadie más pueda cambiarlo.

También puedes usar chattrpara asegurarte de que nadie pueda modificar tu script:

sudo chattr +i script.sh

De man chattr:

Un archivo con el atributo 'i' no se puede modificar: no se puede eliminar ni cambiar de nombre, no se puede crear ningún vínculo a este archivo y no se pueden escribir datos en el archivo.

Después de todo eso, simplemente ejecútelo sudo myscripty debería ejecutarlo con derechos de root sin solicitar una contraseña.

información relacionada