CodingFuture + Puppet. Часть II: доступ и стандартное окружение (cfauth + cfsystem)

    Вариант развёртывания Linux систем на базе Puppet 4. Часть II: доступ и стандартное окружение (cfauth + cfsystem)


    Вкратце:


    1. cfauth — настраивает сервис SSH, админскую учётную запись, sudo, пароль суперпользователя
    2. cfsystem — настройка: APT, временной зоны, отправки системных писем, синхронизация времени, расширенный список стандартных пакетов
    3. Все модули интегрированы с модулем сетевого фильтра cfnetwork и не требуют дополнительных настроек


    Тематический цикл:



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


    Модуль cfauth


    цели


    • Вычистить OpenSSH конфиг и оставить только самое необходимое
      • Доступ только по публичному ключу
      • Отключение получения DNS хостов клиента — и запально, и дополнительные тормоза (не всегда)
      • Отключение баннеров OpenSSH и Debian
      • Включение агрессивного SSH KeepAlive
    • Разрешить доступ по SSH только для пользователей специальной группы ssh_access
    • Установка пароля суперпользователя в зашифрованном виде
    • Создание отдельного пользователя для доступа по SSH
      • Разрешение sudo команд
      • По умолчанию без пароля (упрощает администрирование большого количества систем):
        • /opt/puppetlabs/puppet/bin/puppet agent --test
        • /usr/bin/apt-get update
        • /usr/bin/apt-get dist-upgrade
        • /usr/bin/apt-get autoremove *
      • По умолчанию разрешённые параметры окружения:
        • DEBIAN_FRONTEND
      • Допустимо отключение пароля sudo для всех команд — удобно и относительно безопасно для большого количества машин в ДМЗ

    конфигурация


    • cfauth::admin_auth_keys — обязательный список публичных SSH ключей в формате ssh_authorized_key
      • параметр user уже задан
      • type = 'ssh-rsa' — по умолчанию
    • admin_user = 'adminaccess' — имя учётной записи для администратора. Желательно поменять и не использовать стандартное.
    • admin_password = undef — если указан, то устанавливает захешированный пароль для пользователей root и $admin_user
      Рекомендуется использовать mkpasswd -m sha-512 для генерации пароля
    • admin_hosts = undef — передаётся как src для сетевого фильтра cfnetwork::service_port. Настоятельно рекомендуется.
    • sudo_no_password_all = false — если true, то разрешает пользователю $admin_user запускать все команды через sudo без пароля
    • sudo_no_password_commands = undef — дополнительный список sudo команд, которые $admin_user может выполнить без пароля. Для случаев, когда нецелесообразно разрешать все команды.
    • sudo_env_keep = [] — дополнительные переменные окружения, которые разрешено оставлять для sudo
    • sshd_ports = 22 — список SSH портов по умолчанию. Автоматически создаёт сервис cfssh через cfnetwork::describe_services
    • sshd_config_template = 'cfauth/sshd_config.epp' — возможность переопределить стандартный шаблон генерации конфигурационного файла OpenSSH

    Модуль cfsystem


    Данный модуль ориентирован не только на обособленные системы, но и на возможность предоставлять стандартные сервисы внутри ДМЗ в целях ограничения допустимых исходящих соединений и поддержания этических сетевых норм — не ломиться бригадой из десятков систем на внешние сервисы.


    цели


    • Установка hostname в соответствии с certname — для профилактики
    • Установить настройки APT для конкретного релиза Debian или Ubuntu
      • По умолчанию APT pinning установлен 1001 для основных пакетов, что принудительно устанавливает актуальные пакеты даже если требуется откат на более старые версии (актуально, если были случайно установлены пакеты testing или unstable)
      • При необходимости, настроить кэширующий прокси-сервер
        • Целесообразно только при развёртывании более одной система в одном месте
        • Используется apt-cacher-ng
        • Может использоваться как простой HTTP/HTTPS прокси для скачивания иных обновлений в инфраструктуру без необходимости разрешать исходящие соединения во внешний мир. По понятным причинам HTTPS не кэшируется.
    • Устанавливает часовой пояс.
      Рекомендация: на вкус и цвет, но UTC по умолчанию решает множество проблем — говорю и как админ, и как разработчик.
    • Устанавливает постоянную синхронизацию времени
      • При необходимости, позволить другим машинам использовать данную систему как эталон времени
    • Установить настройки SMTP
      • При необходимости, указать smarthost с логином и паролем
      • При необходимости, разрешить другим локальным машинам централизовано пересылать свои системные сообщения
        Примечание: это удобно с точки зрения сетевой безопасности, хранения доступа к smarthost или правильных настроек DNS и т.п.
    • Установить все необходимые правила сетевого фильтра через cfnetwork API
    • Установить множество разнообразные подручных средств админа, которые не входят в стандартный список утилит, в т.ч.: etckeeper, curl, htop, tree, ethtool, iftop, netcat, netstat-nat, conntrack, telnet, screen, apticron, chkrootkit, rkhunter, debsums и т.д. (не полон и будеть расширяться, возможно добавиться конфигурационная опция)
    • Установить и извлекать специальные факты cf_location и cf_location_pool, которые удобно использовать в конфигурации Hiera.
    • Настройка стандартных параметров системы
    • Принудительная установка noop планировщика ввода-вывода для SSD и виртуальных дисков (на гостевых системах)
    • Возможность добавить произвольные команды в /etc/rc.local
    • Установка всех возможных локалей и выбор одной стандартной (по умолчанию en_US.UTF-8)
    • Ежедневная проверка необходимости перезагрузки, если версия ядра не совпадает с самой новой установленной
    • Принудительной обновление puppet.conf клиента
    • Набор вспомогательных скриптов, установленных под /opt/codingfuture/bin и добавленных в путь Shell и Csh:
      • cf_clear_email_queue — удалить все письма из системной очереди на отсылку
      • cf_clear_frozen_emails — удалить только замороженные письма из очереди на отсылку
      • cf_send_test_email — послать тестовое письма на адрес админа
      • cf_kernel_version_check — проверить расхождение между запущенной версией ядра и самой последней установленной

    класс cfsystem


    Все вложенные классы, добавляются автоматически.


    • allow_nfs = false — если не разрешено, то выпиливает установленные по умолчанию RPC & NFS
    • admin_email = undef — адрес электронный почты для системных уведомлений
    • repo_proxy = undef — установка HTTP/HTTPS прокси-сервера для скачивания системных пакетов
      • host — IP или имя
      • port — TCP порт
    • add_repo_cacher = false — установить прокси-сервер, принимающий клиентов на $service_face
    • service_face = 'any' — интерфейс cfnetwork::iface, на котором слушать клиентов, если включены сервисы
    • ntp_servers = [ 'pool.ntp.org' ] — список NTP серверов для синхронизации
    • add_ntp_server = false — установить NTP-сервер, принимающий клиентов на $service_face
    • timezone = 'Etc/UTC' — временная зона
    • apt_purge — передаётся в apt::purge, удаляет все неуправляемые настройки репозиториев и преференций пакетов
    • apt_update — передаётся в apt::update. По умолчанию, ежедневно с таймаутом в 300 секунд.
    • apt_pin = 1001 — приоритет для стандартных пакетов. Дополнительные репозитории добавляются как $apt_pin + 1 (1001 >= принудительный downgrade)
    • apt_backports_pin = 600 — если не установить >= $apt_pin > 1000, то пакеты будут автоматически откатываться на старую версию (так по умолчанию, из-за ограниченной поддержки обновлений безопасности)
    • real_hdd_scheduler = 'deadline' — планировщик ввода-вывода реальных жёстких дисков по умолчанию. Для SSD и виртуалок всегда noop.
    • rc_local = undef — дополнительный список команд для /etc/rc.local
    • puppet_host = "puppet.${::trusted['domain']}" — адрес Puppet Server
    • puppet_cahost = $puppet_host — адрес Puppet CA
    • puppet_env = $::environment — текущая среда (обычно production)
    • puppet_use_dns_srv = false — использовать ли DNS SRV записи для обнаружения $puppet_host и $puppet_cahost
    • locale = 'en_US.UTF-8' — локаль по умолчанию

    класс cfsystem::hierapool


    Установка и поддержка фактов, которые удобно использовать для настройке иерархии в hiera.yaml.


    • cf_location — по сути ассоциативное название физического центра данных. На этой основе удобно выставлять адреса репозитория пакетов APT и т.п..
    • cf_location_pool — конкретная группа серверов, подразумевает под собой отдельную ДМЗ группу в конкретном месте расположения.

    Пример:


    ---
    :backends:
        - yaml
    :hierarchy:
        - "%{::trusted.domain}/%{::trusted.hostname}"
        - "%{::trusted.domain}"
        - "%{::cf_location}/%{::cf_location_pool}"
        - "%{::cf_location}"
        - common
    :merge_behavior: deeper
    :yaml:
        :datadir:

    Параметры:


    • location = undef — сохраняет в /etc/cflocation, если задан
    • pool = undef — сохраняет в /etc/cflocationpool, если задан

    класс cfsystem::email


    Настройка отправки системных уведомлений.


    • smarthost = undef — устанавливает smarthost для SMTP
    • smarthost_login = undef — логин для smarthost при необходимости
    • smarthost_password = undef — пароль для smarthost при необходимости
    • relay_nets = <private subnets> — список сетей, которым разрешено пересылать письма через эту систему (само по себе не включает)
    • listen_ifaces = undef — список названий cfnetwork::iface интерфейсов, на которых слушать клиентов для пересылки писем
    • disable_ipv6 = true — отключение IPv6 — идёт прямиком в конфиг Exim4.
      Примечание: использование IPv6 для SMTP пока плохая идея.

    класс cfsystem::sysctl


    • vm_swappiness = 1 — 0-100 (%), уменьшает использование swap до минимума по умолчанию.

    Данный функционал ещё не полный и скорее всего будет расширяться.


    класс cfsystem::debian


    Специфично для Debian:


    • apt_url = 'http://httpredir.debian.org/debian' — Базовый адрес для APT
      Внимание: были замечены проблемы с apt-cacher-ng — лучше указать фиксированный, если используется для инфраструктуры
    • security_apt_url = 'http://security.debian.org/' — Базовый адрес для Debian Security APT
    • release = 'jessie' — название релиза

    класс cfsystem::ubuntu


    Специфично для Ubuntu:


    • apt_url = 'mirror://mirrors.ubuntu.com/mirrors.txt' — Базовый адрес для APT
    • release = 'wily' — название релиза

    тип cfsystem::debian::debconf


    Обёртка вокруг стандартного типа package, но с поддержкой идеологически правильной конфигурации Debian Config.


    • package = $title — название пакета, прямо в package
    • ensure = present — прямо в package
    • config = [] — конфигурационные опции для debconf-set-selections

    Живой пример


    Полноценное развёртывание инфраструктуры в Vagrant можно посмотреть здесь.


    настройки Hiera


    ---
    classes:
      - cfsystem
    
    # При необходимости устанавливает настройки для фактов `cf_location` и `cf_location_pool` на последующих вызовах
    # Обычно, эти факты устанавливаются при инициализации системы
    cfsystem::hierapool::location: 'somelocation'
    cfsystem::hierapool::pool: 'somepool'
    
    cfauth::admin_user: vagrant
    # mkpasswd -m sha-512: 'vagrant'
    cfauth::admin_password: '$6$W32Psa5h$l7iIrVFdG.6SRta86n1GlDcMBapDP3fpzLD4F2Vkz2xTfd2GFg34h5CEBH3JifiVRszumAteGDLXZEbp2bx3Z0'
    cfauth::sudo_no_password_all: true
    cfauth::admin_auth_keys:
      data_test:
        key: 'AAAAB3NzaC1yc2EAAAADAQABAAAAgQDiruOsKA2xTeITRnmLlWph1xNdyoX7cufWU48737E8KQSltRZEeyyLKKPR0L+XTwrvpIhwymikP+7K77KMF8yEg9f98FaYtxGdEvPqGVO7Dezdg3eQmQzYce0/wlgLXn0GJa2TcrG7lvSnHkCjbOV5lRWP5vY92skYQHhuwtMgtQ=='
        options:
          - 'from="10.0.0.0/8,192.168.0.0/16,172.16.0.0/12"'
    # Здесь должен быть хорошо выверенный список разрешённых IP
    cfauth::admin_hosts:
        - '10.0.0.0/8'
        - '192.168.0.0/16'
        - '172.16.0.0/12'
    
    # Использовать APT кэш, NTP и SMTP Smarthost на инфраструктурном сервере
    cfsystem::repo_proxy:
        host: maint.example.com
        port: 3142
    cfsystem::ntp_servers: 'maint.example.com'
    cfsystem::email::smarthost: 'maint.example.com'
    
    # Такие настройки должны быть на самом 'maint.example.com'
    #===================================================
    cfsystem::add_repo_cacher: true
    cfsystem::add_ntp_server: true
    
    cfsystem::ntp_servers:
        - 0.debian.pool.ntp.org
        - 1.debian.pool.ntp.org
        - 2.debian.pool.ntp.org
        - 3.debian.pool.ntp.org
    
    cfsystem::email::smarthost:
    cfsystem::email::listen_ifaces: 'main'

    UPD 2016-02-18:


    • Добавлено описание авто-конфигурации планировщика ввода-вывода для дисков
    • Поддержка произвольных команд в /etc/rc.local

    UPD 2016-03-12:


    • Управление APT pinning
    • Управления локалями
    • Проверка на необходимость перезагрузки, если версия ядра не совпадает с самой новой установленной
    • Набор ранее не документированных вспомогательных скриптов для Exim
    • Опции конфигурации Puppet Agent
    • Тип cfsystem::debian::debconf
    • Добавлена поддержка переменный окружения для sudo
    Поделиться публикацией
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама
    Комментарии 0

    Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.