Контрольний список дій після встановлення Linux: Початкова конфігурація сервера | INTROSERV
EUR
european

EUR

usa

USD

Ukraine Ua
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-bit). Якщо ваш 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
  • ukraine
  • 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