本 cookbook 提供了众多与安全相关的配置,提供全面的基础保护。
它配置:
pam 和 pam_limits 模块它不会:
['os-hardening']['components'][COMPONENT_NAME] - 允许通过默认 recipe 精细控制应执行哪些组件。详见下文['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。你可以通过在 override 级别设置 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
在当前实现中,不同组件位于不同的 recipes 中。有关可能的组件名称,请参阅可用的 recipes 或 default.rb。
将 recipes 添加到 run_list,它应该放在最后:
"recipe[os-hardening]"
配置属性:
"security" : {
"kernel" : {
"enable_module_loading" : true
}
},
请安装 chef-dk、VirtualBox 或 VMware Workstation 以及 Vagrant。
使用 rubocop 和 foodcritic 检查代码风格:
$ chef exec rake lint
.....
单元/规范测试使用 chefspec 完成:
$ chef exec rake spec
.....
集成测试使用 test-kitchen 和 inspec 完成:
$ chef exec rake kitchen
.....
# 或者你可以直接使用 kitchen
$ kitchen test
你可以在 Travis CI 中启用对 fork 的测试。默认情况下,你将获得使用 kitchen-dokken 的代码风格检查、规范测试和集成测试。
使用 kitchen-dokken 的集成测试并不能覆盖所有内容,因为它们运行在容器环境中。 可以使用 DigitalOcean 执行完整的集成测试。
如果你希望为 fork 运行完整的集成测试,则需要在 fork 的设置中添加以下环境变量:
DIGITALOCEAN_ACCESS_TOKEN - DigitalOcean 的访问令牌CI_SSH_KEY - 某个 ssh 密钥的私钥部分,可用于 DigitalOcean 上的实例,以 base64 编码形式提供(例如 cat id_rsa | base64 -w0 ; echo)DIGITALOCEAN_SSH_KEY_IDS - CI_SSH_KEY 在 DigitalOcean 中的 ID,更多信息请参阅此处本 cookbook 主要基于以下指南:
感谢你们所有人!!
请参阅贡献者指南。
根据 Apache 许可证 2.0 版(“许可证”)授权; 除非遵守许可证,否则你不得使用此文件。 你可以在以下位置获取许可证副本:
http://www.apache.org/licenses/LICENSE-2.0
除非适用法律要求或书面同意,否则根据许可证分发的软件按“原样”分发, 不附带任何明示或暗示的保证或条件。 请参阅许可证以了解特定语言下的权限和限制。
['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
如果你希望在 PAM 中使用 passwdqc 进行强密码检查,则为 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'
设置为 unmanaged 以保持 selinux 配置不变。设置为 enforcing 以强制执行,或设置为 permissive 以使用宽松模式。