скрипт для смены MAC с suid не работает

скрипт для смены MAC с suid не работает

Мне нужен скрипт, который можно запустить от имени пользователя, который изменит MAC-адрес eth0. Я придумал следующий скрипт:

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

Я установил разрешение setuid и назначил его пользователю root: -rwsr-xr-x 1 root root 110 May 24 14:22 ChangeMac.sh но при запуске от имени пользователя он все равно выдает следующий вывод:

$ ./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")

Почему так? Как сделать так, чтобы пользователь мог вызывать его, но он выполнялся от имени root?

решение1

Если вы хотите иметь возможность запускать этот и только этот скрипт как обычный пользователь без каких-либо других прав sudo или хотите запускать его с sudo без ввода пароля, вы можете добавить их в свои sudoers.

например sudo echo "[username] ALL = NOPASSWD: /path/to/your/script" >/etc/sudoers.d/myscript

Однако это не очень безопасно, так как если кто-то сможет редактировать этот скрипт как ваш пользователь, он сможет запустить любую команду как sudo, не зная вашего пароля, поэтому будьте осторожны при его использовании.

Просто убедитесь, что скрипт принадлежит пользователю root и права на запись есть только у его владельца, чтобы никто другой не мог его изменить.

Вы также можете использовать chattr, чтобы убедиться, что никто не сможет изменить ваш скрипт:

sudo chattr +i script.sh

От man chattr:

Файл с атрибутом «i» не может быть изменен: его нельзя удалить или переименовать, на этот файл нельзя создать ссылку и в него нельзя записать данные.

После всего этого просто запустите его sudo myscript, и он должен работать с правами root, не спрашивая пароль.

Связанный контент