質問: sudoでコマンドを実行させるスクリプトhoge.shを書いています。 ``` #!/bin/bash -v sudo ln -s /System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport /usr/bin/airport sudo airport sniff 6 ``` 下記のように他のshから下記のように呼び出したいため、 管理者パスワード入力をせずに「airport sniff」を実行できるようにしたいのですが 方策はございませんでしょうか。 ``` #!/usr/bin/ MSG=`hoge.sh` echo $MSG ``` expectでパスワードをハードコーディングで流し込む方法も考えたのですが セキュリティ的に躊躇しております。 なお、一般ユーザのままコマンドを実行すると、下記のようなエラーが出ます。 ``` $ 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)). ```
回答: `sudo`で特定のコマンドをパスワード無しで実行することを許可するには、`/etc/sudoers`に次のように記載してください。 ``` username ALL=(ALL) NOPASSWD: /pass/to/cmd,/pass/to/cmd ``` usernameはそのまんまユーザー名です。代わりに%groupnameでグループを指定することもできます。 一つ目のALLはホストの制限、二つ目のALLは変身できるユーザーやグループの制限です。より制限を厳しくするにはこれらも設定するとよいでしょう。詳細は`man sudoers`を参照してください。 なお、`/etc/sudoers`は直接編集せずに、 ``` $ sudo visudo ``` で編集してください。書式を誤ってもチェックしてくれます。 また、OS Xであればデフォルトで ``` %admin ALL=(ALL) ALL ``` が入ってると思います。これを消さないように。 `/etc/sudoers`の編集を誤ると`sudo`できなくなります。`sudo`できないと`/etc/sudoers`が編集できなくて詰みます。