ServerAID
Найти гайд, команду, тег… ⌘ K
Сервер

Что сделать после установки Ubuntu Server: чек-лист первых шагов

Инсталлятор отработал, вы вошли в систему — дальше идут пятнадцать минут, которые определяют, насколько удобно будет жить с этим сервером. Собрали чек-лист: имя хоста и часовой пояс, пользователи и sudo, автообновления безопасности, swap, синхронизация времени и проверка, что всё это применилось.

Установка закончилась, вы вошли в систему по SSH. Сервер уже работает, но пока это заготовка: часовой пояс скорее всего UTC, обновления безопасности не ставятся сами, подкачки нет, а имя хоста может быть сгенерировано автоматически. Ниже — порядок действий, который стоит выполнить до того, как разворачивать на сервере что-то полезное.

Обновляем систему

Первым делом — свежие пакеты. Образ, с которого ставили, почти наверняка старше текущего состояния репозиториев.

sudo apt update
sudo apt upgrade -y
sudo apt autoremove -y

Если в выводе apt upgrade есть строка про перезагрузку либо появился файл-маркер, перезагружаемся сразу — дальше настраивать проще на актуальном ядре:

ls /var/run/reboot-required 2>/dev/null && sudo reboot

Разница между upgrade и full-upgrade, а также механика репозиториев разобраны в статье про apt update и upgrade.

Задаём имя хоста

Имя хоста попадает в приглашение командной строки, в логи и в заголовки писем — с осмысленным именем ориентироваться заметно проще.

hostnamectl                              # посмотреть текущее
sudo hostnamectl set-hostname web-01     # задать новое

Обязательно добавляем имя в /etc/hosts, иначе часть программ будет подвисать на попытках разрешить собственное имя:

sudo nano /etc/hosts
127.0.0.1   localhost
127.0.1.1   web-01

Проверяем:

hostname -f

Изменение применится к приглашению после нового входа в систему.

Часовой пояс и время

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

timedatectl                              # текущее состояние
timedatectl list-timezones | grep Moscow
sudo timedatectl set-timezone Europe/Moscow

Важнее пояса — синхронизация. Расхождение часов ломает TLS-сертификаты, аутентификацию и делает логи бесполезными при сопоставлении событий между серверами.

timedatectl show -p NTPSynchronized

Ответ NTPSynchronized=yes означает, что время синхронизируется штатным systemd-timesyncd. Для более точной синхронизации ставят chrony:

sudo apt install -y chrony
systemctl is-active chrony
chronyc sources
chronyc tracking

chronyc sources покажет список серверов времени и текущее смещение. Chrony точнее timesyncd и лучше переживает долгие отключения сети, поэтому на боевых серверах обычно берут его.

Локали

Если инсталлятор не настроил локаль, часть утилит будет ругаться Cannot set LC_ALL to default locale.

locale
sudo locale-gen ru_RU.UTF-8 en_US.UTF-8
sudo update-locale LANG=en_US.UTF-8

Системную локаль на сервере разумно держать английской: сообщения об ошибках в таком виде проще искать. Русскую локаль генерируют дополнительно — она нужна, например, PostgreSQL для корректной сортировки.

Пользователи и sudo

Работать под root по SSH — плохая практика. Если при установке создан обычный пользователь, проверьте, что он в группе sudo:

groups $USER

Создать нового при необходимости:

sudo adduser deploy
sudo usermod -aG sudo deploy

Проверить, что sudo работает, не выходя из текущей сессии — иначе есть шанс запереть себя снаружи:

su - deploy -c "sudo -v"

Отдельный полезный приём — разрешить конкретному пользователю выполнять без пароля только нужные команды, а не всё подряд:

sudo visudo -f /etc/sudoers.d/deploy
deploy ALL=(ALL) NOPASSWD: /bin/systemctl restart myapp, /bin/systemctl status myapp

visudo проверяет синтаксис перед сохранением — правьте sudoers только через него, ошибка в этом файле лишает всех прав на повышение. Про механику — в статье про sudo.

Включаем автообновления безопасности

Сервер, который месяцами не получает патчи, — главный источник проблем. Ubuntu умеет ставить обновления безопасности сама.

sudo apt install -y unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades

Проверяем и при необходимости правим /etc/apt/apt.conf.d/50unattended-upgrades:

Unattended-Upgrade::Allowed-Origins {
        "${distro_id}:${distro_codename}-security";
};
Unattended-Upgrade::Remove-Unused-Kernel-Packages "true";
Unattended-Upgrade::Remove-Unused-Dependencies "true";
Unattended-Upgrade::Automatic-Reboot "false";

Automatic-Reboot "false" — осознанный выбор для боевого сервера: обновления ставятся автоматически, а перезагрузку вы планируете сами. Если сервер не критичен, можно разрешить автоперезагрузку в заданное время:

Unattended-Upgrade::Automatic-Reboot "true";
Unattended-Upgrade::Automatic-Reboot-Time "04:00";

Проверить работу вхолостую:

sudo unattended-upgrade --dry-run --debug

Узнать, требуется ли перезагрузка после накопившихся обновлений:

cat /var/run/reboot-required 2>/dev/null
cat /var/run/reboot-required.pkgs 2>/dev/null

Проверяем диски и добавляем swap

Смотрим, как разложились разделы после установки:

lsblk -f
df -h

Полная расшифровка вывода — в статье про lsblk.

Инсталлятор Ubuntu Server часто не создаёт раздел подкачки. Без swap ядро при нехватке памяти начинает убивать процессы, и падает обычно самое ценное — база данных. Создаём файл подкачки:

sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

Проверяем:

swapon --show
free -h

Для сервера с базой данных полезно снизить агрессивность вытеснения:

echo 'vm.swappiness=10' | sudo tee /etc/sysctl.d/99-swappiness.conf
sudo sysctl --system

Подробнее про размер файла и настройки — в статье про swap, про строку в /etc/fstab — в статье про fstab.

Проверяем сеть

Убеждаемся, что адрес статический (или закреплён по DHCP), а DNS работает:

ip a
ip route
resolvectl status

Если адрес выдан по DHCP, а сервер должен иметь постоянный, — правим netplan, см. статьи про netplan и настройку DNS.

Быстрая проверка связности:

ping -c 3 1.1.1.1          # сеть
ping -c 3 ubuntu.com       # сеть + DNS

Если первое работает, а второе нет — проблема именно в DNS.

Базовая защита

Это отдельная большая тема, здесь — минимум, который делают сразу. Разворачивать по-настоящему стоит по статье про закалку Ubuntu Server.

Ключи вместо паролей (подробно):

ssh-copy-id deploy@server        # выполняется с вашей машины

Убедившись, что вход по ключу работает, отключаем пароли и вход под root в /etc/ssh/sshd_config:

PermitRootLogin no
PasswordAuthentication no
sudo sshd -t && sudo systemctl restart ssh

sshd -t проверяет конфиг перед перезапуском — без этой проверки опечатка оставит вас без доступа.

Фаервол (подробно):

sudo ufw allow OpenSSH
sudo ufw enable
sudo ufw status verbose

Порядок важен: сначала разрешаем SSH, потом включаем фаервол. Наоборот — потеря доступа.

Немного удобства

Мелочи, которые экономят время в дальнейшем:

sudo apt install -y htop ncdu tmux curl wget git tree

htop — наглядный монитор процессов, ncdu — интерактивный анализ занятого места, tmux — сессии, переживающие обрыв SSH (пригодится при любом долгом процессе, например при обновлении релиза).

Приветственное сообщение при входе можно почистить — по умолчанию оно многословно:

sudo chmod -x /etc/update-motd.d/10-help-text
sudo chmod -x /etc/update-motd.d/50-motd-news

Финальная проверка

hostnamectl                         # имя, ОС, ядро
timedatectl                         # пояс и синхронизация
free -h                             # память и swap
df -h                               # диски
systemctl --failed                  # упавшие сервисы
sudo ufw status                     # фаервол
systemctl is-enabled unattended-upgrades
sudo journalctl -p err -b --no-pager | head -20

Пустой вывод systemctl --failed и отсутствие ошибок в журнале означают, что сервер готов принимать нагрузку. Разбор журнала — в шпаргалке по journalctl.

Частые вопросы

Что делать сразу после установки Ubuntu Server?

Порядок такой: обновить пакеты, задать имя хоста и часовой пояс, проверить пользователя с sudo, включить unattended-upgrades, создать swap, если его нет, и закрыть SSH ключами вместе с фаерволом.

Первые три пункта занимают пару минут, остальные — ещё десять. После этого сервер можно считать готовым к развёртыванию сервисов.

Нужен ли swap на сервере с большим объёмом памяти?

Да, хотя бы небольшой. Без подкачки при внезапном всплеске потребления ядро запускает OOM killer и убивает самый «дорогой» процесс — обычно это база данных.

Разумный ориентир для сервера с 8 ГБ и больше — файл на 2–4 ГБ плюс vm.swappiness=10, чтобы система пользовалась им только при реальной нехватке памяти.

Как включить автоматические обновления безопасности?

Установить unattended-upgrades и запустить sudo dpkg-reconfigure -plow unattended-upgrades. По умолчанию ставятся только обновления из ветки -security.

Автоматическую перезагрузку на боевом сервере лучше оставить выключенной: обновления применятся сами, а момент перезагрузки вы выберете сами, ориентируясь на файл /var/run/reboot-required.

Менять ли часовой пояс с UTC на местный?

Универсального ответа нет. UTC удобен, когда серверов несколько или они в разных регионах: все логи в одной шкале и нет переходов на летнее время. Местный пояс удобнее, когда сервер один и инциденты разбираются вручную.

Гораздо важнее пояса — работающая синхронизация времени. Проверьте timedatectl show -p NTPSynchronized, а на нагруженных серверах поставьте chrony.

Обязательно ли отключать вход по паролю в SSH?

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

Сначала убедитесь, что вход по ключу работает, и только потом ставьте PasswordAuthentication no. Проверяйте конфиг командой sudo sshd -t до перезапуска службы — иначе опечатка оставит вас без доступа к серверу.

Что запомнить

  • Первые команды — apt update && apt upgrade, затем перезагрузка, если появился /var/run/reboot-required.
  • Имя хоста меняют через hostnamectl и обязательно дублируют в /etc/hosts, иначе часть программ будет подвисать.
  • unattended-upgrades включают всегда, а автоперезагрузку на боевом сервере — нет.
  • Swap нужен даже при большом объёме памяти: без него OOM killer убивает самый крупный процесс, обычно базу.
  • Фаервол включают после разрешения SSH, а пароли отключают после проверки входа по ключу.

Похожие материалы

Сервер

Установка Webmin на Ubuntu Server: веб-панель управления и её безопасность

Webmin даёт браузерный интерфейс к настройкам сервера: пользователи, сервисы, фаервол, cron, диски. Ставим его из официального репозитория, закрываем доступ к порту 10000 и разбираем главное — панель работает с правами root, поэтому вопрос её защиты важнее вопроса установки.

Редакция
Сервер

Установка Zabbix на Ubuntu Server: сервер, PostgreSQL, веб-интерфейс и агент

Разворачиваем систему мониторинга Zabbix на Ubuntu Server 24.04: официальный репозиторий, база PostgreSQL, фронтенд на nginx, первый вход и подключение агентов. Отдельно — почему zabbix-server не стартует после установки и как читать его лог, когда мониторинг сам требует диагностики.

Редакция
Сервер

Ubuntu Server в VirtualBox: создание виртуальной машины и настройка сети

Разворачиваем Ubuntu Server в VirtualBox для учёбы и тестов: параметры виртуальной машины, установка без графики, разбор сетевых режимов NAT и «сетевой мост», проброс порта для SSH с хоста и снапшоты, которые позволяют ломать систему без последствий.

Редакция
Сервер

Графический интерфейс на Ubuntu Server: какую оболочку ставить и стоит ли

Ubuntu Server ставится без графики, но её можно добавить одной командой. Разбираем, чем отличаются варианты оболочек по потреблению памяти, как поставить лёгкий XFCE вместо полного GNOME, как включать графику только по требованию и почему на боевом сервере чаще правильнее обойтись веб-панелью или X11-форвардингом.

Редакция