我需要一个可以以用户身份运行的脚本,该脚本将修改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 身份执行?
如果您希望能够以普通用户身份仅运行此脚本而没有任何其他 sudo 权限,或者您想使用 sudo 运行它而不输入密码,您可以将它们添加到您的 sudoers。
例如
sudo echo "[username] ALL = NOPASSWD: /path/to/your/script" >/etc/sudoers.d/myscript
但是,这有点安全,因为如果有人可以以您的用户身份编辑此脚本,他们可以在不知道您的密码的情况下以 sudo 身份运行任何命令,因此请小心使用它。
只需确保脚本由 root 拥有,并且写入权限仅在其所有者处,因此其他人无法更改它。
您还可以使用
chattr
以确保没有人可以修改您的脚本:来自
man chattr
:毕竟,它只是运行
sudo myscript
,它应该以 root 权限运行它而不要求输入密码。