Как документировать сервер и контролировать его управление, даже если у вас небольшой стартап

Привет, Хабр! Меня зовут Даниил Воложинок, я инженер в группе виртуализации. Представьте себе ситуацию. У вас есть сервер с комплексом приложений и настроек, который несколько лет обслуживает админ — «золотые руки». Однажды «золотой» админ увольняется или уходит на длительный больничный. На его смену приходит новый и выясняет, что разобраться в наследстве невозможно: большинство сведений его предшественник держал в голове. 

Пару раз столкнувшись с таким, я убедился, что даже для маленького сервера лучше сразу завести подробную документацию и не оставлять будущих администраторов в информационной яме. Текущим сотрудникам это тоже помогает: за счет прозрачности растет эффективность взаимодействия, снижаются риски безопасности.  

В статье поделюсь наработанным списком для документирования сервера, который мы собрали внутри компании и теперь высылаем в качестве рекомендации и крупным клиентам DataLine, и небольшим клиентам Cloudlite. Ресурсы Cloudlite нередко используются для стартапов и pet-проектов. А когда стартап вдруг резко взлетает, становится некогда думать о документировании. Так что привычка сразу все фиксировать помогает нашим клиентам не запутаться. 

302644d77beb58f0389b6f452fdfd90c.jpg

Сами рекомендации не зависят от того, где документировать: в вики-подобной базе знаний, вроде Confluence, или просто в Excel. Гораздо важнее, чтобы информация была в непосредственном доступе и регулярно пополнялась. 

Итак, если сервер предназначен для продуктива, я документирую следующие пункты и выполняю некоторые практики, в разбивке по классам и в порядке приоритетов.

Положение сервера, структура приложения и обновления

  1. Характеристики сервера, какое железо используется:

    • Если сервер виртуальный, то указываем, сколько vCPU, RAM, какие диски и сколько места на них.

    • Отмечаем, используется ли RAID, LVM.

    • Указываем, входит ли сервер в домен.

    • Если сервер аппаратный и на гарантии, то также необходимо указать, кто уполномочен связываться с гарантийной службой в случае аппаратного выхода из строя. 

    Аналогичную информацию фиксируем и для резервного сервера, на котором будем запускать продуктивное приложение в случае выхода из строя основного сервера. Продуктивные данные рекомендуется хранить на СХД, к которой подключены оба сервера.

    Хорошо для Linux:

    Название

    website.fullsuccess.prod

    Тип

    VDS

    Название ВМ

    website.fullsuccess.prod

    Название vApp

    Website

    Домен

    fullsuccess.prod

    Роль

    продуктивный сайт «Полный Успех»

    IP-адрес

    192.168.100.102 (за виртуальным маршрутизатором)

    Расположение

    OrgVDC FullSuccess_NORD3 в CloudLine

    vCPU

    4

    RAM

    8 ГБ

    ОС

    Oracle Linux 8

    Обновления

    Каждую третью субботу месяца силами дежурного

    RAID

    нет

    LVM

    да

    ФС на LVM

    XFS

    pvdisplay

    Приложить вывод команды pvdisplay

    vgdisplay

    Приложить вывод команды vgdisplay

    lvdisplay

    Приложить вывод команды lvdisplay

    Резервное копирование

    Veeam Backup & Replication — раз в неделю по воскресеньям в 02:00

    Примерное время резервного копирования

    15 минут (инкремент)

    Хорошо для Windows:

    Название

    website.fullsuccess.prod

    Тип

    VDS

    Название ВМ

    website.fullsuccess.prod

    Название vApp

    Website

    Домен

    Роль

    Продуктивный сайт «Полный успех»

    IP-адрес

    192.168.100.102 (за виртуальным маршрутизатором)

    Расположение

    OrgVDC FullSuccess_NORD3 в CloudLine

    vCPU

    4

    RAM

    8 ГБ

    ОС

    Windows Server 2019

    Обновления

    Каждую третью субботу месяца силами дежурного

    RAID

    RAID 5

    LVM

    да

    ФС на LVM

    XFS

    pvdisplay

    Приложить вывод команды pvdisplay

    vgdisplay

    Приложить вывод команды vgdisplay

    lvdisplay

    Приложить вывод команды lvdisplay

    Резервное копирование

    Veeam Backup & Replication — раз в неделю по воскресеньям в 02:00

    Примерное время резервного копирования

    15 минут (инкремент)

  2. Регулярные задачи. Cron для Linux и Scheduled Tasks для Windows, что указано для запуска и зачем.

    Хорошо для Linux

    Хорошо для Windows

    Плохо для всех

    Вывод команды:

    for user in $(cut -f1 -d: /etc/passwd); do crontab -u $user -l; done

    В самом crontab каждого администратора должны быть строки с комментариями

    Приложить получившийся файл TaskExport.txt

    $TaskPaths = Get-ScheduledTask | Select-Object -ExpandProperty «TaskPath» -Unique

    ForEach ($TaskPath in $TaskPaths) {Get-ScheduledTask -TaskPath »$TaskPath» | Export-ScheduledTask | Add-Content -Path »$HOME\TasksExport.txt»}

    Сбор данных для системы мониторинга.

    Проверка оставшегося места

  3. Если есть кластер, то описываем его параметры: какое приложение кластеризовано, какие серверы в него входят и как взаимодействуют:

    Хорошо

    Плохо

    Кластезированное приложение

    База Oracle

    Кластеризована база Oracle

    Адрес ноды #1

    oracle1.fullsuccess.local

    Тип ноды #1

    Повышение скорости работы

    Адрес ноды #2

    Oracle2.fullsuccess.local

    Тип ноды #2

    Повышение скорости работы

  4. Мониторинг сервера и его детали:

    • какие сервисы мониторятся;

    • чем и с какой частотой, с какой частотой забираются исходные данные;

    • даст ли recheck (повторная проверка) другой результат через несколько секунд;

    • по какому алгоритму ведется сбор.

    Если на мониторинг не выделен бюджет, рекомендуем использовать бесплатный тариф UptimeRobot — это однозначно лучше, чем ничего.

    Для массивного мониторинга, по возможности, указываем скрипт и ссылку на статью, которая объясняет его работу. С пассивным мониторингом все может быть не так однозначно, как с активным.

    Хорошо:

    Название хоста

    oracle1.fullsuccess.local

    Название сервиса

    Check 1521/TCP

    Даст ли recheck результат через несколько секунд

    Да

    Тип мониторинга

    Активный

    Частота обновления

    Раз в 2 минуты

  5. Указываем, когда проводили последнее обновление и какие явления всплыли в течение 2 недель после него.

    Поскольку некоторые обновления Windows полностью ломают продуктив, их нужно испытывать на тестовом сервере. С Linux-дистрибутивами такое происходит реже, однако тоже возможно. Если при тестировании специалисты обнаружили обновления, которые нельзя устанавливать, то это тоже нужно указать во внутренней базе знаний.

    Хорошо для Linux

    Хорошо для Windows

    Заблокируйте для обновления пакеты: nodejs, npm, — так как их обновление может привести к нарушению работы продуктивного сервиса на nodejs. Такие обновления должны быть планово обкатаны на тестовом сервере

    Не устанавливайте KB5006670 для Windows 10 — оно ломает сетевую печать

    Новости по апдейтам можно отслеживать здесь: https://www.bleepingcomputer.com/search/? cof=FORID%3A10&ie=UTF-8&q=windows+update

  6. Если есть контейнеры Docker или Podman или система Kubernetes, то фиксируем список назначения и уровни доступа.

    Хорошо

    Плохо

    kubectl get pods --all-namespaces для Kubernetes + сведения о назначении этих подов

    Контейнеры базы Postgres

  7. Через что производится администрирование сервера.

    Хорошо

    Администрирование через

    SSH

    Синхронизация файлов

    Через rsync, директория /var/www/test

  8. Чтобы всегда знать дату исполнения команд, в истории bash включаем дату и большой размер истории:

    HISTTIMEFORMAT="%d/%m/%y %T " && echo 'export HISTTIMEFORMAT="%d/%m/%y %T "' >> ~/.bash_profile && export HISTSIZE=8000

Доступы, учетные записи

  1. Какие на сервере есть пользователи, для чего они нужны, кто имеет доступ к серверу и для выполнения каких задач. 

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

    Хорошо для Linux

    Плохо для Linux

    Хорошо для Windows

    Плохо для Windows

    vladimirov: x:1003:1003: Vladimirov Anton,,,:/home/vladimirov:/bin/bash — уровень прав: полный; членство в группах: vladimirov, wheel; администратор Linux

    Вывод команды cat /etc/passwd для Linux

    petrov — Петров Иван; домен: не доменный пользователь; членство в группах: Administrators, Users; задачи: группа MS ДатаЛайн, администрирование сервера (дневная смена)

    Вывод команд:

    Get-WmiObject -Class Win32_UserAccount -Filter «LocalAccount=True» | Select-Object PSComputername, Name, Status, Disabled, AccountType, Lockout, PasswordRequired, PasswordChangeable | Out-GridView при отсутствии домен-контроллера

    Get-ADUser -Filter * | Out-GridView при наличии домен-контроллера

    mitrofanov: x:1003:1003: Mitrofanov Artem,,,:/home/vladimirov:/bin/bash — уровень прав: полный в рамках /var/log, членство в группах: mitrofanov, www-data; подрядчик по разработке сайта

    vetrov — Ветров Герман; домен: не доменный пользователь; членство в группах: Administrators, Users; задачи: группа MS ДатаЛайн, администрирование сервера (ночная смена)

    Дополнительно к этому вывод команды справа

    Дополнительно к этому вывод команды справа

  2. Доступы от сервисных пользователей и от программ.

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

    Хорошо

    Плохо

    Использование общего приложения для хранения паролей: Passwordstate (который является бесплатным для 5 или менее пользователей) или Thycotic Secret Server.

    Наличие у ключевых сотрудников копии паролей в KeePassX или KeePassXC на случай недоступности общей системы хранения паролей.

    Хранение паролей в текстовых или XLSX-файлах, особенно второе.

  3. Отдельные учетные записи с урезанными правами для запуска различных приложений. Права должны быть урезаны так, чтобы учетки имели доступ только до минимально необходимых файлов и служб.

    Также можно использовать контейнеры в Podman от отдельного пользователя и документировать сведения об этом. Здесь тоже проверяем, что служебные учетные записи имеют доступ только к тем службам и файлам (в том числе и бинарным), с которыми реально работают.

    Хороший пример настроек прав на Linux

    Плохо для Linux

    Хорошо для Windows

    Плохо для Windows

    adduser limiteduser ## Добавьте пользователя. В имя и фамилию занесите его задачи.

    chsh -s /bin/rbash limiteduser ## Измените стандартную оболочку пользователя на restricted bash

    mkdir /home/limiteduser/bin ## Создайте директорию bin в директории пользователя

    chmod 755 /home/limiteduser/bin ## Установите права на нее

    echo -e 'PATH=$HOME/bin\nexport PATH' >> /home/limiteduser/.bashrc ## Измените PATH пользователя по умолчанию к каталогу bin. Экспортируйте его при старте rbash.

    ln -s /usr/bin/crontab /home/limiteduser/bin/ ## Для работы cron (также добавьте другие необходимые бинарники).

    usermod -L limiteduser ## Отключите пароль для пользователя limiteduser

    chattr +i /home/limiteduser/.bashrc ## Запретите всем (даже root-пользователю) от модификации файла .bashrc пользователя limiteduser в систему мониторинга

    Запускать все от root

    Настроить гранулярные права пользователей и использовать роли в AD

    Запускать все от учетной записи Administrator

    Общая рекомендация для всех учеток: не выдавать учетные записи с правами на запись тем пользователям и системам, которым достаточно чтения. (Капитан Очевидность хотел бы промолчать, но иногда приходится напоминать)

    Также на Linux-сервере настоятельно не рекомендуется сидеть под учетной записью root на продуктивном сервере постоянно. Использовать учетную запись root стоит только тогда, когда в ней есть особая необходимость.

  4. Если это Linux-сервер, то необходимо осуществлять доступ по RSA-ключам.

    Доступ к серверу по SSH должен быть доступен только по ключам, иначе его легко взломать. 

    В рабочей документации указываем, кому какой ключ принадлежит.

    Хорошо:

    MIGeMA0GCSqGSIb3DQEBAQUAA4GMADCBiAKBgF0q349Rnxb+qPDd2msoD0pyAVUD 2sLkxZsIJ3hxKX7u+k9Yzu8fp6ZsvthoQ0rEfQRu8MAHlvcldAghN/ddvDhpirOF t/WxtJzcB8wbriuDjQbVfnMzeY3pZbJAGvtBvH2C9rg/f5uJwA/CrvQ+kpNtaGcp EiN31b3toaW3crpLAgMBAAE=

    Фамилия и имя или название приложения (УЗ)

    MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC4YI0FZXzrx4IBO+lZ94+gL1wX mWrpWEsG4VihXnpPiCdOM3pOc79gSn49G1tHCZFqiq1rcbvWArXfqHNC7AllQv0r OYr8y4iOd8GjrkbvA+qjinyLASyWuV2kzSpRwfwElh9tlG0S9DLVQPDPhV9NYRbS wwlyu3pn69HfIeHJnQIDAQAB

    Фамилия и имя или название приложения (УЗ)

  5. Есть ли панель управления на сервере. Если да, то как к ней обратиться, используется ли двухфакторная аутентификация, кто имеет к ней доступ и какого уровня.

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

    Хорошо:

    Панель управления

    Webmin

    2FA

    Да

    OTP

    У администраторов сервера

Резервные копии и DR

  1. Указываем, какие узлы на резервном копировании, каким решением и с какой частотой бэкапятся. А также фиксируем место хранения копий. Как мы знаем, если бэкапы помещаются в хранилище вместе с основными данными, то такое хранение практически не повышает отказоустойчивость.

    Хорошо

    Частота создания резервных копий

    Каждую субботу в 02:00

    Решения для резервного копирования

    Backupninja в DataLine S3 (кстати, отличное и очень удобное место для хранения резервных копий)

  2. Если был откат на резервную копию, то почему, какие приняли меры, чтобы не допустить повторения.

    Хорошо

    Плохо

    Дата последнего отката на резервную копию

    22.11.2021

    Дата последнего отката на резервную копию: 22.11.2021

    Причина отката

    Хакерская атака

    Принятые меры для исключения повторения

    Смена всех паролей, антивирусная проверка, сканирование Qualys, исправление критических причин из отчета Qualys

    Приложить отчет Qualys.

Сетевая активность и безопасность, доменные записи

  1. Результаты ежедневной проверки на наличие внешнего IP в черных списках. 

    Например, такую проверку можно делать через сайт https://whatismyipaddress.com/blacklist-check.  Если необходим поиск в черных списках с выводом в консоль, то можно использовать скрипт https://github.com/IntellexApps/blcheck

    Если IP обнаружен в списках, то проверяем и фиксируем итоги проверки, не является ли сервер источником атаки. Такой сервер также может быть членом координированного ботнета. До момента активности ботнета сетевая активность сервера будет идентична обычной.

    Хорошо

    Плохо

    Автоматически по cron запускать blcheck и парсить его результаты в систему мониторинга

    Не проверять свое наличие в черных списках, в результате чего у клиентов сервиса будут письма в папке «Спам»

  2. Какие сервисы вещают наружу, для каких подсетей, что это за подсети и каково назначение вещания.

    Хорошо

    SSH и SFTP

    172.23.20.0/24 (ZeroTier VPN)

    HTTP и HTTPS

    0.0.0.0/0

  3. Если на сервере находятся сервисы особой важности, то SSH наружу должен быть запрещен фаерволом и допустим только через VPN.

    Если на отдельный VPN нет средств, рекомендуем использовать виртуализацию сети с помощью продукта open source ZeroTier.

    На Windows для RDP используем слушание сервиса только на VPN-интерфейсе или двухфакторную аутентификацию, а лучше и то и другое. Можно использовать бесплатную от Duo. На моей памяти за почти 2 года она ни разу не сбоила.

Шифрование, защита от вирусов и вторжений

  1. Вирусная обстановка:

    • когда последний раз делалась проверка на вирусы;

    • какой у нее результат;

    • что сделали с зараженными файлами.

    Антивирусные проверки проводим как для Windows, так и для Linux.

    Антивирусная проверка находит только вирусы и трояны. Она может не найти хакерские скрипты, если сервер был атакован профессионалом. Если это произошло, выявить наличие заражения можно только по жалобам, которые придут на сервер в результате атаки.

    Хорошо

    Дата последней проверки на вирусы

    03.11.2021

    Результат

    Зараженных файлов нет

    Следующая планируемая проверка на вирусы

    Через 7 суток

  2. Список подозрений на вторжения.

    Чтобы обезопасить Linux-сервер от возможного взлома, рекомендуем на ежедневной основе использовать один из этих инструментов: RKhunter, IDS, GRSecurity.

  3. Для особо важных серверов следим, что наружу открыты только действительно необходимые сервисы. Для остальных сервисов настраиваем и фиксируем в базе знаний доступ только через VPN.

  4. Если системы требуют SSL-сертификатов, то расписываем по ним такой набор реквизитов:

    Основные параметры

    Издатель

    RapidSSL (GeoTrust)

    Цена покупки*

    1700 рублей

    Название профиля в Личном кабинете

    Кундалеро

    Тип контакта

    Юридическое лицо

    Приобретаемый домен

    fullsuccess.ru

    Скрыть данные в WHOIS

    Нет

    Данные контактного лица

    Имя

    Владимир

    Отчество

    Яковлевич

    Фамилия

    Кузнецов

    Имя (EN)

    Vladimir

    Отчество (EN)

    Yakovlevich

    Фамилия (EN)

    Kuznecov

    Email

    vladimirkuznecov9000@mail.ru

    Телефон

    +79061234567

    Сотовый телефон (если есть)

     —

    Факс (если есть (

     —

    Адрес контакта

    Страна

    Российская Федерация

    Регион

    Московская область

    Индекс

    143903

    Город

    Балашиха

    Адрес

    Монтажный проезд, владение 1

    Данные организации

    Наименование компании

    ООО Кундалеро

    Наименование компании (EN)

    Cundalero

    ИНН

    1111111111

    КПП

    111111111

    ОГРН

    1111111111111

    *Если сертификат не самоподписанный.

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

  5. DNS-записи для рабочих доменов: какие и зачем. В DNS-хостинге должна быть возможность экспорта. Если такой нет, то запросите у поддержки DNS-хостинга выгрузку на регулярной основе.

    Хорошо:

    Имя

    TTL, сек

    Тип

    Значение

    Дополнительно

    fullsuccess.ru.

    3600

    A (адрес Internet v4)

    92.242.45.229

    www.fullsuccess.ru.

    3600

    A (адрес Internet v4)

    92.242.45.229

    mx.fullsuccess.ru.

    3600

    A (адрес Internet v4)

    92.242.45.229

    fullsuccess.ru.

    3600

    MX (почтовый сервер)

    mx.fullsuccess.ru.

    priority= 10

    fullsuccess.ru.

    3600

    NS (сервер имен)

    ns4.cloudlite.ru.

    fullsuccess.ru.

    3600

    NS (сервер имен)

    ns5.cloudlite.ru.

    fullsuccess.ru.

    3600

    SOA (начальная запись зоны)

    polidendron.ya.ru.

    mname = ns.cloudlite.ru.; serial = 2021072600

Публикации данных для внутреннего и общего доступа

  1. Если делаются регулярные выгрузки, то указываем: какие, куда и для каких систем или отделов. Если выгрузки редкие, но имеют важное значение, тогда указываем кратко, для чего это может быть полезно.

    Если ведется рассылка в мессенджеры, то по каким темам, с какой частотой, из какого места, работает ли еще этот сотрудник.

    Хорошо для Linux

    Хорошо для Windows

    Вывод команд:

    df -h

    Отправка логов kernel на NFS, ОС и Apache2 в syslog (адрес syslog)

    Get-Volume

  2. Если есть сайт или email-рассылка, то указываем ответственных лиц, которые уполномочены решать жалобы. Если это информационный сайт со статьями, также должен быть ящик abuse@домен для работы с жалобами на материалы на сайте.

    Хорошо

    Плохо

    Работа с техническими жалобами

    Смирнов Владимир

    Не написать о работе с жалобами, если есть сайт или email-рассылка

    Работа с жалобами на авторские права

    Егорова Кристина

  3. Если компания проводит email-рассылки, указываем:

    • назначение рассылок,  

    • список адресатов (если он очень большой, то указать, где его посмотреть),  

    • как посмотреть параметры документации,

    • есть ли в письмах ссылки, чтобы отписаться.

    Хорошо

    Плохо

    Периодически выгружать список адресатов, чтобы при появлении жалобы легко найти, чья она

    Не выгружать список адресатов

  4. Если сервер регулярно подключается к другим для реализации какой-то задачи, то с какой частотой, постоянна ли частота и что это за задача.

    Хорошо:

    Подключения

    Сбор данных для системы статистики с сайтов магазинов конкурентов

    Инструмент

    Beautiful Soup

    Приложить список сайтов, к которым обращается Beautiful Soup

Да, здесь описано много пунктов. Но если вести документацию как следует, то получаем 4 преимущества:

  1. Новый человек быстро разберется с новым для него сервером.

  2. Сразу понятно, что делали и часть того, что предстоит сделать.

  3. Потребуется меньше звонков и сообщений в нерабочее время.

  4. Специалист более низкого уровня сможет поддерживать систему в рабочем состоянии за счет исчерпывающей документации.

© Habrahabr.ru