Preciso de um script que possa ser executado como um usuário que modifique o endereço MAC de eth0
. Eu criei o seguinte script:
#!/bin/bash
/etc/init.d/networking stop
ifconfig eth0 hw ether 00:50:56:98:00:19
/etc/init.d/networking start
Eu defini a permissão setuid e atribuí-a ao root:
-rwsr-xr-x 1 root root 110 May 24 14:22 ChangeMac.sh
mas ainda assim me daria a seguinte saída quando eu a executasse como usuário:
$ ./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 que é isso? Como posso fazer com que um usuário possa invocá-lo, mas seja executado como root?
Se você deseja executar este e apenas este script como um usuário normal sem nenhum outro direito sudo, ou deseja executá-lo com sudo sem digitar a senha, pode adicioná-los aos seus sudoers.
por exemplo
sudo echo "[username] ALL = NOPASSWD: /path/to/your/script" >/etc/sudoers.d/myscript
No entanto, isso é meio seguro, pois se alguém puder editar esse script como seu usuário, poderá executar qualquer comando como sudo sem saber sua senha, portanto, tome cuidado ao usá-la.
Apenas certifique-se de que o script pertence ao root e que os direitos de gravação são apenas do proprietário, para que ninguém mais possa alterá-lo.
Você também pode usar
chattr
para garantir que ninguém possa modificar seu script:De
man chattr
:Depois de tudo isso, basta executá
sudo myscript
-lo e deve executá-lo com direitos de root sem solicitar uma senha.