5343


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]


CC BY-SA 3.0
2015-01-26T10:09:29.863
5328
2018-10-10T01:55:52.207
2018-10-10T01:55:52.207
3060
7590
question
macos bash sudo
bashで一部のsudoコマンドだけ、一般ユーザーでも実行可能にしたい


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

* * *

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


CC BY-SA 3.0
2015-01-26T10:31:14.793
5330
2015-01-26T11:08:18.317
2015-01-26T11:08:18.317
2383
5328
answer


一般的なコマンドであれば、suidを設定するのがよくされます。

[code]

    chown root:root airport
    chmod u+s airport
    
[/code]

とか・・・  
場合によってはセキュリティリスクが生まれるため要注意です。


CC BY-SA 3.0
2015-01-26T11:34:54.430
5332
2015-01-26T11:34:54.430
6092
5328
answer


`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`が編集できなくて詰みます。


CC BY-SA 3.0
2015-01-26T13:34:42.510
5343
2015-01-26T13:34:42.510
5793
5328
answer