Cygwinから管理者権限でプログラムを実行する

Cygwinから管理者権限でプログラムを実行する方法のメモ。

たとえばCygwin付属のpingコマンドは、ターミナル(minttyなど)が管理者権限で動作していない場合エラーとなってしまう。

$ ping localhost
ping: socket: Operation not permitted

このような場合、cygstartコマンドを次のように使うと管理者権限で実行することができる。

$ cygstart --action=runas /usr/bin/ping localhost

これを利用して、sudoコマンドを定義することもできる。 具体的には、bashrcに次のような記述を追加する。

if [[ -n "$PS1" ]]; then
    __sudo_cygwin() {
        local executable=$(which "${1:-cmd}")
        shift
        /usr/bin/cygstart --action=runas "$executable" "$@"
    }

    if [[ -x "/usr/bin/cygstart" ]]; then
        alias sudo=__sudo_cygwin
    fi
fi

定義したsudoコマンドを使うと、次のようになる。

$ sudo ping localhost

sudo cmdで管理者コマンドプロンプトを起動することもできて便利。

関連リンク