- 更新日: 2014年8月6日
- Vagrant & Chef
SELinux を有効にする Serverspec テスト + Chef Recipe 作成
SELinux を有効化するための、Serverspec テスト + Chef Recipe の作成を行いました。
このエントリーは、CentOS サーバー設定用 Chef Cookbook/Recipe の目次 の一部です。
Serverspec でテストを作成しテストが失敗するのを確認
いつも通り、まずは Serverspec でテストを作成。
spec/centos.vagrant/base_selinux_enforcing_spec.rb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
require 'spec_helper' # SELinux should be enforcing describe selinux do it { should be_enforcing } end describe file('/etc/selinux/config') do it { should be_file } it { should be_owned_by 'root' } it { should be_grouped_into 'root' } it { should be_mode 644 } its(:content) { should match(/^SELINUX=enforcing$/) } its(:content) { should match(/^SELINUXTYPE=targeted$/) } end |
テスト実行。
1 2 3 4 5 6 7 |
$ bundle exec rspec spec/centos.vagrant/base_selinux_enforcing_spec.rb ... Finished in 4.82 seconds 7 examples, 2 failures ... |
it { should be_enforcing } と its(:content) { should match(/^SELINUX=enforcing$/) } の2箇所がテストに失敗しました。予定通りです。
SELinux を有効にする Recipe を作成
メインの Recipe です。
site-coobooks/base_cookbook/recipes/selinux_enforcing.rb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
selinux_config = "/etc/selinux/config" bash 'move_selinux_config_original' do code <<-EOC mv #{selinux_config} #{selinux_config}.org EOC creates "#{selinux_config}.org" end cookbook_file selinux_config do owner "root" group "root" mode "0644" end |
設定用(/etc/selinux/config)のファイル。
site-coobooks/base_cookbook/files/default/config
1 2 3 4 5 6 7 8 9 10 11 12 |
# This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - SELinux is fully disabled. SELINUX=enforcing # SELINUXTYPE= type of policy in use. Possible values are: # targeted - Only targeted network daemons are protected. # strict - Full SELinux protection. SELINUXTYPE=targeted |
プロビジョニング後、テストが通るのを確認
プロビジョニング実行後、vagrant 仮想マシンを再起動。SELinux 設定の反映には、サーバー再起動が必要です。
1 2 3 4 5 |
$ vagrant provision $ vagrant halt $ vagrant up |
もう一度テスト実行。
1 2 3 4 5 6 7 |
$ bundle exec rspec spec/centos.vagrant/base_selinux_enforcing_spec.rb ....... Finished in 5.5 seconds 7 examples, 0 failures |
今度は全てのテストが通るのを確認できました。
手動で確認。
1 2 3 4 5 6 7 |
$ vagrant ssh [vagrant@localhost ~]$ getenforce Enforcing [vagrant@localhost ~]$ sudo getenforce Enforcing |
ちゃんと SELinux が有効になっています。
Recipe 中で reboot させて発生した問題
最初サーバー再起動も自動化しようとして、以下のように Recipe 中で reboot させていました。こうすると vagrant 仮想マシン上では、初回のプロビジョニングは上手くいくのですが、次回以降のプロビジョニングがエラーになるという問題が発生しました。
1 2 3 4 5 6 7 8 9 10 11 |
execute "server_reboot" do command "reboot" action :nothing end cookbook_file selinux_config do owner "root" group "root" mode 0644 notifies :run, "execute[server_reboot]" end |
まあ Chef 実行中にいきなり再起動させるのだろうから、何かエラーが起こりそうな気はします…。が、エラー原因の詳細は不明。
サーバーの再起動も Recipe の中で行うものなのだろうか?一応コミュニティには、reboot-handler というそれっぽい Cookbook があるのを見つけましたが、これを使うと良いのでしょうかね。どう処理するのが定番なのかもう少し調査してみます。
reboot-handler Cookbook – Chef Supermarket
- Vagrant & Chef の関連記事
- Vagrantで使うVirtualBoxのVM(仮想マシン)を外付けHDDに移動
- Chefで/etc/sysctl.confのkernel.panicを設定
- Chefでtelnetをインストール
- Chefでyumリポジトリを追加する設定
- Chef で iptables の設定
- ChefでSSH接続用の公開鍵をサーバーに設置
- nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
- Chef Recipe でユーザー・グループを作成
- Chef Recipe で CentOS のネットワーク・ホストを設定
- NetworkManager 他不要なパッケージを削除する Chef Recipe
Leave Your Message!