LoginSignup
5
5

More than 5 years have passed since last update.

Chefを使ってみる - 実践編(1) ユーザを作成する

Posted at
  • Chef/knife-soloを利用する
  • cookbook名は「add_user」とする
  • 作成するユーザの情報はdatabagへ格納する
  • 鍵認証ssh接続に備え、authorized_keyを配置する

data bagツールをインストールし、ユーザ情報を格納する

data bag インストール

まずはdata bagツールをインストールし、利用できるようにする。


# gem install knife-solo_data_bag
Fetching: knife-solo_data_bag-1.1.0.gem (100%)
Successfully installed knife-solo_data_bag-1.1.0
Parsing documentation for knife-solo_data_bag-1.1.0
Installing ri documentation for knife-solo_data_bag-1.1.0
Done installing documentation for knife-solo_data_bag after 0 seconds
1 gem installed

data bag を作成する

作成するユーザ情報をしまうための箱を準備する
コマンドを実行するとdata_bagsディレクトリの下に「users」ディレクトリが作成される


$ knife solo data bag create users
$ ls data_bags/
users

作成するユーザの情報を作成し、保存する

ユーザ情報をjsonに記載して、data_bags/users配下へ保存する
コマンドを実行するとそのまま編集モードになるので、編集実施


$ export DISPLAY=vi
$ knife solo data bag create users hogehoge
hogehoge.json
{
  "id": "hogehoge",
  "groups": [
    {
      "name": "hogehoge",
      "gid": 2001
    }
  ],
  "users": [
    {
      "name": "hogehoge",
      "home": "/home/hogehoge",
      "shell": "/bin/nologin",
      "uid": 2001,
      "gid": 2001
    }
  ]
}

作成するユーザ分同様にjsonを作成する

Cookbookを作成し、Recipeなどを編集していく

cookbookを作成する


$ knife cookbook create add_user -o site-cookbooks
DL is deprecated, please use Fiddle
ffi-yajl/json_gem is deprecated, these monkeypatches will be dropped shortly
** Creating cookbook add_user
** Creating README for cookbook: add_user
** Creating CHANGELOG for cookbook: add_user
** Creating metadata for cookbook: add_user

Recipeを編集する

  • ユーザのホームディレクトリは/home
    ただし、/homeは/var/homeへのシンボリックリンク
    なので、/var/homeを作成し、/homeのシンボリックリンクを作成する
  • knife-solo実行ユーザは、予め「/opt/home」をホームディレクトリとして作成済み
site-cookbooks/add_user/recipes/default.rb
# /var/homeディレクトリ作成
# /var/homeの存在確認をnot_ifにて実施
directory "/var/home" do
  owner "root"
  group "root"
  mode  "0777"
  action :create
  not_if { File.exists? "/var/home" }
end

# /home削除
# /homeの存在確認をnot_ifにて実施
directory "/home" do
  action :delete
  not_if "test -L /home"
end

# シンボリックリンクを作成
# /homeの存在確認をnot_ifにて実施
link "/home" do
  to "/var/home"
  not_if "test -L /home"
end


# ユーザ作成
# data_bag/users配下にあるjsonすべてを読みに行く
data_ids = data_bag('users')

data_ids.each do |id|
  item = data_bag_item('users',id)

 item['groups'].each do |g|
    group g['name'] do
      gid g['gid']
      action :create
    end
  end

  item['users'].each do |u|
    user u['name'] do
      home  u['home']
      shell u['shell']
      password u['password']
      uid   u['uid']
      gid   u['gid']
      supports :manage_home => true
      action :create
    end
    directory "/#{u['home']}/.ssh" do
      owner u['uid']
      group u['gid']
      mode  '0700'
      action :create
    end
    # ssh_authorized_keys を配置
    # site-cookbooks/add_user/files/default/に鍵を配置しておく
    cookbook_file "/#{u['home']}/.ssh/authorized_keys" do
      source "#{u['name']}_authorized_keys"
      action :create
      owner  u['uid']
      group  u['gid']
      mode   '0600'
    end
  end
end

# wheelグループへのユーザ追加
# attributeへ対象ユーザを記載する
group 'wheel' do
  group_name 'wheel'
  members node['add_user']['wheel']
  action :modify
end

authorized_keyの配置

authrize_keyを利用しないユーザの場合でも、空ファイルを配置しておく


$ ls site-cookbooks/add_user/files/default/
hogehoge_authorized_keys  fugafuga_authorized_keys

Attributeへ変数定義

wheelグループへ追加するユーザを外出し変数として設定する

site-cookbooks/add_user/recipes/default.rb
default['add_user']['wheel'] = ['root','hogehoge','fugafuga']

nodeオブジェクトを編集し、実際に試してみる

nodeオブジェクト編集

nodes/Test-hogehoge.json
{
    "run_list": [
      "recipe[add_user]"
    ]
}

実行してみる


$ knife solo cook -i ~/.ssh/usr-fugafuga.pem usr-fugafuga@remote-hogehoge

usr-fugafugaがプロビジョニング用のユーザ
クライアント側ではユーザの作成とsudo設定が完了している

5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5