256bitの殺人メニュー

インフラエンジニアだったソリューションアーキテクトなくわののブログ。こちらのBlogは個人の意見となっていて会社とは全く関係ありません。お約束です。[twitter:@kuwa_tw]めんどくさがりが重い腰を上げて何かをアウトプットすることにどれほどの意味があるのかを試してみたいブログでもある。

capistrano, tomahawk などから sudo ができなかった場合に確認する項目

どもども。小ネタ投げまくりモードですよ。
capistrano, tomahawkなどのような複数サーバにコマンドを投げるソリューションを使用する場合にこのようなエラーメッセージが出てsudoできない場合があります。

sudo: no tty present and no askpass program specified


こちらですが、/etc/sudoers*1にvisiblepwの設定が入ってないために怒られてます。

       visiblepw       デフォルトでは、ユーザがパスワードを入力しなければならないときに、使用しているターミナルでエコーの抑制ができなかったら、
                       sudo は実行を拒否するようになっている。これに対し、 visiblepw フラグが設定されていると、パスワードがスクリーンに表示され
                       てしまう場合でも、sudo はプロンプトを出して、パスワードを求める。この動作によって、 rsh(1) は tty を割り当てないにもかか
                       わらず、 "rsh somehost sudo ls" といった操作の実行が可能になるわけだ。このフラグはデフォルトでは off である。

ということなので、入力したパスワードが見られる環境ではsudoは使わせないゾ!っていうセキュリティオプションな訳ですね。
でもこれが無効になっていると、 capistrano, tomahawk環境でのsudoができなくなってしまうので、これが無効になっている、/etc/sudoersに以下のように書かれているかどうかを確認*2して、

Defaults !visiblepw

を、

Defaults visiblepw

のようにする事で、sudoできるようになります。

確認方法

確認方法はsudo -lで。

# sudo -l
Matching Defaults entries for root on this host:
visiblepw, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR LS_COLORS MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE LC_COLLATE
LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY"

User root may run the following commands on this host:
(ALL) ALL
(ALL) ALL

それでは、レッツエンジョイsudoer'sライフ!

追記

CentOS6だと、sudoパスワードプロンプトが変更になっているため、expect等を使っている環境では動かない場合もあります。

$ sudo whoami
[sudo] password for kuwano:

その場合は、

Defaults passprompt = "Password: " 

の設定をいれることで以前と同じプロンプトになります。

$ sudo whoami
Password:
root


Linuxエンジニア養成読本 [仕事で使うための必須知識&ノウハウ満載!] (Software Design plus)

Linuxエンジニア養成読本 [仕事で使うための必須知識&ノウハウ満載!] (Software Design plus)

*1:visudoで更新してネ!

*2:CentOS6でもデフォルトoff設定