EUR
european

EUR

usa

USD

Russian Ru
Ex. VAT Ex. VAT 0%

Контрольный список действий после установки 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 минут на первое выполнение

Info

Это руководство протестировано на 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

Tip

Многие службы, включая 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

Warning

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

Шаг 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

Info

В 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>"

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

Info

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>

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

Warning

Не закрывайте существующую 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

Warning

Перед перезапуском убедитесь, что все три значения верны. Если 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. Этот шаг охватывает оба подхода.

Warning

Перед включением любого брандмауэра убедитесь, что 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

Info

Настройка брандмауэра Linux означает выбор подходящего инструмента для вашего дистрибутива и отказ от одновременного запуска двух демонов брандмауэра. Если вы установили UFW на AlmaLinux, сначала отключите firewalld командой sudo systemctl disable --now firewalld.

Шаг 7: Синхронизация системных часов (NTP)

Точное время требуется для протоколов безопасности (проверка SSL/TLS, Kerberos), правильных временных меток в журналах и запланированных задач. Рассинхронизация часов может вызвать ошибки сертификата SSL, сбои аутентификации и запутанные записи в журналах.

Проверьте текущее состояние синхронизации:

timedatectl status

Ожидаемый вывод:

System clock synchronized: yes NTP service: active

Info

В 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

Tip

В 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 работает правильно.

Tip

Если вы управляете серверами в нескольких часовых поясах, установите часовой пояс системы до настройки 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

Warning

При запросе обязательно выберите 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

Info

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 # Удалите соответствующую строку, сохраните и выйдите

Warning

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

Заключение

На этом полный контрольный список действий после установки Linux завершен. Теперь у вас есть сервер с правильным именем хоста, полностью обновленными пакетами, пользователем sudo (не root), настроенной аутентификацией по SSH-ключу, отключенным входом для root, настроенным брандмауэром, синхронизированным NTP, запущенными автоматическими обновлениями безопасности и расписанием cron, готовым к расширению. Это базовая конфигурация сервера Linux после установки, которая должна быть на каждом VPS, прежде чем на нем будет развернуто что-либо еще.

Отсюда логические следующие шаги зависят от того, для чего предназначен сервер:

  • Веб-сервер: Установите Nginx или Apache, настройте виртуальный хост и настройте SSL с помощью Certbot
  • База данных: Установите и усильте защиту MySQL/MariaDB или PostgreSQL
  • Мониторинг: Настройте агрегацию журналов (например, logrotate) или легковесный агент мониторинга
  • Управление доступом: Просмотрите конфигурацию sudoers и добавьте членов команды, используя тот же шаблон из Шага 3

Начальная настройка сервера Linux на этом не заканчивается – она развивается по мере расширения роли сервера. Но эта базовая линия является обязательной отправной точкой.

Версия документа: 1.0
Последнее обновление: Май 2026
Владелец: Команда технической документации

VAT

  • Other

    Ex. VAT

    0%
  • austria

    Austria

    20%
  • Belgium

    Belgium

    21%
  • Bulgaria

    Bulgaria

    20%
  • Croatia

    Croatia

    25%
  • Cyprus

    Cyprus

    19%
  • Czech Republic

    Czech Republic

    21%
  • Denmark

    Denmark

    25%
  • Estonia

    Estonia

    22%
  • France

    France

    20%
  • Finland

    Finland

    24%
  • Germany

    Germany

    19%
  • Greece

    Greece

    24%
  • Hungary

    Hungary

    27%
  • Ireland

    Ireland

    23%
  • Italy

    Italy

    22%
  • Latvia

    Latvia

    21%
  • Lithuania

    Lithuania

    21%
  • Luxembourg

    Luxembourg

    17%
  • Malta

    Malta

    18%
  • Netherlands

    Netherlands

    21%
  • Poland

    Poland

    23%
  • Portugal

    Portugal

    23%
  • Romania

    Romania

    19%
  • Slovakia

    Slovakia

    20%
  • Slovenia

    Slovenia

    22%
  • Spain

    Spain

    21%
  • Sweden

    Sweden

    25%
  • USA

    USA

    0%
european
states
  • germany
  • Español
  • Italiano
  • Poland
  • Русский
  • Slovenski
  • Türkçe
  • kingdom
  • French
  • Hrvatska
  • Other
  • Austria
  • Belgium
  • Bulgaria
  • Croatia
  • Cyprus
  • Czech Republic
  • Denmark
  • Estonia
  • Finland
  • France
  • Germany
  • Greece
  • Hungary
  • Ireland
  • Italy
  • Latvia
  • Lithuania
  • Luxembourg
  • Malta
  • Netherlands
  • Poland
  • Portugal
  • Romania
  • Slovakia
  • Slovenia
  • Spain
  • Sweden
  • USA