bashで一部のsudoコマンドだけ、一般ユーザーでも実行可能にしたい


sudoでコマンドを実行させるスクリプトhoge.shを書いています。

[code]

    #!/bin/bash -v
    sudo ln -s /System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport /usr/bin/airport
    sudo airport sniff 6
    
[/code]

下記のように他のshから下記のように呼び出したいため、  
管理者パスワード入力をせずに「airport sniff」を実行できるようにしたいのですが  
方策はございませんでしょうか。

[code]

    #!/usr/bin/
    MSG=`hoge.sh`
    echo $MSG
    
[/code]

expectでパスワードをハードコーディングで流し込む方法も考えたのですが  
セキュリティ的に躊躇しております。

なお、一般ユーザのままコマンドを実行すると、下記のようなエラーが出ます。

[code]

    $ airport sniff 6
    Could not open device en0 (en0: You don't have permission to capture on that device ((cannot open BPF device) /dev/bpf0: Permission denied)).
    
[/code]




`sudo`で特定のコマンドをパスワード無しで実行することを許可するには、`/etc/sudoers`に次のように記載してください。

[code]

    username ALL=(ALL) NOPASSWD: /pass/to/cmd,/pass/to/cmd
    
[/code]

usernameはそのまんまユーザー名です。代わりに%groupnameでグループを指定することもできます。  
一つ目のALLはホストの制限、二つ目のALLは変身できるユーザーやグループの制限です。より制限を厳しくするにはこれらも設定するとよいでしょう。詳細は`man
sudoers`を参照してください。

なお、`/etc/sudoers`は直接編集せずに、

[code]

    $ sudo visudo
    
[/code]

で編集してください。書式を誤ってもチェックしてくれます。

また、OS Xであればデフォルトで

[code]

    %admin ALL=(ALL) ALL
    
[/code]

が入ってると思います。これを消さないように。

`/etc/sudoers`の編集を誤ると`sudo`できなくなります。`sudo`できないと`/etc/sudoers`が編集できなくて詰みます。




シェルスクリプト内ではsudoを用いずに実行して、大元のシェルスクリプト本体を実行するときにsudoしたらダメですか？  
そういう問題では無い？

* * *

一応、`sudoers`を編集することでコマンド単位の許可ができます。  
自分自身ではやったことは無いので、参考siteを載せておきます。  
<http://takuya-1st.hatenablog.jp/entry/20090806/1249554458>

