Контрольный список действий после установки Linux: Начальная конфигурация сервера
Уровень: Начальный / Средний
Расчетное время: ~40 минут
Цель: Выполнить основную начальную настройку сервера на Linux VPS – усилить безопасность доступа по SSH, создать пользователя sudo, настроить брандмауэр, установить автоматические обновления безопасности и запланировать базовые задачи обслуживания с помощью cron.
Введение
Первые 30 минут после инициализации VPS являются самыми важными. Свежеустановленный сервер Linux полностью открыт: вход с правами root по SSH обычно включен, правила брандмауэра отсутствуют, а пакеты уже устарели. Этот контрольный список действий после установки Linux охватывает каждый важный шаг для подготовки к работе в рабочей среде или среде разработки – от создания пользователя sudo и настройки аутентификации по ключу SSH до включения UFW и планирования автоматических обновлений безопасности. Выполнение этого руководства защитит вас от наиболее распространенных векторов атак перед тем, как вы развернете что-либо сверху.
В этом руководстве рассматриваются VPS-инстансы на базе Ubuntu, Debian и AlmaLinux (совместимые с RHEL).
Предварительные требования
Перед началом убедитесь, что выполнены следующие условия:
- Операционная система: Ubuntu 20.04/22.04/24.04 LTS, Debian 11/12/13 или AlmaLinux 8/9/10
- Доступ: Корневой SSH-доступ к серверу (по паролю или ключу – вы усилите безопасность этого в процессе руководства)
- Локальный компьютер: Доступен SSH-клиент (ssh в Linux/macOS, PuTTY или Windows Terminal в Windows)
- Необходимые знания: Базовое использование командной строки Linux – навигация по каталогам, редактирование файлов с помощью nano
- Расчетное время: ~40 минут на первое выполнение
Это руководство протестировано на Ubuntu 24.04 LTS, Debian 12/13 и AlmaLinux 9/10. Шаги идентичны, если не указано иное.
Шаг 1: Установка имени хоста сервера
Правильное имя хоста делает логи читаемыми и предотвращает путаницу при управлении несколькими серверами.
Сначала обновите /etc/hosts, чтобы система могла локально разрешать свое новое имя хоста. Откройте файл:
sudo nano /etc/hosts
Добавьте или обновите строку для 127.0.1.1 (или 127.0.0.1, если 127.0.1.1 не существует), чтобы она соответствовала вашему новому имени хоста. Например, если вы планируете использовать web-01:
127.0.1.1 web-01
Сохраните и выйдите (Ctrl+O, Enter, Ctrl+X).
Затем задайте имя хоста глобально с помощью hostnamectl:
sudo hostnamectl set-hostname <YOUR_HOSTNAME>
Убедитесь, что оно было применено:
hostnamectl
Ожидаемый вывод:
Static hostname: web-01 Icon name: computer-vm Chassis: vm Machine ID: a1b2c3d4e5f6... Boot ID: ... Operating System: Ubuntu 24.04.1 LTS Kernel: Linux 6.8.0-31-generic Architecture: x86-64
Многие службы, включая Postfix (почта) и инструменты для работы с SSL-сертификатами, такие как Certbot, зависят от возможности локального разрешения имени хоста. Обновление /etc/hosts перед запуском hostnamectl помогает избежать скрытых проблем с разрешением имени.
Шаг 2: Обновление всех пакетов
Немедленно выполните полное обновление системы. Пакеты, поставляемые со свежим образом VPS, почти всегда устарели.
Ubuntu/Debian (APT):
sudo apt update && sudo apt upgrade -y
AlmaLinux/RHEL (DNF):
sudo dnf update -y
После завершения обновления проверьте, требуется ли перезагрузка.
Debian/Ubuntu:
cat /var/run/reboot-required 2>/dev/null && echo "Reboot required" || echo "No reboot needed"
AlmaLinux/RHEL:
sudo dnf install -y dnf-utils needs-restarting -r
Если требуется перезагрузка, перезагрузите систему сейчас, прежде чем продолжить – некоторые обновления ядра и библиотек вступают в силу только после перезапуска:
sudo reboot
Пропуск обязательной перезагрузки означает, что используемое ядро и некоторые библиотеки останутся в старой версии. Даже после обновления это может оставить известные уязвимости без исправления.
Шаг 3: Создание пользователя Sudo
Входить как root для повседневной работы небезопасно и является плохой практикой. Создайте обычного пользователя и предоставьте ему права sudo.
3.1 Добавление пользователя
sudo adduser <YOUR_USERNAME>
В Ubuntu/Debian команда предложит вам установить пароль и заполнить необязательные контактные поля. Заполните пароль; остальное пропустите, нажав Enter.
В AlmaLinux/RHEL adduser является символической ссылкой на useradd и запускается неинтерактивно без запроса пароля, оставляя учетную запись заблокированной. Вы должны установить пароль вручную:
sudo passwd <YOUR_USERNAME>
3.2 Предоставление прав sudo
Ubuntu/Debian – добавьте пользователя в группу sudo:
sudo usermod -aG sudo <YOUR_USERNAME>
AlmaLinux/RHEL – добавьте пользователя в группу wheel:
sudo usermod -aG wheel <YOUR_USERNAME>
3.3 Проверка доступа
Переключитесь на нового пользователя и протестируйте sudo:
su - <YOUR_USERNAME> sudo whoami
Ожидаемый вывод:
root
Если вы видите root, пользователь имеет рабочие права sudo. Теперь вы можете выйти из сессии root:
exit
В AlmaLinux членство в группе wheel определяется в /etc/sudoers строкой %wheel ALL=(ALL) ALL, которая включена по умолчанию. В Ubuntu/Debian группа sudo выполняет ту же функцию.
Шаг 4: Настройка аутентификации по ключу SSH
SSH на основе пароля уязвим к атакам методом перебора (brute-force). Аутентификация по SSH-ключу заменяет пароль криптографической парой ключей, которую гораздо сложнее атаковать. Это одна из самых важных передовых практик настройки SSH, которую вы можете применить.
4.1 Генерация пары SSH-ключей (на вашем локальном компьютере)
Если у вас еще нет пары ключей SSH, сгенерируйте ее на вашем локальном компьютере (а не на сервере):
ssh-keygen -t ed25519 -C "<YOUR_USERNAME>@<YOUR_HOSTNAME>"
Примите расположение файла по умолчанию. Задайте кодовую фразу при появлении запроса – это защитит ключ, если ваш локальный компьютер когда-либо будет скомпрометирован.
ed25519 – предпочтительный тип ключа. Он быстрее, короче и безопаснее старого rsa (2048 бит). Если ваш SSH-клиент его не поддерживает, используйте ssh-keygen -t rsa -b 4096.
4.2 Копирование открытого ключа на сервер
С вашего локального компьютера скопируйте ключ в учетную запись нового пользователя:
ssh-copy-id <YOUR_USERNAME>@<YOUR_SERVER_IP>
Если ssh-copy-id недоступен (например, в Windows), вручную скопируйте содержимое ~/.ssh/id_ed25519.pub и добавьте его в ~/.ssh/authorized_keys на сервере.
4.3 Проверка входа по ключу
Откройте новое окно терминала (пока не закрывайте текущую сессию) и проверьте вход:
ssh <YOUR_USERNAME>@<YOUR_SERVER_IP>
Вы должны войти в систему без запроса пароля (только кодовая фраза ключа, если вы ее установили).
Не закрывайте существующую SSH-сессию, пока не убедитесь, что вход по ключу работает. Если что-то настроено неправильно, у вас останется текущая сессия для исправления конфигурации.
Шаг 5: Усиление конфигурации SSH и отключение входа Root
После того как вы убедились, что вход по ключу работает (Шаг 4), заблокируйте лишние возможности демона SSH. Отключение входа под root и аутентификации по паролю – один из самых действенных шагов в базовой защите Linux-сервера.
Во всех трех дистрибутивах в файле /etc/ssh/sshd_config в начале есть строка Include /etc/ssh/sshd_config.d/*.conf, и SSH применяет первое найденное значение для каждого параметра. В системе уже присутствуют drop-in файлы дистрибутива, и они переопределяют все, что вы добавите ниже в основном файле:
- Ubuntu 24.04: файл 50-cloud-init.conf задает PasswordAuthentication yes
- AlmaLinux: файл 50-redhat.conf задает X11Forwarding yes
Поэтому редактировать основной файл sshd_config ненадежно. Вместо этого создайте собственный drop-in файл с младшим номером (00-), чтобы он читался первым и переопределял файлы дистрибутива. Один и тот же файл подходит для всех трех дистрибутивов.
Создайте drop-in файл:
sudo tee /etc/ssh/sshd_config.d/00-hardening.conf > /dev/null <<'EOF' PermitRootLogin no PasswordAuthentication no PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys X11Forwarding no EOF
Префикс 00- гарантирует, что этот файл обрабатывается раньше drop-in файлов дистрибутива, таких как 50-cloud-init.conf и 50-redhat.conf. Поскольку SSH использует правило «первое совпадение выигрывает», править эти файлы не требуется.
Проверьте синтаксис конфигурации перед перезапуском службы:
sudo sshd -t
Если команда ничего не вывела, синтаксис корректен. Теперь проверьте, какие параметры демон применит фактически:
sudo sshd -T | grep -iE "permitrootlogin|passwordauthentication|x11forwarding"
Ожидаемый вывод:
permitrootlogin no passwordauthentication no x11forwarding no
Перед перезапуском убедитесь, что все три значения верны. Если passwordauthentication по-прежнему показывает yes, значит ваш файл переопределяется drop-in файлом дистрибутива – проверьте, что 00-hardening.conf сохранен правильно. Не закрывайте текущую SSH-сессию, пока не убедитесь, что вход по ключу все еще работает.
Перезапустите демон SSH, чтобы применить изменения.
Ubuntu 24.04 (активация через сокет):
sudo systemctl restart ssh.socket
Debian и более старые версии Ubuntu:
sudo systemctl restart ssh
AlmaLinux/RHEL:
sudo systemctl restart sshd
Убедитесь, что служба запущена (используйте sshd на AlmaLinux и ssh.socket на Ubuntu 24.04):
sudo systemctl status ssh
Вы должны увидеть Active: active (running) (или active (listening) при активации через сокет).
Теперь убедитесь, что вход под root заблокирован. На локальной машине выполните:
ssh root@<IP_адрес_сервера>
Ожидаемый результат: соединение отклоняется с ошибкой Permission denied (publickey). Вход под root по SSH отключен.
Шаг 6: Настройка брандмауэра (UFW)
UFW (Uncomplicated Firewall) – стандартный инструмент брандмауэра в Ubuntu и Debian. В AlmaLinux по умолчанию используется firewalld, но там также можно установить UFW. Этот шаг охватывает оба подхода.
Перед включением любого брандмауэра убедитесь, что SSH (порт 22) явно разрешен. Ошибка в этом месте приведет к блокировке доступа к серверу.
6.1 UFW (Ubuntu/Debian)
В Debian (особенно в Debian 13) ufw может быть не установлен по умолчанию. Сначала установите его:
sudo apt update && sudo apt install -y ufw
Проверьте текущий статус:
sudo ufw status
Разрешите SSH перед включением брандмауэра:
sudo ufw allow ssh
Разрешите HTTP и HTTPS, если планируете запускать веб-сервер:
sudo ufw allow http sudo ufw allow https
Включите брандмауэр:
sudo ufw enable
Проверьте активные правила:
sudo ufw status verbose
Ожидаемый вывод:
Status: active Logging: on (low) Default: deny (incoming), allow (outgoing), disabled (routed) To Action From -- ------ ---- 22/tcp ALLOW IN Anywhere 80/tcp ALLOW IN Anywhere 443/tcp ALLOW IN Anywhere
6.2 Firewalld (AlmaLinux/RHEL)
Включите и запустите firewalld:
sudo systemctl enable --now firewalld
Разрешите SSH, HTTP и HTTPS:
sudo firewall-cmd --permanent --add-service=ssh sudo firewall-cmd --permanent --add-service=http sudo firewall-cmd --permanent --add-service=https sudo firewall-cmd --reload
Проверьте:
sudo firewall-cmd --list-all
Настройка брандмауэра Linux означает выбор подходящего инструмента для вашего дистрибутива и отказ от одновременного запуска двух демонов брандмауэра. Если вы установили UFW на AlmaLinux, сначала отключите firewalld командой sudo systemctl disable --now firewalld.
Шаг 7: Синхронизация системных часов (NTP)
Точное время требуется для протоколов безопасности (проверка SSL/TLS, Kerberos), правильных временных меток в журналах и запланированных задач. Рассинхронизация часов может вызвать ошибки сертификата SSL, сбои аутентификации и запутанные записи в журналах.
Проверьте текущее состояние синхронизации:
timedatectl status
Ожидаемый вывод:
System clock synchronized: yes NTP service: active
В Ubuntu 24.04 и Debian 13 NTP обычно активен через systemd-timesyncd. В AlmaLinux 10 он обычно активен через chrony. Если timedatectl показывает System clock synchronized: yes и NTP service: active, менять ничего не нужно.
Если NTP service отображается как inactive или n/a, установите и включите chrony – рекомендуемый демон NTP для производственных серверов:
Ubuntu/Debian:
sudo apt install chrony -y sudo systemctl enable --now chrony
В Debian 13 установка chrony может привести к тому, что timedatectl покажет NTP service: n/a. Вместо этого используйте chronyc tracking для проверки.
AlmaLinux/RHEL:
sudo dnf install chrony -y sudo systemctl enable --now chronyd
Подождите 30–60 секунд после запуска службы, затем убедитесь, что синхронизация активна:
chronyc tracking
Ищите Leap status: Normal. Это подтверждает, что системные часы синхронизированы и NTP работает правильно.
Если вы управляете серверами в нескольких часовых поясах, установите часовой пояс системы до настройки NTP, чтобы временные метки в журналах соответствовали ожидаемому местному времени. Пример: sudo timedatectl set-timezone Europe/Warsaw.
Шаг 8: Включение автоматических обновлений безопасности
Обновления вручную работают, но они зависят от того, не забудете ли вы их выполнить. Автоматические обновления безопасности – это подстраховка, особенно важная для необслуживаемых VPS-инстансов. Вот как вы настраиваете автоматические обновления безопасности Linux без ущерба для стабильности.
8.1 Ubuntu/Debian - unattended-upgrades
Установите пакет:
sudo apt install unattended-upgrades -y
Включите и настройте его:
sudo dpkg-reconfigure --priority=low unattended-upgrades
При запросе обязательно выберите Yes. Если выбрать No, необходимый файл конфигурации (/etc/apt/apt.conf.d/20auto-upgrades) создан не будет, а последующие проверки завершатся ошибкой «No such file or directory». Это включает автоматическую установку только обновлений безопасности – обычные функциональные обновления остаются ручными.
Проверьте конфигурацию:
cat /etc/apt/apt.conf.d/20auto-upgrades
Ожидаемый вывод:
APT::Periodic::Update-Package-Lists "1"; APT::Periodic::Unattended-Upgrade "1";
Чтобы проверить без применения изменений:
sudo unattended-upgrade --dry-run --debug
8.2 AlmaLinux/RHEL - dnf-automatic
Установите:
sudo dnf install dnf-automatic -y
Откройте файл конфигурации и установите тип обновления только для безопасности. Сначала сделайте резервную копию:
sudo cp /etc/dnf/automatic.conf /etc/dnf/automatic.conf.bak sudo nano /etc/dnf/automatic.conf
Найдите и установите:
apply_updates = yes upgrade_type = security
Включите и запустите таймер:
sudo systemctl enable --now dnf-automatic.timer
Проверьте:
sudo systemctl status dnf-automatic.timer
Шаг 9: Планирование базового обслуживания с помощью Cron
Cron обрабатывает запланированные задачи – то, что должно происходить регулярно без вмешательства человека. Простое задание cron для таких задач, как очистка журналов или проверка обновления сертификатов, является стандартной практикой на любом управляемом сервере.
Подготовка в AlmaLinux/RHEL:
На чистой системе AlmaLinux 10 nano может быть не установлен, и crontab -e откроет vi. Чтобы использовать nano вместо этого, выполните эту единственную строку, чтобы запустить его в правильной последовательности и убедиться, что переменная среды сохраняется:
sudo dnf install nano -y && export EDITOR=nano && crontab -e
Для других систем (таких как Ubuntu/Debian) просто откройте crontab для текущего пользователя:
crontab -e
При первом запуске (в Ubuntu/Debian) вам будет предложено выбрать редактор. Выберите nano (вариант 1).
Примеры распространенных заданий cron
Запускать задачу каждую ночь в 2:00:
0 2 * * * /usr/local/bin/my-maintenance-script.sh >> /var/log/maintenance.log 2>&1
Еженедельно обновлять сертификаты SSL (для пользователей Certbot):
0 3 * * 0 certbot renew --quiet >> /var/log/certbot-renew.log 2>&1
Ежемесячно удалять временные файлы:
0 4 1 * * find /tmp -type f -atime +30 -delete
Cron использует формат minute hour day-of-month month day-of-week command. Часть >> /var/log/task.log 2>&1 перенаправляет stdout и stderr в файл журнала, поэтому вы можете проверить, что произошло.
Убедитесь, что ваши задания cron зарегистрированы:
crontab -l
Вы должны увидеть добавленные вами записи. Cron считывает файл автоматически – перезагрузка не требуется. Чтобы проверить, работает ли служба cron, используйте:
Ubuntu/Debian:
sudo systemctl status cron
AlmaLinux/RHEL:
sudo systemctl status crond
Проверка
Пройдитесь по этому контрольному списку, чтобы убедиться, что все было применено правильно:
Проверьте имя хоста:
hostnamectl | grep hostname
Убедитесь, что вход root по SSH и аутентификация по паролю отключены (это проверяет активную конфигурацию во время выполнения):
sudo sshd -T | grep -iE "permitrootlogin|passwordauthentication"
Ожидается:
permitrootlogin no passwordauthentication no
Убедитесь, что служба SSH работает:
# Для Ubuntu 24.04: sudo systemctl status ssh.socket # Для Debian / Старых версий Ubuntu: sudo systemctl status ssh # Для AlmaLinux: sudo systemctl status sshd
Проверьте статус брандмауэра (Ubuntu/Debian):
sudo ufw status verbose
Проверьте синхронизацию NTP:
timedatectl status | grep -E "synchronized|NTP"
Ожидается:
System clock synchronized: yes NTP service: active
Проверьте автоматические обновления (Ubuntu/Debian):
cat /etc/apt/apt.conf.d/20auto-upgrades
Список активных заданий cron:
crontab -l
Откат
Чтобы отменить конкретные шаги, если что-то пошло не так:
Повторное включение входа root по SSH (если вы заблокировали себя и восстанавливаете доступ через консоль):
# Временно возвращаем вход root/паролем для восстановления доступа sudo rm /etc/ssh/sshd_config.d/00-hardening.conf sudo sshd -t # Перезапустите SSH (выберите вариант для вашей системы): sudo systemctl restart ssh.socket # Ubuntu 24.04 sudo systemctl restart ssh # Debian / старые Ubuntu sudo systemctl restart sshd # AlmaLinux/RHEL
Отключение UFW:
sudo ufw disable
Удаление unattended-upgrades (Ubuntu/Debian):
sudo apt remove unattended-upgrades -y
Удаление dnf-automatic (AlmaLinux):
sudo systemctl disable --now dnf-automatic.timer sudo dnf remove dnf-automatic -y
Удаление задания cron:
crontab -e # Удалите соответствующую строку, сохраните и выйдите
Повторное включение входа root или аутентификации по паролю отменяет большую часть усилений безопасности, выполненных в этом руководстве. Делайте это только временно для восстановления доступа, а затем снова заблокируйте эти возможности.
Заключение
На этом полный контрольный список действий после установки Linux завершен. Теперь у вас есть сервер с правильным именем хоста, полностью обновленными пакетами, пользователем sudo (не root), настроенной аутентификацией по SSH-ключу, отключенным входом для root, настроенным брандмауэром, синхронизированным NTP, запущенными автоматическими обновлениями безопасности и расписанием cron, готовым к расширению. Это базовая конфигурация сервера Linux после установки, которая должна быть на каждом VPS, прежде чем на нем будет развернуто что-либо еще.
Отсюда логические следующие шаги зависят от того, для чего предназначен сервер:
- Веб-сервер: Установите Nginx или Apache, настройте виртуальный хост и настройте SSL с помощью Certbot
- База данных: Установите и усильте защиту MySQL/MariaDB или PostgreSQL
- Мониторинг: Настройте агрегацию журналов (например, logrotate) или легковесный агент мониторинга
- Управление доступом: Просмотрите конфигурацию sudoers и добавьте членов команды, используя тот же шаблон из Шага 3
Начальная настройка сервера Linux на этом не заканчивается – она развивается по мере расширения роли сервера. Но эта базовая линия является обязательной отправной точкой.
Версия документа: 1.0
Последнее обновление: Май 2026
Владелец: Команда технической документации