
このcookbookは、数多くのセキュリティ関連設定を提供し、全体的な基本保護を実現します。
以下の設定を行います:
pam および pam_limits モジュールの設定以下のことは行いません:
['os-hardening']['components'][COMPONENT_NAME] - デフォルトレシピを介して実行されるコンポーネントを細かく制御できます。詳細は以下を参照してください['os-hardening']['desktop']['enable'] = false
デスクトップシステム(Xorg、KDE/GNOME/Unityなど)の場合はtrue['os-hardening']['network']['forwarding'] = false
このシステムがパケット転送を必要とする場合(ルーターなど)はtrue、それ以外はfalse['os-hardening']['network']['ipv6']['enable'] = false['os-hardening']['network']['arp']['restricted'] = true
ARPの通知および応答を制限する場合はtrue、それ以外はfalse['os-hardening']['env']['extra_user_paths'] = []
ユーザーの PATH 変数に追加のパスを追加します(デフォルトは空)。['os-hardening']['env']['umask'] = "027"['os-hardening']['env']['root_path'] = "/"
rootがマウントされている場所['os-hardening']['auth']['pw_max_age'] = 60
パスワードの最大有効期間['os-hardening']['auth']['pw_min_age'] = 7
パスワードの最小有効期間(他のパスワード変更を許可する前)default.rb は、システムのohai自動検出属性に基づいて他のコンポーネントを含めます。例: 非RHELシステムではselinuxを実行しません。この動作をオーバーライドし、オーバーライドレベルで node['os-hardening']['components'] に属性を設定することで、コンポーネントの実行を強制または無効化できます。例
# 一部の属性ファイル
# sysctlとauditdを含めない
override['os-hardening']['components']['sysctl'] = false
override['os-hardening']['components']['auditd'] = false
# selinuxを強制的に含める
override['os-hardening']['components']['selinux'] = true
現在の実装では、異なるコンポーネントは異なるレシピに配置されています。利用可能なレシピまたは default.rb を参照して、可能なコンポーネント名を確認してください。
レシピを run_list に追加します。最後に配置する必要があります:
"recipe[os-hardening]"
属性を設定します:
"security" : {
"kernel" : {
"enable_module_loading" : true
}
},
chef-dk、VirtualBox または VMware Workstation、および Vagrant をインストールしてください。
Lintチェックは rubocop と foodcritic で行われます:
$ chef exec rake lint
.....
ユニット/スペックテストは chefspec で行われます:
$ chef exec rake spec
.....
統合テストは test-kitchen と inspec で行われます:
$ chef exec rake kitchen
.....
# またはkitchenを直接使用できます
$ kitchen test
Travis CI でフォークのテストを有効にできます。デフォルトでは、lint、スペックテスト、および kitchen-dokken による統合テストが実行されます。
kitchen-dokken による統合テストは、コンテナ環境で実行されるため、すべてをカバーするわけではありません。 完全な統合テストは DigitalOcean を使用して実行できます。
フォークで完全な統合テストを実行したい場合は、フォークの設定に以下の 環境変数 を追加する必要があります:
DIGITALOCEAN_ACCESS_TOKEN - DigitalOceanのアクセストークンCI_SSH_KEY - DigitalOceanでインスタンスに利用可能なSSHキーの秘密鍵部分。base64エンコード形式(例: cat id_rsa | base64 -w0 ; echo)DIGITALOCEAN_SSH_KEY_IDS - CI_SSH_KEY のDigitalOceanでのID。詳細はこちらを参照してくださいこのcookbookは主に以下のガイドに基づいています:
皆さんに感謝します!!
貢献者ガイドライン を参照してください。
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
['os-hardening']['auth']['pw_warn_age'] = 7
パスワードの最大有効期間が到来する前に、変更を警告する日数['os-hardening']['auth']['uid_min'] = 1000
useraddによって割り当てられるUIDの下限['os-hardening']['auth']['uid_max'] = 60000
useraddによって割り当てられるUIDの上限['os-hardening']['auth']['gid_min'] = 1000
groupaddによって割り当てられるGIDの下限['os-hardening']['auth']['gid_max'] = 60000
groupaddによって割り当てられるGIDの上限['os-hardening']['auth']['retries'] = 5
アカウントが一定時間ロックされるまでの最大認証試行回数['os-hardening']['auth']['lockout_time'] = 600
認証失敗が多すぎるためにアカウントがロックされた場合に経過する必要がある時間(秒)['os-hardening']['auth']['timeout'] = 60
認証タイムアウト(秒)。この時間が経過するとログインは終了します['os-hardening']['auth']['allow_homeless'] = false
ホームディレクトリのないユーザーのログインを許可する場合はtrue['os-hardening']['auth']['pam']['passwdqc']['enable'] = true
passwdqcを使用してPAMで強力なパスワードチェックを行いたい場合はtrue['os-hardening']['auth']['pam']['passwdqc']['options'] = "min=disabled,disabled,16,12,8"
passwdqcに渡したい任意のオプション行(文字列として)に設定します['os-hardening']['auth']['pam']['passwdqc']['template_cookbook'] = 'os-hardening'
/usr/share/pam-configs/passwdqc ファイルのテンプレートを取得するcookbookの名前に設定します['os-hardening']['auth']['pam']['tally2']['template_cookbook'] = 'os-hardening'
/usr/share/pam-configs/tally2 ファイルのテンプレートを取得するcookbookの名前に設定します['os-hardening']['auth']['pam']['system-auth']['template_cookbook'] = 'os-hardening'
/etc/pam.d/system-auth-ac ファイルのテンプレートを取得するcookbookの名前に設定します['os-hardening']['security']['users']['allow'] = []
ユーザーに許可される操作のリスト。change_user を含めることができます['os-hardening']['security']['kernel']['enable_module_loading'] = true
システム実行中にカーネルモジュールの変更(例: modprobe、rmmod)を許可する場合はtrue['os-hardening']['security']['kernel']['disable_filesystems'] = ['cramfs', 'freevxfs', 'jffs2', 'hfs', 'hfsplus', 'squashfs', 'udf', 'vfat']
ロードがブラックリストに登録されるカーネルファイルシステムモジュールのリスト(例: 未使用で無効化できるもの)。このブラックリストを完全に回避するには [] に設定します['os-hardening']['security']['kernel']['enable_sysrq'] = false['os-hardening']['security']['kernel']['enable_core_dump'] = false['os-hardening']['security']['suid_sgid']['enforce'] = true
SUID/SGIDビットを削減したい場合はtrue。検索対象として設定済みのアイテムリストがありますが、独自のアイテムを追加することもできます['os-hardening']['security']['suid_sgid']['blacklist'] = []
SUID/SGIDビットを削除する必要があるパスのリスト['os-hardening']['security']['suid_sgid']['whitelist'] = []
SUID/SGIDビットを変更してはならないパスのリスト['os-hardening']['security']['suid_sgid']['remove_from_unknown'] = false
blacklist に明示的に設定されていないファイルからSUID/SGIDビットを削除したい場合はtrue。これにより、すべてのChef実行でマウントされたファイルシステムを検索し、デフォルトおよびユーザーのブラックリストに設定されていないSUID/SGIDビットを探します。SUID/SGIDビットが見つかった場合、そのファイルが whitelist にない限り削除されます。['os-hardening']['security']['suid_sgid']['dry_run_on_unknown'] = false
上記の remove_from_unknown と同様ですが、SUID/SGIDビットは削除されません。
ファイルシステムを検索してSUID/SGIDビットを探しますが、ログに出力するだけです。このオプションは、SUID/SGIDビットに対して remove_from_unknown を最初に設定する場合にのみ推奨されます。変更されるファイルを確認し、whitelist と blacklist を調整できるためです。['os-hardening']['security']['packages']['clean'] = true
既知の問題があるパッケージを削除します。['os-hardening']['security']['packages']['list'] = ['xinetd','inetd','ypserv','telnet-server','rsh-server']
削除するパッケージのリスト。デフォルトでは以下のパッケージを削除します:
['os-hardening']['security']['selinux_mode'] = 'unmanaged'
SELinux設定をそのままにしたい場合は unmanaged に設定します。SELinuxを強制するには enforcing、許容モードにするには permissive に設定します。