Мне нужен скрипт, который может быть запущен как пользователь, который изменит 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 разрешение и присвоил его для укоренения: -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")
Почему это? Как я могу сделать его так, чтобы пользователь мог вызвать его, но это выполняется как корень?
Если Вы хотите смочь выполнить это и только этот сценарий как обычный пользователь без каких-либо других sudo прав, или Вы хотите работать, он с sudo без пароля, вводящего Вас, может добавить их к Вашему sudoers.
, например, sudo echo "[username] ALL = NOPASSWD: /path/to/your/script" >/etc/sudoers.d/myscript
Однако это - вид meh в безопасности с тех пор, если кто-то может отредактировать этот сценарий как Ваш пользователь, они могут выполнить любую команду как sudo, не зная Вашего пароля, так заботьтесь в использовании его.
Просто удостоверяются, что сценарий принадлежит корню, и запишите, что права только в, он - владелец, таким образом, никто больше не может изменить его.
можно также использовать chattr
, чтобы удостовериться, что никто не может изменить сценарий:
sudo chattr +i script.sh
От man chattr
:
файл А со 'мной' приписывает, не может быть изменен: это не может быть удалено или переименовано, никакая ссылка не может быть создана в этот файл, и никакие данные не могут быть записаны в файл.
После всего, что просто работает sudo myscript
и это должно выполнить его с корневыми правами, не прося пароль.