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 권한을 설정하고 이를 루트에 할당했지만 -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")

왜 이런거야? 사용자가 호출할 수 있지만 루트로 실행되도록 하려면 어떻게 해야 합니까?

답변1

다른 sudo 권한 없이 일반 사용자로 이 스크립트만 실행하거나 비밀번호를 입력하지 않고 sudo로 실행하려면 sudoers에 추가할 수 있습니다.

예를 들어 sudo echo "[username] ALL = NOPASSWD: /path/to/your/script" >/etc/sudoers.d/myscript

그러나 누군가가 귀하의 사용자로서 이 스크립트를 편집할 수 있다면 비밀번호를 몰라도 sudo로 어떤 명령이든 실행할 수 있으므로 사용 시 주의하시기 바랍니다.

스크립트가 루트 소유이고 쓰기 권한이 소유자에게만 있으므로 다른 사람이 변경할 수 없는지 확인하세요.

chattr또한 누구도 스크립트를 수정할 수 없도록 할 수도 있습니다 .

sudo chattr +i script.sh

에서 man chattr:

'i' 속성이 있는 파일은 수정할 수 없습니다. 삭제하거나 이름을 바꿀 수 없으며, 이 파일에 대한 링크를 만들 수 없으며 파일에 데이터를 쓸 수 없습니다.

결국 그냥 실행하면 sudo myscript비밀번호를 묻지 않고 루트 권한으로 실행해야 합니다.

관련 정보