今回も長くなりそうですが、頑張っていきましょう。
前回、初期化した仮想環境を立ち上げましょう。
$ vagrant up
目標を確認
最初に設定した目標を確認します。
- rootパスワードの変更
- SSH接続の設定変更
- sudoの設定
- 一般ユーザーの追加
- システムのアップデート
- iptablesの設定
- WEBサーバーの設定
- WEBページの設定
- マルチドメインの設定
- PHPの設定
- MySQLの設定
- Postfix/Dovecot/Postfix Adminの設定
userを作成する
ユーザー関係のrecipeを作りたいと思います。
この辺りは、まとめてできそうですね。
- rootパスワードの変更
- 一般ユーザーの追加
rootパスワードの変更
usersというCookbookを作成します。
$ cd ~/vagrantdir/sakuravps/chef-repo
$ knife cookbook create users -o site-cookbooks
rootユーザーのパスワードを変更してみましょう。
~/vagrantdir/sakuravps/chef-repo/site-cookbooks/users/recipes/default.rb
user "root" do
password "XXXXXXXX"
action :modify
end
XXXXXXXXの部分にパスワードを入れていけば良いはずですが、このままでは、上手くいきません。
パスワードをハッシュ化しないとエラーになります。
コマンドラインで、パスワードを作成します。
$ openssl passwd -1 "rootmodify"
$1$11R8tu9P$Mf5AcbOH7Yt.d6eCLWWvc1
ハッシュ化したパスワードをrecipeに書きます。
~/vagrantdir/sakuravps/chef-repo/site-cookbooks/users/recipes/default.rb
user "root" do
password "$1$11R8tu9P$Mf5AcbOH7Yt.d6eCLWWvc1"
action :modify
end
一般ユーザーの追加
ユーザーの追加は、複数のrecipeに使われることが多いので、recipeをまたがることができるdata_bagを使用すると便利です。
~/vagrantdir/sakuravps/chef-repo/data_bags
にaccountディレクトリを追加し、jsonファイルを追加します。
idは要素は、データを見つけるために必須です。
パスワードは、先ほどのように、コマンドラインでを作成します。
~/vagrantdir/sakuravps/chef-repo/data_bags/account/webmaster.json
{
"id":"webmaster",
"name":"morisan",
"password":"$1$FslkrtFw$mfktxyPf7YGFR9jD0CIH70",
"group":"apache"
}
今回は一つだけですが、ファイルを増やすだけで、ユーザー追加できるように、配列で処理します。
data_bagを使うと、その中のディレクトリのファイルを読み込むことができます。
~/vagrantdir/sakuravps/chef-repo/site-cookbooks/users/recipes/default.rb
users = data_bag("account")
users.each do |id|
u = data_bag_item("account",id)
user u["name"] do
password u["password"]
home "/home/#{u["name"]}"
supports :manage_home => true
action :create
end
group u["group"] do
members u["name"]
action :create
end
end
wheelというグループをsudo(root権限でコマンドが実行できる)にしようと考えているので、webmasterをwheelに追加します。
~/vagrantdir/sakuravps/chef-repo/site-cookbooks/users/recipes/default.rb
webmaster = data_bag_item("account","webmaster")
group "wheel" do
members webmaster["name"]
action :create
end
recipeをノードに追加します。
前回、追加したtestbookは、もう使わないので消します。
~/vagrantdir/sakuravps/chef-repo/nodes/sakuravps.json
"run_list": [
"recipe[users]"
],
(略)
それでは確認してみましょう。
$ knife solo prepare sakuravps
$ knife solo cook sakuravps
と書いても良いですが、まとめて行うコマンドでも良いでしょう。
$ knife solo bootstrap sakuravps
ログインして、確認できれば、完了です。
$ ssh sakuravps
[vagrant@localhost ~]$ su morisan
Password:
[morisan@localhost vagrant]$ id
uid=901(morisan) gid=901(morisan) 所属グループ=901(morisan),10(wheel),1000(apache)
[vagrant@localhost ~]$ su -
Password:
[root@localhost ~]# id
uid=0(root) gid=0(root) groups=0(root)
SSH接続の設定
SSHのポートは、デフォルトのままにしておくと、狙われる可能性が非常に高いので、変更します。
また、鍵の設定を行い、少しでもセキュリティを上げます。
- SSH接続の設定変更
sshというCookbookを作成します。
$ knife cookbook create ssh -o site-cookbooks
設定ファイルのダウンロード
仮想環境にログインし、以下のファイルをダウンロードします。
ついでに、日本語の設定をしようと思うので、こちらもダウンロードします。
/etc/ssh/sshd_config
/etc/sysconfig/i18n
Vagrantを使用しているので、/vagrantにファイルをコピーすると、
~/vagrantdir/sakuravps
にファイルが同期されます。
[vagrant@localhost ~]$ sudo cp /etc/ssh/sshd_config /vagrant [vagrant@localhost ~]$ sudo cp /etc/sysconfig/i18n /vagrant
そのファイルを以下の場所に移動させ、erbという拡張子にします。
~/vagrantdir/sakuravps/chef-repo/site-cookbooks/ssh/templates/default
設定ファイルを変更
設定ファイルを変更します。
~/vagrantdir/sakuravps/chef-repo/site-cookbooks/ssh/templates/default/i18n.erb
LANG="ja_JP.UTF-8"
#Port 22の部分を探し、適当な数字に変更すれば良いのですが、テンプレートでは変数が使えるので、それを使用します。
また、SSHからrootログインを無効、公開鍵認証にする設定を入れます。
~/vagrantdir/sakuravps/chef-repo/site-cookbooks/ssh/templates/default/sshd_config.erb
Port <%= node["ssh"]["port"] %>
PermitRootLogin no
PubkeyAuthentication yes
PasswordAuthentication no
鍵の作成
ユーザー名とパスワードでログインできてしまうと、不正ログインされやすくなるので、鍵の設定をします。
鍵の作成には、WinSCPについているPuTTY Key Generatorを使用しました。
私の環境ではインストール済みだったことと、準備ができたあとWinSCPで操作するのが楽なので、こちらにしました。
WinSCP プロジェクト日本語トップページ – SourceForge.JP
PuTTYの実行
インストールが完了したら、
C:\Program Files\WinSCP\PuTTY\puttygen.exe
を実行します。
以下の画像のように設定し、Generateボタンを押します。
マウスを動かすと、ゲージが上がっていきます。
以下の赤枠部分をコピーし、authorized_keys.erbというファイル名で、sshd_config.erbなど同じ場所に置きます。
その後、Kye passphraseとComfirm passphraseに適当なパスワードを入力し、Save private keyボタンを押して、WinSCPで使う鍵を保存します。
~/id_rsa.ppk
メニューのConversionsからExport OpenSSH Kyeを選んで、CygwinからSSHする時に使う鍵を保存しましょう。
~/id_rsa_open.ppk
という感じに保存します。
Cygwinで使う鍵のパーミッションは、以下のように変更しておきましょう。
$ chmod 600 ~/id_rsa_open.ppk
recipe
以下のようにrecipeを書きました。
ここでは、templateでファイルをアップします。
変数を使用しないファイルは、cookbook_fileでも構いません。
service "sshd" do
supports :status => true, :restart => true, :reload => true
action [ :enable, :start ]
end
template "sshd_config" do
path "/etc/ssh/sshd_config"
source "sshd_config.erb"
mode 0600
notifies :reload, "service[sshd]"
end
template "i18n" do
path "/etc/sysconfig/i18n"
source "i18n.erb"
mode 0644
end
users = data_bag("account")
users.each do |id|
u = data_bag_item("account",id)
directory "/home/#{u["name"]}/.ssh" do
owner u["name"]
group u["name"]
recursive true
mode 0700
action :create
end
template "authorized_keys" do
path "/home/#{u["name"]}/.ssh/authorized_keys"
source "authorized_keys.erb"
owner u["name"]
group u["name"]
mode 0600
action :create_if_missing
end
end
sakuravps.jsonに追加するのを、忘れないようにしましょう。
また、上記で設定した変数は、こちらで定義することができます。
~/vagrantdir/sakuravps/chef-repo/nodes/sakuravps.json
"run_list": [
"recipe[users]",
"recipe[ssh]"
],
"ssh":{
"port":61234
},
(略)
これらのrecipeを反映し、ログインしてみましょう。
$ knife solo bootstrap sakuravps
(略)
$ ssh -l morisan 192.168.33.10 -p 61234 -i ~/id_rsa_open.ppk
Enter passphrase for key '/home/morisan/id_rsa_open.ppk':
[morisan@localhost ~]$
長くなったので、続きは次回!
コメント