Debian wheezy에서 iwconfig를 suid하는 방법은 무엇입니까?

Debian wheezy에서 iwconfig를 suid하는 방법은 무엇입니까?

다양한 무선 인터페이스를 처리하는 내 사용자 계정으로 실행되는 스크립트가 있습니다. 무선 LAN 등을 지능적으로 끄거나 켭니다. 그러나 장치 전원을 켜고 끄는 및 iwconfig와 같은 도구를 호출하여 이를 수행합니다 . hciconfig그러나 여기에는 수퍼유저 권한이 필요하기 때문에 개인 스크립트 폴더에 이 바이너리의 복사본을 만들고 suid 플래그를 설정하기로 결정했습니다(해당 디렉토리를 읽고 실행할 수 있는 유일한 사람은 나입니다). 따라서 이러한 바이너리에 대한 권한은 내 기본 그룹 -rwsr-x---에 속한 것처럼 보입니다.root

그러나 이 바이너리를 실행하면 다음과 같은 결과가 나오므로 suid 비트는 완전히 무시되는 것 같습니다.

me@host:~/scripts/suid$ stat iwconfig
  File: `iwconfig'
  Size: 26968       Blocks: 72         IO Block: 4096   regular file
Device: 15h/21d Inode: 4194732     Links: 1
Access: (4750/-rwsr-x---)  Uid: (    0/    root)   Gid: ( 1000/   me)
Access: 2011-08-24 04:15:39.008148182 +0200
Modify: 2013-02-09 21:25:47.777488386 +0100
Change: 2013-03-12 15:55:20.765681857 +0100
 Birth: -
me@host:~/scripts/suid$ ./iwconfig wlan0 txpower off
Error for wireless request "Set Tx Power" (8B26) :
    SET failed on device wlan0 ; Operation not permitted.

또한 그룹을 루트, guid 비트로 설정하고 바이너리를 실행 가능하고 읽을 수 있게 만들려고 했습니다. 결과는 동일합니다.

그렇다면 왜 이런가요? 어떻게 해결할 수 있나요?

답변1

홈 디렉토리에 이미 이 nosuid플래그가 설치되어 있을 수 있습니다. 를 보면 이를 확인할 수 있습니다 /proc/mounts. 어떤 파일 시스템에 홈 디렉토리가 포함되어 있는지 확실하지 않은 경우에는 df ~이를 알려줍니다(그러면 grep을 사용하여 쉽게 찾을 수 있습니다 /proc/mounts).

그러나 더 나은 옵션은 NOPASSWD이 플래그와 함께 sudo를 사용하는 것입니다. 예를 들어 루트로 실행 visudo -f /etc/sudoers.d/local-iwconfig하고 다음과 같은 줄을 추가합니다.

your-user-name ALL=(root) NOPASSWD: /sbin/iwconfig

sudo를 사용하여 추가로 잠글 수도 있습니다. 예를 들어, 인수를 포함하여 실행할 전체 명령줄을 지정할 수 있습니다(그런 다음 각 명령줄에 대해 하나씩 여러 항목을 가질 수 있음). 자세한 내용은 확인해주세요sudoers(5) 매뉴얼 페이지.

관련 정보