kmonticolo.ansible_os_hardening
操作系统加固(Ansible角色)
描述
该角色提供了众多与安全相关的配置,提供全面的基础保护。它旨在符合DevSec Linux 基准。
它配置了:
- 包管理,允许仅签名的软件包
- 移除已知有问题的软件包
- 配置
pam
和pam_limits
模块 - Shadow密码套件配置
- 配置系统路径权限
- 通过软限制禁用核心转储
- 限制root用户仅能通过系统控制台登录
- 设置SUID
- 通过sysctl配置内核参数
- 安装和配置auditd
它不会:
- 更新系统软件包
- 安装安全补丁
要求
- Ansible 2.5.0
警告
如果在应用该角色后使用inspec测试机器,请确保将连接用户添加到os_ignore_users
变量中。否则inspec会失败。有关更多信息,请参见问题 #124。
如果您使用Docker / Kubernetes+Docker,需覆盖ipv4 IP转发的sysctl设置。
- hosts: localhost
roles:
- dev-sec.os-hardening
vars:
sysctl_overwrite:
# 启用IPv4流量转发。
net.ipv4.ip_forward: 1
变量
名称 | 默认值 | 描述 |
---|---|---|
os_desktop_enable |
false | 如果这是桌面系统(如Xorg,KDE/GNOME/Unity等),则设置为true |
os_env_extra_user_paths |
[] | 添加额外的路径到用户的PATH 变量(默认为空) |
os_env_umask |
027 | 设置新文件的默认权限为750 |
os_auth_pw_max_age |
60 | 最大密码有效期(设置为99999 可以有效禁用) |
os_auth_pw_min_age |
7 | 最小密码有效期(在允许更改密码之前) |
os_auth_retries |
5 | 允许的最大身份验证尝试次数,超过后账户将被锁定 |
os_auth_lockout_time |
600 | 账户因多次失败的身份验证尝试锁定后的等待时间(秒) |
os_auth_timeout |
60 | 身份验证超时时间(秒),超时后将退出登录 |
os_auth_allow_homeless |
false | 如果允许没有主目录的用户登录则设置为true |
os_auth_pam_passwdqc_enable |
true | 如果希望在PAM中使用强密码检查,则设置为true |
os_auth_pam_passwdqc_options |
"min=disabled,disabled,16,12,8" | 传递给passwdqc的任意选项(作为字符串) |
os_security_users_allow |
[] | 用户被允许执行的操作列表,可能包含change_user |
os_security_kernel_enable_module_loading |
true | 如果希望在系统运行时允许更改内核模块,则设置为true |
os_security_kernel_enable_core_dump |
false | 如果内核崩溃或表现不正常并创建内核核心转储 |
os_security_suid_sgid_enforce |
true | 如果希望减少SUID/SGID位,则设置为true |
os_security_suid_sgid_blacklist |
[] | 应该移除其SUID/SGID位的路径列表 |
os_security_suid_sgid_whitelist |
[] | 不应更改其SUID/SGID位的路径列表 |
os_security_suid_sgid_remove_from_unknown |
false | 如果希望从未在blacklist 中明确配置的任何文件中移除SUID/SGID位,则设置为true |
os_security_packages_clean |
true | 移除已知有问题的软件包,见软件包部分 |
ufw_manage_defaults |
true | 设置为true表示应用所有带有ufw_ 前缀的设置 |
ufw_ipt_sysctl |
'' | 默认情况下,它在/etc/default/ufw中禁用IPT_SYSCTL。如果希望使用ufw覆盖/etc/sysctl.conf值,则将其设置为您的sysctl字典,例如/etc/ufw/sysctl.conf |
ufw_default_input_policy |
DROP | 设置ufw的默认输入策略为DROP |
ufw_default_output_policy |
ACCEPT | 设置ufw的默认输出策略为ACCEPT |
ufw_default_forward_policy |
DROP | 设置ufw的默认转发策略为DROP |
os_auditd_enabled |
true | 设置为false以禁用安装和配置auditd。 |
移除的软件包
我们移除以下软件包:
- xinetd (NSA,第3.2.1章)
- inetd (NSA,第3.2.1章)
- tftp-server (NSA,第3.2.5章)
- ypserv (NSA,第3.2.4章)
- telnet-server (NSA,第3.2.2章)
- rsh-server (NSA,第3.2.3章)
- prelink (open-scap)
被禁用的文件系统
我们禁用以下文件系统,因为它们很可能未被使用:
- "cramfs"
- "freevxfs"
- "jffs2"
- "hfs"
- "hfsplus"
- "squashfs"
- "udf"
- "vfat" # 仅当未使用uefi时
要防止某些文件系统被禁用,请将其添加到os_filesystem_whitelist
变量中。
安装
使用ansible-galaxy安装该角色:
ansible-galaxy install dev-sec.os-hardening
示例剧本
- hosts: localhost
roles:
- dev-sec.os-hardening
更改sysctl变量
如果希望覆盖sysctl变量,可以使用sysctl_overwrite
变量(在旧版本中需要覆盖整个sysctl_dict
)。例如,如果希望将IPv4流量转发变量更改为1
,可以这样做:
- hosts: localhost
roles:
- dev-sec.os-hardening
vars:
sysctl_overwrite:
# 启用IPv4流量转发。
net.ipv4.ip_forward: 1
或者,您可以将Ansible的hash-behaviour更改为merge
,这样您只需覆盖所需的单个哈希。但请注意,改变hash-behaviour将影响您所有的剧本,且不推荐Ansible这样做。
本地测试
本地测试该角色的推荐方式是使用Docker。您需要在系统上安装Docker。请参见开始使用来获取适合您系统的Docker包。
您还可以使用Vagrant和Virtualbox或VMWare在本地运行测试。您需要在系统上安装Virtualbox和Vagrant。请参见Vagrant 下载来获取适合您系统的Vagrant包。在所有测试中,我们使用test-kitchen
。如果您不熟悉test-kitchen
,请查看他们的指南。
接下来安装test-kitchen:
# 安装依赖项
gem install bundler
bundle install
使用Docker测试
# 快速测试一台机器
bundle exec kitchen test default-ubuntu-1404
# 测试所有机器
bundle exec kitchen test
# 用于开发
bundle exec kitchen create default-ubuntu-1404
bundle exec kitchen converge default-ubuntu-1404
使用Virtualbox测试
# 快速测试一台机器
KITCHEN_YAML=".kitchen.vagrant.yml" bundle exec kitchen test default-ubuntu-1404
# 测试所有机器
KITCHEN_YAML=".kitchen.vagrant.yml" bundle exec kitchen test
# 用于开发
KITCHEN_YAML=".kitchen.vagrant.yml" bundle exec kitchen create default-ubuntu-1404
KITCHEN_YAML=".kitchen.vagrant.yml" bundle exec kitchen converge default-ubuntu-1404
有关更多信息,请参见test-kitchen。
贡献者与鸣谢
...
该角色主要基于以下指南:
感谢所有人!
贡献
请参阅贡献者指南。
许可和作者
- 作者:: Sebastian Gumprich
根据Apache许可证第2.0版(“许可证”)授权; 您不得使用此文件,除非符合许可证的规定。 您可以在以下地址获取许可证的副本:
http://www.apache.org/licenses/LICENSE-2.0
除非适用法律要求或书面同意,基于许可证分发的软件是以“原样”基础分发的, 不附带任何形式的保证或条件,无论是明示或暗示的。 有关许可证的具体条款,请参见许可证。