suid で MAC を変更するスクリプトが機能しない

suid で MAC を変更するスクリプトが機能しない

ユーザーとして実行して 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パスワードを要求されることなく、ルート権限で実行されるはずです。

関連情報