Что сделать после установки 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, а пароли отключают после проверки входа по ключу.