今回も長くなりそうですが、頑張っていきましょう。
前回、初期化した仮想環境を立ち上げましょう。
$ 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 ~]$
長くなったので、続きは次回!
コメント