Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
puppet-os-hardening — 此Puppet模块提供了众多与安全相关的配置,提供全方位的基线防护。 | Kitploit
工具/GitHubGitHub/dev-sec/puppet-os-hardening
云基础设施安全漏洞扫描器配置审计网络安全DevSecOps身份验证
GitHubdev-sec/puppet-os-hardening

puppet-os-hardening

此Puppet模块提供了众多与安全相关的配置,提供全方位的基线防护。

查看仓库
291100141个月前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享
网站

Puppet OS 加固

Puppet Forge Version Puppet Forge Downloads Puppet Forge Endorsement Build Status

目录

  1. 模块描述 - 该模块的功能及其用途
  2. 安装 - os_hardening 入门基础
    • 安装要求
    • 开始使用 os_hardening
  3. 用法 - 配置选项和附加功能
    • Puppet Enterprise 重要提示
    • 参数
    • Hiera 用法
    • 关于需要/不需要的软件包和已禁用的服务的说明
  4. 限制 - 操作系统兼容性等
  5. 开发 - 为模块贡献代码的指南
  6. 测试 - 代码变更的质量门禁
    • 本地测试
    • PDK 测试
    • 集成测试(Docker)
    • 集成测试(DigitalOcean)
    • PR 和 fork 的 CI 测试
  7. 联系我们
  8. 贡献者 + 致谢
  9. 许可证和作者

模块描述

该 Puppet 模块为您的操作系统提供安全的加固配置,是 DevSec 加固框架 的一部分。

安装

安装要求

  • Puppet OpenSource 或 Enterprise
  • 模块 stdlib
  • 模块 sysctl

开始使用 os_hardening

添加此模块后,您可以使用该类:

root@kitploit:~
class { 'os_hardening': }

所有参数都包含在主 os_hardening 类中,因此您只需像这样传递它们:

root@kitploit:~
class { 'os_hardening':
  enable_ipv4_forwarding => true,
}

用法

Puppet Enterprise 重要提示

如果您在 PE 环境中使用此模块,则必须设置 pe_environment = true 否则 puppet 将报错(资源重复)!

参数

  • system_environment = 'default' 定义系统运行的上下文。某些选项不适用于 docker/lxc
  • pe_environment = false 如果您使用 Puppet Enterprise,请将其设置为 true 重要 - 请参阅上文
  • extra_user_paths = [] 向用户的 PATH 变量添加额外的路径(默认为空)。
  • umask = undef useradd / newusers 创建新主目录时使用的 umask(例如 '027')
  • maildir = undef maildir 的路径(例如 '/var/mail')
  • usergroups = true 如果希望每个用户都有独立的组,则为 true,否则为 false
  • sys_uid_min = undef 和 sys_gid_min = undef 覆盖 login.defs 的默认设置
  • password_max_age = 60 密码最大有效期

Hiera 用法

也可以在 Hiera 中设置参数,如下所示:

root@kitploit:~
os_hardening::password_max_age:  90
os_hardening::password_min_age:  0
os_hardening::password_warn_age: 14
os_hardening::unwanted_packages: ['telnet']
os_hardening::ignore_users:      ['git','githook','ansible','apache','puppetboard']

关于需要/不需要的软件包和已禁用的服务的说明

由于 CIS 发行版无关 Linux 基准是系统加固的良好起点, 因此认为有必要实现一种简单的方式来处理那些不需要编写整个模块的一次性情况。

例如,要提高 Debian 系统上的 CIS DIL 合规性,应设置 以下内容:

root@kitploit:~
wanted_packages   => ['ntp'],
unwanted_packages => ['telnet'],
disabled_services => ['rsync'],

NTP 的默认设置对于大多数情况来说实际上已经足够好,因此 并非立即需要实现模块。但是,如果您确实使用模块来控制这些服务,那当然是首选。

限制

该模块已经过测试,应该可以在大多数 Linux 发行版上运行。有关受支持操作系统的完整列表,请参阅 metadata.json

开发

如果您想贡献代码,请遵循我们的 贡献指南。

测试

本地测试

您的系统上应安装 Ruby 解释器。为此目的使用 rvm 可能是个好主意。除此之外,您还必须安装 Puppet Development Kit PDK 和 Docker Community Edition,因为集成测试在 Docker 容器中运行。

对于我们所有的集成测试,我们使用 test-kitchen。如果您不熟悉 test-kitchen,请查看 他们的指南。

PDK 测试

root@kitploit:~
# 语法和 Lint 测试
pdk validate

# 单元测试
pdk test unit

集成测试(Docker)

默认情况下,集成测试将在 docker 容器中运行 - 不幸的是,并非所有测试都可以在容器环境中运行(例如 sysctl 设置)。

root@kitploit:~
# 安装依赖项
gem install bundler
bundle install

# 列出所有测试实例
bundle exec kitchen list

# 在一台机器上快速测试
bundle exec kitchen test ubuntu-16-04-puppet5

# 在所有机器上测试
bundle exec kitchen test

集成测试(DigitalOcean)

要使用 DigitalOcean 进行完整的集成测试,您必须在那里获得一个帐户并设置一些环境变量:

  • KITCHEN_LOCAL_YAML=kitchen.do.yml
  • DIGITALOCEAN_ACCESS_TOKEN - DigitalOcean 的访问令牌
  • DIGITALOCEAN_SSH_KEY_IDS - 您的 ssh 密钥在 DigitalOcean 中的 ID,请参阅 此文档 了解更多信息

ssh 密钥必须命名为 ~/.ssh/do_ci 并添加到您在 DigitalOcean 的配置文件中。 之后,您就可以按照 集成测试(Docker) 中的描述运行测试了。

如果您想在 fork 中使用 Github Actions 运行完整的集成测试,则必须在 fork 的设置中添加这些 环境变量:

  • KITCHEN_LOCAL_YAML=kitchen.do.yml
  • 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,请参阅 此文档 了解更多信息

PR 和 fork 的 CI 测试

您的补丁将自动通过 Github Actions 进行测试。测试摘要可在 Github 上的 PR 中查看,详细信息可在链接的测试中找到。

联系我们

您可以通过多种方式联系我们:

  • Twitter 上的 @DevSecIO
  • 用于提问和一般讨论的邮件列表:[email protected] [订阅]
  • 发布公告的邮件列表(此处无法发帖):[email protected] [订阅]

贡献者 + 致谢

  • Dominik Richter arlimus
  • Edmund Haselwanter ehaselwanter
  • Christoph Hartmann chris-rock
  • Thomas Dütsch a-tom
  • Patrick Meier atomic111
  • Artem Sidorenko artem-sidorenko
  • Kurt Huwig kurthuwig
  • Matthew Haughton 3flex
  • Reik Keutterling spielkind
  • Daniel Dreier danieldreier
  • Timo Goebel timogoebel
  • Tristan Helmich fadenb
  • Michael Geiger mcgege
  • Timo Bergemann LooOOooM

对于 chef-os-hardening 到 puppet 的原始移植:

  • Artem Sidorenko artem-sidorenko
  • Frank Kloeker eumel8

感谢大家!!

许可证和作者

  • 作者:: Dominik Richter [email protected]
  • 作者:: Deutsche Telekom AG

根据 Apache 许可证 2.0 版("许可证")授权; 除非遵守许可证,否则您不得使用此文件。 您可以在以下位置获得许可证副本:

root@kitploit:~
  http://www.apache.org/licenses/LICENSE-2.0

除非适用法律要求或书面同意,否则根据许可证分发的软件 按"原样"分发,不附带任何明示或暗示的保证或条件。 请参阅许可证以了解管理权限和 限制的特定语言。

下载工具
  • password_min_age = 7 密码最小有效期(在允许任何其他密码更改之前)
  • password_warn_age = 7 密码更改到期前的警告天数
  • login_retries = 5 密码错误时的最大登录重试次数(通常由 PAM / auth_retries 覆盖)
  • login_timeout = 60 认证超时时间(秒),超过此时间登录将退出
  • chfn_restrict = '' 普通用户可以使用 chfn 更改哪些字段
  • allow_login_without_home = false 如果允许没有主目录的用户登录,则为 true
  • allow_change_user = false 用户是否可以使用 su 更改其登录身份
  • ignore_users = [] 不应被加固的系统用户帐户数组(禁用密码并将 shell 设置为 /usr/sbin/nologin)
  • folders_to_restrict = ['/usr/local/games','/usr/local/sbin','/usr/local/bin','/usr/bin','/usr/sbin','/sbin','/bin'] 确保组和其他用户对其或其任何内容没有写权限的文件夹
  • ignore_max_files_warnings = false 如果您不希望 puppet 在递归包含 > 1000 个文件的文件夹(例如 /bin /usr/bin)时记录 max_files 和性能警告,则为 true
  • recurselimit = 5 递归权限检查的目录深度
  • passwdqc_enabled = true 如果您希望在 PAM 中使用 passwdqc 进行强密码检查,则为 true
  • auth_retries = 5 帐户被锁定一段时间之前允许的最大认证尝试次数
  • auth_lockout_time = 600 如果帐户因认证失败次数过多而被锁定,需要经过的时间(秒)
  • passwdqc_options = 'min=disabled,disabled,16,12,8' 设置为要传递给 passwdqc 的任何选项行(作为字符串)
  • manage_pam_unix = false 如果您希望此模块管理 pam_unix,则为 true
  • enable_pw_history = true 如果您希望 pam_unix 记住密码历史以防止密码重用,则为 true(需要 manage_pam_unix = true)
  • pw_remember_last = 5 最近密码的数量(例如 5 将阻止用户重用其最近 5 个密码中的任何一个)
  • only_root_may_su = false 当只有 root 和 wheel 组成员可以使用 su 时为 true,CIS 基准合规性要求为 true
  • root_ttys = ['console','tty1','tty2','tty3','tty4','tty5','tty6'] root 注册的 TTY
  • whitelist = [] 如果设置了 SUID/SGID 位,应保留其 SUID/SGID 位的所有文件(将与预定义的文件白名单合并)
  • blacklist = [] 如果设置了 SUID/SGID 位,应移除其 SUID/SGID 位的所有文件(将与预定义的文件黑名单合并)
  • remove_from_unknown = false 如果您希望从任何未在 blacklist 中明确配置的文件中移除 SUID/SGID 位,则为 true。这将使每次 Puppet 运行都搜索已挂载的文件系统,查找未在默认和用户黑名单中配置的 SUID/SGID 位。如果找到 SUID/SGID 位,除非该文件在您的 whitelist 中,否则将被移除。
  • dry_run_on_unknown = false 类似于上面的 remove_from_unknown,只是不移除 SUID/SGID 位。它仍将搜索文件系统以查找 SUID/SGID 位,但只会在您的日志中打印它们。此选项仅在您首次为 SUID/SGID 位配置 remove_from_unknown 时推荐使用,以便您可以查看正在更改的文件并对您的 whitelist 和 blacklist 进行调整。
  • enable_module_loading = true 如果您希望在系统运行后允许更改内核模块(例如 modprobe、rmmod),则为 true
  • load_modules = [] 如果 enable_module_loading 为 false,则通过 initramfs 加载这些模块
  • disable_filesystems = ['cramfs','freevxfs','jffs2','hfs','hfsplus','squashfs','udf'] 应禁用的文件系统(内核模块)数组
  • cpu_vendor = 'intel' 仅在 enable_module_loading = false 时需要:设置要加载模块的 CPU 厂商
  • icmp_ratelimit = '100' 默认值 '100',允许覆盖,需要字符串
  • desktop_enabled = false 如果这是桌面系统(即 Xorg、KDE/GNOME/Unity 等),则为 true
  • enable_ipv4_forwarding = false 如果此系统需要 IPv4 数据包转发(例如路由器),则为 true,否则为 false
  • manage_ipv6 = true true 表示加固 ipv6 设置,false 表示完全忽略 ipv6
  • enable_ipv6 = false false 表示在此系统上禁用 ipv6,true 表示启用
  • enable_ipv6_forwarding = false 如果此系统需要 IPv6 数据包转发(例如路由器),则为 true,否则为 false
  • arp_restricted = true 如果您希望限制 ARP 通告和回复的行为,则为 true,否则为 false
  • arp_ignore_samenet = false true 将丢弃不来自同一子网的数据包(arp_ignore = 2),false 将仅检查目标 IP(arp_ignore = 1)
  • enable_sysrq = false true 表示启用魔术 sysrq 键,否则为 false
  • enable_core_dump = false false 表示阻止创建核心转储,否则为 true
  • enable_stack_protection = true 用于地址空间布局随机化。ASLR 可以帮助抵御某些类型的缓冲区溢出攻击。ASLR 可以将基址、库、堆和栈定位在进程地址空间中的随机位置,这使得攻击程序难以预测下一条指令的内存地址。
  • enable_rpfilter = true true 表示启用反向路径过滤(丢弃伪造数据包),否则为 false
  • rpfilter_loose = false (仅在 enable_rpfilter 为 true 时)如果为 true,则为 宽松模式(rp_filter = 2),否则为 严格模式
  • enable_log_martians = true true 表示启用对可疑/不可路由网络数据包的日志记录,否则为 false 警告 - 这可能会生成巨大的日志文件!
  • unwanted_packages = [] 应从系统中移除的软件包
  • wanted_packages = [] 应添加到系统中的软件包
  • disabled_services = [] 不应启用的服务
  • enable_grub_hardening = false 设置为 true 以启用一些 grub 加固规则
  • grub_user = 'root' 在 grub 提示符下更改配置时需要提供的 grub 用户名
  • grub_password_hash = '' 使用 grub-mkpasswd-pbkdf2 创建的与 grub_user 关联的密码哈希
  • boot_without_password = true 设置 Grub,使其仅在更改条目时需要密码,而在引导现有条目时不需要
  • system_umask = undef 如果设置了此变量,则为系统中的所有用户设置 umask(例如 '027')
  • manage_home_permissions = false 设置为 true 以管理本地用户的文件和目录权限(g-w,o-rwx)
  • ignore_home_users = [] 不受 manage_home_permissions 限制的用户数组
  • manage_log_permissions = false 设置为 true 以管理日志文件权限(g-wx,o-rwx)
  • restrict_log_dir = ['/var/log/'] 设置主日志目录
  • ignore_restrict_log_dir = [] 用于排除主日志目录下的日志目录的数组
  • ignore_files_in_folder_to_restrict = [] 用于忽略 folder_to_restrict 数组下目录中需要加固的文件的数组
  • manage_cron_permissions = false 设置为 true 以管理 cron 文件权限(og-rwx)
  • enable_sysctl_config = true 设置为 false 以禁用 sysctl 配置
  • manage_system_users = true 设置为 false 以禁用管理系统用户(空密码和设置 nologin shell)
  • shadow_group = undef 覆盖 /etc/shadow 的组所有权
  • shadow_mode = undef 覆盖 /etc/shadow 的文件权限