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)
- 作者: SoftwareDesign編集部
- 出版社/メーカー: 技術評論社
- 発売日: 2011/04/08
- メディア: 大型本
- 購入: 14人 クリック: 190回
- この商品を含むブログ (24件) を見る