다양한 무선 인터페이스를 처리하는 내 사용자 계정으로 실행되는 스크립트가 있습니다. 무선 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) 매뉴얼 페이지.