Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
Инструменты/GitHubGitHub/dev-sec/puppet-os-hardening
Безопасность облачной инфраструктурыСканеры уязвимостейАудит конфигурацииСетевая безопасностьDevSecOpsАутентификация
GitHubdev-sec/puppet-os-hardening

puppet-os-hardening

Этот puppet-модуль предоставляет множество конфигураций, связанных с безопасностью, обеспечивая всестороннюю базовую защиту.

Репозиторий
291100141 месяц назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Сайт
Поделиться

Укрепление ОС с помощью Puppet

Puppet Forge Version Puppet Forge Downloads Puppet Forge Endorsement Build Status

Содержание

  1. Описание модуля — что делает модуль и почему он полезен
  2. Установка — основы начала работы с os_hardening
    • Требования к установке
    • Начало работы с os_hardening
  3. Использование — параметры конфигурации и дополнительные функции
    • Важно для Puppet Enterprise
    • Параметры
    • Использование Hiera
    • Примечание о желательных/нежелательных пакетах и отключённых службах
  • Ограничения — совместимость с ОС и т. д.
  • Разработка — руководство по внесению вклада в модуль
  • Тестирование — критерии качества для ваших изменений в коде
    • Локальное тестирование
    • Тесты PDK
    • Интеграционные тесты (Docker)
    • Интеграционные тесты (DigitalOcean)
    • CI-тестирование PR и форков
  • Свяжитесь с нами
  • Участники + Благодарности
  • Лицензия и автор
  • Описание модуля

    Этот модуль Puppet обеспечивает безопасную конфигурацию вашей базовой ОС с укреплением и является частью DevSec Hardening Framework.

    Установка

    Требования к установке

    • 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 установите значение true, если вы используете Puppet Enterprise ВАЖНО — см. выше
    • extra_user_paths = [] добавляет дополнительные пути к переменной PATH пользователя (по умолчанию пусто).
    • umask = undef umask, используемый для создания новых домашних каталогов с помощью useradd / newusers (например, '027')
    • maildir = undef путь для maildir (например, '/var/mail')
    • usergroups = true true, если вы хотите отдельные группы для каждого пользователя, false в противном случае
    • sys_uid_min = undef и sys_gid_min = undef переопределяют настройку по умолчанию для login.defs
    • password_max_age = 60 максимальный срок действия пароля
    • 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 = [] массив системных учётных записей пользователей, которые не должны быть укреплены (пароль отключён, а оболочка установлена на /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 true, если вы не хотите, чтобы Puppet регистрировал предупреждения о max_files и производительности при рекурсивном обходе папок с более чем 1000 файлов, например /bin /usr/bin
    • recurselimit = 5 глубина каталога для рекурсивной проверки прав доступа
    • passwdqc_enabled = true true, если вы хотите использовать строгую проверку паролей в PAM с помощью passwdqc
    • auth_retries = 5 максимальное количество попыток аутентификации, после которого учётная запись блокируется на некоторое время
    • auth_lockout_time = 600 время в секундах, которое должно пройти, если учётная запись была заблокирована из-за слишком большого количества неудачных попыток аутентификации
    • passwdqc_options = 'min=disabled,disabled,16,12,8' установите любую строку параметров (в виде строки), которую вы хотите передать в passwdqc
    • manage_pam_unix = false true, если вы хотите, чтобы pam_unix управлялся этим модулем
    • enable_pw_history = true true, если вы хотите, чтобы pam_unix запоминал историю паролей для предотвращения повторного использования паролей (требует manage_pam_unix = true)
    • pw_remember_last = 5 количество последних паролей (например, 5 предотвратит повторное использование пользователем любого из его последних 5 паролей)
    • only_root_may_su = false true, когда только root и члены группы wheel могут использовать su; должно быть true для соответствия CIS Benchmark
    • root_ttys = ['console','tty1','tty2','tty3','tty4','tty5','tty6'] зарегистрированные TTY для root
    • whitelist = [] все файлы, которые должны сохранить свои биты SUID/SGID, если они установлены (будут объединены с предопределённым списком разрешённых файлов)
    • blacklist = [] все файлы, у которых должны быть удалены биты SUID/SGID, если они установлены (будут объединены с предопределённым списком запрещённых файлов)
    • remove_from_unknown = false true, если вы хотите удалить биты SUID/SGID из любого файла, который явно не настроен в blacklist. Это заставит каждый запуск Puppet искать по смонтированным файловым системам биты SUID/SGID, которые не настроены в списках по умолчанию и пользовательском списке запрещённых. Если будет найден бит SUID/SGID, он будет удалён, если только этот файл не находится в вашем whitelist.
    • dry_run_on_unknown = false как remove_from_unknown выше, только биты SUID/SGID не удаляются. Он по-прежнему будет искать по файловым системам биты SUID/SGID, но будет только выводить их в ваш журнал. Этот параметр рекомендуется только при первом настройке remove_from_unknown для битов SUID/SGID, чтобы вы могли видеть изменяемые файлы и вносить корректировки в ваш whitelist и blacklist.
    • enable_module_loading = true true, если вы хотите разрешить изменение модулей ядра после запуска системы (например, modprobe, rmmod)
    • load_modules = [] загружает эти модули через initramfs, если enable_module_loading имеет значение false
    • disable_filesystems = ['cramfs','freevxfs','jffs2','hfs','hfsplus','squashfs','udf'] массив файловых систем (модулей ядра), которые должны быть отключены
    • cpu_vendor = 'intel' требуется только если enable_module_loading = false: установите производителя CPU для загружаемых модулей
    • icmp_ratelimit = '100' значение по умолчанию '100', позволяет переопределение, требуется строка
    • desktop_enabled = false true, если это настольная система, т. е. Xorg, KDE/GNOME/Unity и т. д.
    • enable_ipv4_forwarding = false true, если этой системе требуется пересылка пакетов в IPv4 (например, маршрутизатор), false в противном случае
    • manage_ipv6 = true true для укрепления настройки ipv6, false для полного игнорирования ipv6
    • enable_ipv6 = false false для отключения ipv6 в этой системе, true для включения
    • enable_ipv6_forwarding = false true, если этой системе требуется пересылка пакетов в IPv6 (например, маршрутизатор), false в противном случае
    • arp_restricted = true true, если вы хотите ограничить поведение объявления и ответа на ARP, 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 может помочь защититься от определённых типов атак с переполнением буфера. ASLR может размещать базу, библиотеки, кучу и стек в случайных позициях в адресном пространстве процесса, что затрудняет атакующей программе предсказание адреса памяти следующей инструкции.
    • enable_rpfilter = true true для включения фильтрации обратного пути (отбрасывание поддельных пакетов), false в противном случае
    • rpfilter_loose = false (только если enable_rpfilter имеет значение true) нестрогий режим (rp_filter = 2), если true, в противном случае строгий режим
    • 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)
    • shadow_group = undef переопределяет владельца группы для /etc/shadow
    • shadow_mode = undef переопределяет права доступа к файлу /etc/shadow

    Использование 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 Distribution Independent Linux Benchmark является хорошей отправной точкой для укрепления систем, было сочтено целесообразным реализовать простой способ работы с разовыми задачами, для которых не нужно писать целый модуль.

    Например, для повышения соответствия CIS DIL на системе Debian следует задать следующее:

    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 — ID вашего ssh-ключа в DigitalOcean, см. это для получения дополнительной информации

    SSH-ключ должен называться ~/.ssh/do_ci и быть добавлен в ваш профиль в DigitalOcean. После этого вы готовы запускать тесты, как описано в разделе Интеграционные тесты (Docker).

    Если вы хотите запустить полные интеграционные тесты с Github Actions в своём форке, вам необходимо добавить эти переменные окружения в настройках вашего форка:

    • KITCHEN_LOCAL_YAML=kitchen.do.yml
    • DIGITALOCEAN_ACCESS_TOKEN — токен доступа для DigitalOcean
    • CI_SSH_KEY — закрытая часть ssh-ключа, доступного в DigitalOcean для ваших экземпляров, в форме base64 (например, cat id_rsa | base64 -w0 ; echo)
    • DIGITALOCEAN_SSH_KEY_IDS — ID CI_SSH_KEY в DigitalOcean, см. это для получения дополнительной информации

    CI-тестирование PR и форков

    Ваши патчи будут автоматически протестированы с помощью Github Actions. Сводка тестов видна на Github в вашем PR, подробности можно найти в связанных тестах.

    Свяжитесь с нами

    Вы можете связаться с нами несколькими способами:

    • @DevSecIO в Twitter
    • Список рассылки для вопросов и общего обсуждения: [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 License, Version 2.0 (далее — «Лицензия»); вы не можете использовать этот файл, кроме как в соответствии с Лицензией. Копию Лицензии можно получить по адресу

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

    Если это не требуется применимым законодательством или не согласовано в письменной форме, программное обеспечение, распространяемое по Лицензии, распространяется на основе «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ ИЛИ УСЛОВИЙ, явных или подразумеваемых. См. Лицензию для конкретного языка, регулирующего разрешения и ограничения по Лицензии.

    Скачать инструмент