sshd

OpenSSH Сервер

Ansible Lint Ansible Galaxy

Эта роль настраивает демон OpenSSH. Она:

  • По умолчанию настраивает SSH демон с обычными значениями ОС.
  • Работает с различными дистрибутивами UN*X.
  • Может быть настроена с помощью словарей или простых переменных.
  • Поддерживает наборы Match.
  • Поддерживает все опции sshd_config. Шаблоны генерируются программно. (см. meta/make_option_lists)
  • Тестирует sshd_config перед перезагрузкой sshd.

ПРЕДУПРЕЖДЕНИЕ Неправильная настройка этой роли может заблокировать доступ к вашему серверу! Пожалуйста, протестируйте вашу настройку и ее взаимодействие с конфигурацией пользователей прежде чем использовать в production!

ПРЕДУПРЕЖДЕНИЕ Digital Ocean позволяет вход для root с паролями через SSH на Debian и Ubuntu. Это не значение по умолчанию, установленное этим модулем - он установит PermitRootLogin без пароля, что позволит доступ только с помощью SSH ключа, но не с простым паролем. Если вам нужна эта функциональность, обязательно установите sshd_PermitRootLogin yes для этих хостов.

Требования

Протестировано на:

  • Ubuntu precise, trusty, xenial, bionic, focal, jammy, noble
    • Запуск тестов на Ubuntu latest
  • Debian wheezy, jessie, stretch, buster, bullseye, bookworm
    • Запуск тестов на Debian
  • EL 6, 7, 8, 9, 10 производные дистрибутивы
    • Запуск тестов на CentOS
  • Все Fedora
    • Запуск тестов на Fedora latest
  • Последний Alpine
    • Запуск тестов на Alpine
  • FreeBSD 10.1
  • OpenBSD 6.0
  • AIX 7.1, 7.2
  • OpenWrt 21.03

Скорее всего, будет работать и на других дистрибутивах, дополнительные vars/ файлы приветствуются.

Дополнительные требования

Если вы хотите использовать расширенные функции этой роли, которые могут настраивать брандмауэр и selinux, что чаще всего полезно при использовании нестандартного порта, роль требует дополнительных коллекций, указанных в meta/collection-requirements.yml. Эти коллекции не устанавливаются автоматически. Если вы хотите управлять системами rpm-ostree, требуются дополнительные коллекции. Установите их следующим образом:

ansible-galaxy install -vv -r meta/collection-requirements.yml

Для получения дополнительной информации смотрите опции sshd_manage_firewall и sshd_manage_selinux ниже, а также раздел rpm-ostree. Эта дополнительная функциональность поддерживается только на Linux на базе Red Hat.

Переменные роли

Главные переменные роли

Если не настроено, эта роль предоставит sshd_config, который соответствует значениям по умолчанию ОС, за исключением комментариев и в другом порядке.

sshd_enable

Если установлено на false, роль будет полностью отключена. По умолчанию true.

sshd_skip_defaults

Если установлено на true, значения по умолчанию применяться не будут. Это означает, что у вас должен быть полный набор конфигурационных значений через либо словарь sshd, либо переменные sshd_Key. По умолчанию false, если не установлено sshd_config_namespace или sshd_config_file указывает на каталог drop-in для избежания рекурсивных включений.

sshd_manage_service

Если установлено на false, сервис/демон не будет управляться вообще, т.е. не будет пытаться включить при загрузке или запустить или перезагрузить сервис. По умолчанию true, если только: работа не происходит внутри контейнера Docker (предполагается, что ansible используется в процессе сборки) или AIX (модуль Ansible service в настоящее время не поддерживает enabled для AIX).

sshd_allow_reload

Если установлено на false, перезагрузка sshd не произойдет при изменениях. Это может помочь с устранением неполадок. Вам нужно будет вручную перезагрузить sshd, если вы хотите применить изменённую конфигурацию. По умолчанию такое же значение, как и у sshd_manage_service. (Кроме AIX, где sshd_manage_service по умолчанию false, но sshd_allow_reload по умолчанию true).

sshd_install_service

Если установлено на true, роль установит файлы сервисов для SSH. По умолчанию false.

Шаблоны для используемых файлов сервисов указаны переменными

  • sshd_service_template_service (по умолчанию: templates/sshd.service.j2)
  • sshd_service_template_at_service (по умолчанию: templates/[email protected])
  • sshd_service_template_socket (по умолчанию: templates/sshd.socket.j2)

Используя эти переменные, вы можете использовать свои собственные пользовательские шаблоны. С вышеуказанными шаблонами по умолчанию, имя установленного SSH сервиса будет предоставлено переменной sshd_service.

sshd_manage_firewall

Если установлено на true, порты SSH будут открыты в брандмауэре. Обратите внимание, это работает только в ОС на базе Red Hat. Значение по умолчанию false.

ПРИМЕЧАНИЕ: sshd_manage_firewall ограничен только добавлением портов. Его нельзя использовать для удаления портов. Если вы хотите удалить порты, вам нужно будет использовать роль брандмауэра напрямую.

sshd_manage_selinux

Если установлено на true, selinux будет настроен, чтобы позволить sshd слушать на указанных портах SSH. Обратите внимание, это работает только в ОС на базе Red Hat. Значение по умолчанию false.

ПРИМЕЧАНИЕ: sshd_manage_selinux ограничен только добавлением политик. Его нельзя использовать для удаления политик. Если вы хотите удалить порты, вам нужно будет использовать роль selinux напрямую.

sshd

Словарь, содержащий конфигурацию. например,

sshd:
  Compression: delayed
  ListenAddress:
    - 0.0.0.0

sshd_<OptionName>

Можно использовать простые переменные вместо словаря. Простые значения переопределяют значения словаря. Например:

sshd_Compression: off

Во всех случаях булевы значения корректно отображаются как yes и no в конфигурации sshd. Можно использовать списки для многострочных конфигурационных элементов. Например:

sshd_ListenAddress:
  - 0.0.0.0
  - '::'

Отобразится как:

ListenAddress 0.0.0.0
ListenAddress ::

sshd_match, sshd_match_1 до sshd_match_9

Список словарей или просто словарь для блоков Match. Обратите внимание, что эти переменные не переопределяют блоки match, определенные в словаре sshd. Все источники отразятся в итоговом конфигурационном файле. Использование варианта sshd_match_* устарело и больше не рекомендуется.

sshd_backup

Если установлено на false, оригинальный файл sshd_config не будет сохранен. Значение по умолчанию true.

sshd_sysconfig

На системах на базе RHEL, sysconfig используется для настройки более детальной информации о сервисе sshd. Если установлено на true, эта роль также будет управлять файлом конфигурации /etc/sysconfig/sshd на основе следующих конфигураций. Значение по умолчанию false.

sshd_sysconfig_override_crypto_policy

В системах на базе RHEL8, это может быть использовано для переопределения системной криптографической политики путем установки на true. Без этой опции изменения шифров, MAC, общеизвестных алгоритмов ключей не будут иметь эффекта на итоговый сервис в RHEL8. Значение по умолчанию false.

sshd_sysconfig_use_strong_rng

В системах на базе RHEL (до RHEL9) это может быть использовано для принудительного управления sshd для перегенерации случайных чисел OpenSSL с заданным количеством байт в качестве аргумента. Значение по умолчанию 0, что отключает эту функциональность. Не рекомендуется включать это, если система не имеет аппаратного генератора случайных чисел.

sshd_config_file

Путь, по которому конфигурация openssh, созданная этой ролью, должна быть сохранена. Это полезно в основном при генерации фрагментов конфигурации для включения из каталога drop-in (по умолчанию в Fedora и RHEL9).

Когда этот путь указывает на каталог drop-in (например, /etc/ssh/sshd_config.d/00-custom.conf), основной конфигурационный файл (определенный переменной sshd_main_config_file) проверяется на наличие правильной директивы Include.

sshd_main_config_file

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

На системах без каталога drop-in по умолчанию None. В противном случае по умолчанию /etc/ssh/sshd_config. Когда sshd_config_file установлен вне каталога drop-in (его родительский каталог не sshd_main_config_file ~ '.d'), эта переменная игнорируется.

sshd_config_namespace

По умолчанию (null), роль определяет все содержимое конфигурационного файла, включая системные значения по умолчанию. Вы можете использовать эту переменную, чтобы вызывать эту роль из других ролей или из нескольких мест в одном плейбуке как альтернативу использованию каталога drop-in. При этом игнорируется sshd_skip_defaults, и системные значения по умолчанию не используются.

Когда эта переменная установлена, роль помещает конфигурацию, которую вы указываете, в конфигурационные фрагменты в существующем конфигурационном файле под указанным пространством имен. Вам необходимо выбирать разные пространства имен при вызове роли несколько раз.

Обратите внимание, что ограничения конфигурационного файла openssh все еще применяются. Например, только первый указанный параметр в конфигурационном файле имеет эффекция для большинства переменных.

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

sshd_config_owner, sshd_config_group, sshd_config_mode

Используйте эти переменные, чтобы установить владельца и права доступа для конфигурационного файла openssh, который создает эта роль.

sshd_verify_hostkeys

По умолчанию (auto), этот список содержит все ключи хоста, которые присутствуют в сгенерированном конфигурационном файле. Если их нет, будет использован список по умолчанию OpenSSH после исключения ключей, не одобренных FIPS в режиме FIPS. Пути проверяются на наличие, и новые ключи генерируются, если они отсутствуют. Кроме того, права доступа и владельцы файлов устанавливаются на разумные значения по умолчанию. Это полезно, если роль используется на этапе развертывания, чтобы убедиться, что сервис может запуститься с первой попытки.

Чтобы отключить эту проверку, установите это в пустой список.

sshd_hostkey_owner, sshd_hostkey_group, sshd_hostkey_mode

Используйте эти переменные, чтобы установить владельца и права доступа для ключей хоста из вышеупомянутого списка.

Вторичные переменные роли

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

sshd_packages

Используйте эту переменную для переопределения списка пакетов по умолчанию для установки.

sshd_binary

Путь к исполняемому файлу openssh.

sshd_service

Имя службы openssh. По умолчанию эта переменная содержит имя службы ssh, которую использует целевая платформа. Но ее также можно использовать для установки имени пользовательской службы ssh, когда используется переменная sshd_install_service.

sshd_sftp_server

Путь по умолчанию к двоичному файлу сервера sftp.

Переменные, экспортируемые ролью

sshd_has_run

Эта переменная устанавливается в true после успешного выполнения роли.

Настройка аутентификации по сертификатам SSH

Чтобы настроить аутентификацию по сертификатам SSH на вашем сервере SSH, вы должны предоставить как минимум доверенный ключ CA пользователя, который будет использоваться для проверки клиентских сертификатов. Это делается с помощью переменной sshd_trusted_user_ca_keys_list.

Если вам нужно сопоставить некоторых авторизованных принципалов с системными пользователями, вы можете сделать это с помощью переменной sshd_principals.

Дополнительные переменные

sshd_trusted_user_ca_keys_list

Список публичных ключей доверенных пользователей CA в формате OpenSSH (в одну строку) (обязательно).

sshd_trustedusercakeys_directory_owner, shsd_trustedusercakeys_directory_group, sshd_trustedusercakeys_directory_mode

Используйте эти переменные, чтобы установить владельца и права доступа для каталога ключей Trusted User CA. Значения по умолчанию: root, root и 0755.

sshd_trustedusercakeys_file_owner, shsd_trustedusercakeys_file_group, sshd_trustedusercakeys_file_mode

Используйте эти переменные, чтобы установить владельца и права доступа для файла ключей Trusted User CA. Значения по умолчанию: root, root и 0640.

sshd_principals

Словарь, содержащий принципалов для пользователей в ОС (опционально). Например:

sshd_principals:
  admin:
    - frontend-admin
    - backend-admin
  somelinuxuser:
    - some-principal-defined-in-certificate

sshd_authorizedprincipals_directory_owner, shsd_authorizedprincipals_directory_group, sshd_authorizedprincipals_directory_mode

Используйте эти переменные, чтобы установить владельца и права доступа для каталога авторизованных принципалов. Значения по умолчанию: root, root и 0755.

sshd_authorizedprincipals_file_owner, shsd_authorizedprincipals_file_group, sshd_authorizedprincipals_file_mode

Используйте эти переменные, чтобы установить владельца и права доступа для файла авторизованных принципалов. Значения по умолчанию: root, root и 0644.

Дополнительная конфигурация

Сервер SSH нуждается в этой информации, хранящейся в файлах, поэтому, помимо вышеупомянутых переменных, соответствующие параметры конфигурации TrustedUserCAKeys (обязательно) и AuthorizedPrincipalsFile (необязательно) должны присутствовать в словаре sshd при вызове роли. Например:

sshd:
  TrustedUserCAKeys: /etc/ssh/path-to-trusted-user-ca-keys/trusted-user-ca-keys.pub
  AuthorizedPrincipalsFile: "/etc/ssh/path-to-auth-principals/auth_principals/%u"

Чтобы узнать больше о сертификатах SSH, вот хороший учебник о чистых сертификатах SSH из Викикниг.

Чтобы понять принципалы и настроить сертификаты SSH с Vault, вот хорошо объясняющий учебник от Hashicorp.

Зависимости

Нет

Для тестов требуется коллекция ansible.posix для роли mount для эмуляции режима FIPS.

Пример плейбука

ОПАСНО! Этот пример предназначен для демонстрации возможностей конфигурации, предоставляемых этой ролью. Его запуск, скорее всего, нарушит ваш SSH доступ к серверу!

---
- hosts: all
  vars:
    sshd_skip_defaults: true
    sshd:
      Compression: true
      ListenAddress:
        - "0.0.0.0"
        - "::"
      GSSAPIAuthentication: false
      Match:
        - Condition: "Group user"
          GSSAPIAuthentication: true
    sshd_UsePrivilegeSeparation: false
    sshd_match:
        - Condition: "Group xusers"
          X11Forwarding: true
  roles:
    - role: willshersystems.sshd

Вывод будет:

# Ansible managed: ...
Compression yes
GSSAPIAuthentication no
UsePrivilegeSeparation no
Match Group user
  GSSAPIAuthentication yes
Match Group xusers
  X11Forwarding yes

С версии Ansible 2.4 роль можно вызывать с помощью ключевого слова include_role, например:

---
- hosts: all
  become: true
  tasks:
  - name: "Настроить sshd"
    include_role:
      name: willshersystems.sshd
    vars:
      sshd_skip_defaults: true
      sshd:
        Compression: true
        ListenAddress:
          - "0.0.0.0"
          - "::"
        GSSAPIAuthentication: false
        Match:
          - Condition: "Group user"
            GSSAPIAuthentication: true
      sshd_UsePrivilegeSeparation: false
      sshd_match:
          - Condition: "Group xusers"
            X11Forwarding: true

Вы также можете просто добавить фрагмент конфигурации с опцией sshd_config_namespace:

---
- hosts: all
  tasks:
  - name: Настроить sshd для приема полезных переменных окружения
    include_role:
      name: willshersystems.sshd
    vars:
      sshd_config_namespace: accept-env
      sshd:
        # некоторые полезные переменные окружения для принятия
        AcceptEnv:
          LANG
          LS_COLORS
          EDITOR

Следующий фрагмент будет добавлен в файл конфигурации по умолчанию (если еще не присутствует):

# BEGIN sshd system role managed block: namespace accept-env
Match all
  AcceptEnv LANG LS_COLORS EDITOR
# END sshd system role managed block: namespace accept-env

Больше примеров плейбуков можно найти в директории examples/.

Генерация шаблонов

Шаблоны sshd_config.j2 и sshd_config_snippet.j2 генерируются программно с помощью скриптов в meta. Новые опции должны добавляться в options_body и/или options_match.

Чтобы перегенерировать шаблоны, находясь в каталоге meta/, выполните: ./make_option_lists

rpm-ostree

Смотрите README-ostree.md

Лицензия

LGPLv3

Авторы

Мэтт Уилшер matt@willsher.systems

© 2014,2015 Willsher Systems Ltd.

Якуб Елен jjelen@redhat.com

© 2020 - 2024 Red Hat, Inc.

Установить
ansible-galaxy install willshersystems/ansible-sshd
Лицензия
lgpl-3.0
Загрузки
183144
Владелец
Cloud Architecture & Automation