読者です 読者をやめる 読者になる 読者になる

It’s now or never

IT系の技術ブログです。気になったこと、勉強したことを備忘録的にまとめて行きます。

さくらVPSにOSをインストールしてroot以外のUserを作成する

  • さくらVPSで新規に環境をインストールしたときにroot以外の作業ユーザーを構築する方法をメモ
  • 環境構築には、Chef zero(Knife zero)を使用する

1.さくらVPSにOSをインストール

スクリーンショット 2017-03-19 10.34.38.png

今回は、CentOS7を選択

rootで接続できるか確認

ssh -p 22 root@<IPアドレス>

※さくらVPS上のコンソールからrootでログインできるかを確認してもOK

2.Chefの環境を構築

  • Chef自体のもろもろの設定についての説明は割愛する
    • Chefの設定は色々難しいので間違っているかもしれない…

Chefのツールのインストール

chef gem install knife-zero

Chefのリポジトリ作成

chef generate repo <chef-repo_name>

knifeの設定ファイル作成

knife configure
  • ~/.chef配下にknife.rbができる
vim .chef/knife.rb
  • ローカルプロジェクトの設定
local_mode true
log_level                :info
log_location             STDOUT
chef_repo_dir = File.absolute_path( File.dirname(__FILE__) + "/.." )
cookbook_path ["#{chef_repo_dir}/cookbooks", "#{chef_repo_dir}/site-cookbooks"]
node_path     "#{chef_repo_dir}/nodes"
role_path     "#{chef_repo_dir}/roles"

リモートサーバーのknife zeroを初期化

knife zero bootstrap <IPアドレス> --ssh-user root --node-name reter-product

※ 途中rootのパスワードを聞かれるため、手順1で設定したパスワードを入力

  • 作成が成功するとプロジェクト配下のclients/nodes/配下にリモートnodeの設定ファイルが作成される

3.ユーザーを作成する

  • ユーザーの作成は、サードパーティのcookbookを使用する
  • cookbookの管理にはBerkshelfを使用する

外部cookbookのインストール

vim Berksfile

site :opscode
cookbook 'user'
chef exec berks vendor ./cookbooks
  • userというcookbookはLWRPという方法でuserの作成を提供しており準じた形式で記述するだけでユーザーを簡単に作成できる

ログインユーザー用のssh-keyを作成

ssh-keygen -t rsa -b 4096 -f <ファイル名>
  • 作業ユーザーのssh用のキーを作成

user作成用のcookbookの作成

cd site-cookbooks
chef generate cookbook site-user
vim site-cookbooks/site-user/recipes/default.rb
user_account '<作成するユーザー名>' do
  action :create
  ssh_keys  ['
ssh-rsa ... 
'] # 作成したsshの公開鍵を指定する
end

本番用のロールを作成

vim roles/initial_setting.json
{
    "name": "initial_settings",
    "description": "This is initial recipes.",
    "chef_type": "role",
    "json_class": "Chef::Role",
    "default_attributes": {
    },
    "override_attributes": {
    },
    "run_list": [
        "recipe[user]",
        "recipe[site-user]"
    ]
}
  • 実行するレシピをnodeファイルごとに制御するのは、大変なのでロールに分けておく
  • roleのrun_listには、インストールした外部cookbookであるuserと自作したsite-userを追加する
    • 実行順序はuserが先

ロールをnodeに追加

knife node run_list add <bootstrapのときに作成されたnode名> 'role[initial_settings]'

リモートサーバーに反映

knife zero converge "name:reter-production" --ssh-user root

sshでログインできるか確認

ssh <ユーザー名>@<サーバーIP> -i <sshの秘密鍵>
  • ログインできていれば正しくユーザーが作成されている

作成したユーザーのSudo権限を許可

レシピをダウンロード

vim Berksfile
site :opscode
cookbook 'user'
cookbook 'sudo' # 追加
chef exec berks vendor ./cookbooks

環境設定のファイルを作成

chef exec knife environment create production -e vim
  • ユーザー個別の設定は、環境依存のため設定ファイルを作成

sudo設定を記載

vim environments/production.json
{
    "name": "production",
    "description":"Production User and Parmission",
    "chef_type": "environment",
    "json_class": "Chef::Environment",
    "default_attributes": {},
    "override_attributes": {
        "authorization": {
            "sudo": {
                "users": ["<sudo権限を与えるユーザー>"],
                "passwordless": "true"
            }
        }
    }
}

nodeファイルを編集して環境をproductionに変更する

chef exec knife node edit reter-production -e vim

設定を反映

knife zero converge "name:<ロール名>" --ssh-user root

sudoを実行できるか確認

ssh <ユーザー名>@<サーバーIP> -i <sshの秘密鍵>
sudo vim /etc/sudoers
  • 設定したuserにsudo設定がされていればOK