成らぬは人の為さぬなりけり

エンジニアライフをエンジョイする為のブログ

Chef-solo+knife-solo+Vagrantでサーバ構築を自動化してみる - その2 sudoers

さて、前回に引き続き、
今日はsudoersをいじってみようと思います。

※環境は前回と同じです。

今回までのコードは、以下においてあります。

yagince/chef-sample · GitHub

今回の流れ

  1. Berksfileをいじる
  2. berks install
  3. jsonファイルで設定を書く
  4. サーバに適用する

今日はシンプル。

Berksfileをいじる

まずは、Berksfileってなやねん、と。
Berkshelfっていうツールで使う、依存関係を定義するファイルっぽい。
サードパーティのcookbookをBundler風に扱う事ができるツールらしいです。

Berkshelf
Chef Soloの正しい始め方 | tsuchikazu blog
chef - Berkshelfを試してみる - Qiita [キータ]

基本的にはopscodeから取ってくるみたいですが、
githubのURLを直接指定することもできます。

今回はopscodeのやつを使います。

Berksfile

site :opscode

cookbook 'sudo'

berks install

前回のbundle install時にberksコマンドも一緒にインストールされているはず。
なので、そのまま叩きます。

$ bundle exec berks install --path cookbooks
Using sudo (2.1.4)

jsonファイルで設定を書く

前回同様、nodes/chef-test.jsonに設定を書きます。
どんなパラメータがあるのかは、
opscode-cookbooks/sudo · GitHub
この辺を見ると良いかと。

今回は、前回作成したユーザーをsudoersに入れたいので、以下のようにしました。

{
    "users": [
        { "name": "yagi", "group": "deploy"},
        { "name": "deploy", "group": "deploy"}
    ],
    "authorization": {
        "sudo": {
            "groups": ["vagrant", "deploy"],
            "users": ["vagrant", "deploy", "yagi"],
            "passwordless": true,
            "sudoers_defaults": [
                "env_reset",
                "mail_badpass",
                "secure_path=\"/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\""
            ]
        }
    },
    "run_list":[
        "recipe[users]",
        "recipe[sudo]"
    ]
}

※sudoers_defaultはubuntuのデフォルトがそんな感じで設定されてたので、合わせました。
追加、ではなく、まるっと書き換えるので、vagrantのデフォルトユーザーも入れておきました。

サーバに適用する

それでは、実行してみましょう。

$ bundle exec knife solo cook chef-test

OK。では、サーバに入って確認。
(実際はログで差分が見れているはずですが)

$ ssh chef-test
$ sudo visudo
# This file is managed by Chef.
# Do NOT modify this file directly.

Defaults      env_reset
Defaults      mail_badpass
Defaults      secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

# User privilege specification
root          ALL=(ALL) ALL

vagrant   ALL=(ALL) NOPASSWD:ALL
deploy   ALL=(ALL) NOPASSWD:ALL
yagi   ALL=(ALL) NOPASSWD:ALL

# Members of the sysadmin group may gain root privileges
%sysadmin     ALL=(ALL) NOPASSWD:ALL

# Members of the group 'vagrant' may gain root privileges
%vagrant ALL=(ALL) NOPASSWD:ALL
# Members of the group 'deploy' may gain root privileges
%deploy ALL=(ALL) NOPASSWD:ALL

今回はパスワードなしでsudoできるようにしたので、こんな感じになりました。
ちゃんとvagrantユーザーもsudoできてます。

まとめ

めんどくさがり&あるものを使う派なので、サードパーティのcookbookを使ってみました。
次回は、chefの入門でよく見るnginxのインストールをやりたいと思います。