さまざまなワイヤレスインターフェイスを処理する私のユーザーアカウントで実行されるスクリプトがあります。無線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.
また、グループをroot、guidビットに設定し、バイナリを実行可能で読み取り可能にしようとしました。結果は同じです。
では、なぜこのようなのでしょうか?どうすれば解決できますか?
答え1
ホームディレクトリにすでにこのnosuid
フラグがインストールされている可能性があります。を見るとこれを確認できます/proc/mounts
。どのファイルシステムにホームディレクトリが含まれているかわからない場合は、df ~
これを知らせます(これはgrepを使用して簡単に見つけることができます/proc/mounts
)。
しかし、より良いオプションは、NOPASSWD
このフラグでsudoを使用することです。たとえば、root として実行し、visudo -f /etc/sudoers.d/local-iwconfig
次の行を追加します。
your-user-name ALL=(root) NOPASSWD: /sbin/iwconfig
sudoを使用してさらにロックすることもできます。たとえば、引数を含む実行するコマンドライン全体を指定できます(その後、各コマンドラインに1つずつ複数のエントリを持つことができます)。詳しくはご確認くださいsudoers(5) のマニュアルページ。