使用 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 權限運行,而不要求輸入密碼。

相關內容