Пользователь с sudo на Ubuntu: работа не под root

Настройка сервера
Пользователь с sudo на Ubuntu: работа не под root

Создание пользователя с sudo — второй по важности шаг настройки нового сервера после смены пароля. Свежий VPS обычно выдаётся с единственной учётной записью root, и велик соблазн так под ней и остаться: всё разрешено, ничего не спрашивает. Проблема в том, что root — это одновременно и самая атакуемая учётка в интернете, и учётка без права на ошибку: одна опечатка в команде удаления — и сервер мёртв. В этой инструкции создадим на Ubuntu 24.04 обычного пользователя, дадим ему права sudo, перенесём SSH-ключи и запретим вход root по SSH.

Почему не стоит работать под root

Отказ от root — не паранойя, а базовая гигиена, у которой три конкретные причины:

  • Боты атакуют именно root. Логин root есть на каждом Linux-сервере, поэтому в словарях брутфорса он стоит первым. Загляните в journalctl -u ssh на любом сервере с открытым 22-м портом: тысячи попыток входа root ежедневно. Уникальное имя пользователя ботам ещё нужно угадать.
  • Нет защиты от своих ошибок. Под root опечатка вроде лишнего пробела в rm -rf уничтожает систему молча. Под обычным пользователем та же команда упрётся в «Permission denied», а осознанное действие потребует явного sudo.
  • Нет аудита. Когда все ходят под root, невозможно понять, кто выполнил команду. sudo пишет каждое повышение привилегий в журнал — journalctl SYSLOG_IDENTIFIER=sudo покажет, кто, когда и что запускал.

При этом полный root-доступ вам по-прежнему нужен — просто по запросу через sudo, а не постоянно. Что вообще даёт root на VPS и почему это главное преимущество перед виртуальным хостингом — в статье «Root-доступ к серверу: что это и что с ним можно делать». На KVM-серверах Cheap-Host root полный и настоящий: своё ядро, свои модули, любые пакеты — уже на тарифе Start за 450 ₽/мес.

Как работает sudo

sudo (substitute user & do) выполняет одну команду от имени другого пользователя, по умолчанию — root. Право пользоваться sudo определяется файлом /etc/sudoers. В Ubuntu там из коробки есть строка:

%sudo   ALL=(ALL:ALL) ALL

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

Создаём пользователя с sudo: пошагово

Шаг 1. Создайте пользователя

Подключитесь к серверу под root и выполните:

adduser deploy

Имя deploy — для примера; подойдёт любое, кроме очевидных admin/user/test, которые боты тоже перебирают. Команда создаст домашний каталог /home/deploy, скопирует шаблоны из /etc/skel и попросит задать пароль. Придумайте длинный пароль — он будет нужен для sudo даже после перехода на вход по ключам.

Именно adduser, а не useradd: низкоуровневый useradd без дополнительных флагов не создаёт домашний каталог и не задаёт пароль — он предназначен скорее для скриптов.

Шаг 2. Добавьте пользователя в группу sudo

usermod -aG sudo deploy

Флаг -aG критичен: -G задаёт список групп, а -a (append) добавляет к существующим. Если забыть -a, пользователь будет исключён из всех прочих групп. Проверьте результат:

groups deploy
# deploy : deploy sudo

Шаг 3. Перенесите SSH-ключи

Если вы входите на сервер по ключу, новый пользователь про него ещё не знает. Скопируйте авторизованные ключи из профиля root:

mkdir -p /home/deploy/.ssh
cp /root/.ssh/authorized_keys /home/deploy/.ssh/
chown -R deploy:deploy /home/deploy/.ssh
chmod 700 /home/deploy/.ssh
chmod 600 /home/deploy/.ssh/authorized_keys

Права важны: sshd отказывается использовать authorized_keys, если каталог или файл доступны на запись кому-то, кроме владельца. Если ключей у вас ещё нет — самое время их завести, инструкция: «SSH-ключи вместо пароля: настройка за 5 минут».

Шаг 4. Проверьте вход и sudo

Не закрывайте текущую root-сессию — это ваша страховка. В новом окне терминала подключитесь свежим пользователем:

ssh deploy@IP_сервера
sudo whoami
# root

Если sudo whoami вернул root — всё работает. Первая команда sudo покажет короткое напоминание об ответственности и спросит ваш пароль; в течение 15 минут повторные вызовы sudo пароль не спрашивают.

Шаг 5. Запретите вход root по SSH

Теперь root-логин по сети можно закрыть. Откройте конфиг sshd:

sudo nano /etc/ssh/sshd_config

Найдите и приведите к виду (раскомментировав при необходимости):

PermitRootLogin no
PasswordAuthentication no

Вторая строка отключает вход по паролям вообще — делайте это только после проверки входа по ключу. Проверьте синтаксис и перезапустите службу:

sudo sshd -t
sudo systemctl restart ssh

Снова не закрывая старую сессию, убедитесь, что вход новым пользователем работает, а ssh root@IP отклоняется. Дополнительные меры против шума ботов — в статье «Смена SSH-порта и другие способы снизить шум ботов».

Тонкая настройка sudo

sudo без пароля

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

sudo visudo -f /etc/sudoers.d/deploy

Содержимое файла:

deploy ALL=(ALL) NOPASSWD:ALL

Это компромисс между удобством и безопасностью: утечка вашей SSH-сессии сразу даёт злоумышленнику root. Безопаснее разрешить без пароля только конкретные команды:

deploy ALL=(ALL) NOPASSWD:/usr/bin/systemctl restart nginx

Полезные приёмы

  • sudo -i — открыть полноценную root-оболочку, когда команд много (не забудьте выйти по exit).
  • sudo !! — повторить предыдущую команду с sudo. Классика после «Permission denied».
  • sudo -l — посмотреть, какие команды вам разрешены.
  • sudo -u www-data whoami — выполнить команду от имени другого пользователя, не только root.

Частые ошибки

СимптомПричинаРешение
«user is not in the sudoers file»Пользователь не в группе sudoПод root: usermod -aG sudo имя
Добавили в группу, но sudo не работаетЧленство в группе применяется при новом входеВыйти и зайти заново (или newgrp sudo)
SSH-ключ не принимается у нового пользователяНеверные права или владелец .sshchmod 700 ~/.ssh; chmod 600 ~/.ssh/authorized_keys; chown -R deploy:deploy /home/deploy/.ssh
Сломали sudoers, sudo падает с ошибкойПравка без visudoВойти под root (консоль в панели хостера) и починить файл через visudo

Отдельный совет: пока вы экспериментируете с sshd_config и sudoers, держите открытой резервную root-сессию или убедитесь, что у хостера есть экстренная консоль. Развернуть тестовый сервер, чтобы отработать процедуру без риска, стоит копейки — NAT VPS у Cheap-Host начинается от 59 ₽/мес, а разворачивается за 45–60 секунд.

FAQ

Чем adduser отличается от useradd?

useradd — низкоуровневая утилита: без дополнительных флагов не создаёт домашний каталог и не спрашивает пароль. adduser — интерактивная обёртка в Ubuntu/Debian, которая делает всё сразу. Для ручной работы используйте adduser.

Почему sudo спрашивает мой пароль, а не пароль root?

sudo проверяет вашу личность, а право на повышение привилегий уже записано в /etc/sudoers для группы sudo. Пароль root не нужен — на Ubuntu он по умолчанию вообще не задан.

Безопасно ли настраивать NOPASSWD?

Для сервера с одним администратором и входом только по ключу — приемлемый компромисс. Безопаснее разрешать без пароля только конкретные команды, а не NOPASSWD:ALL.

Я удалил себя из группы sudo. Что делать?

Если root-вход по SSH ещё работает — зайдите под root и выполните usermod -aG sudo имя. Если нет — используйте экстренную/VNC-консоль в панели хостера.

Нужен ли отдельный пользователь на каждый проект?

Службы должны работать под своими системными пользователями без права входа (так делают nginx, postgres). Людям — по личной учётке на человека, чтобы работал аудит. Общие учётки — антипаттерн.

Вывод

Пять команд — adduser, usermod -aG sudo, перенос ключей, проверка, PermitRootLogin no — и ваш сервер перестаёт быть мишенью номер один для брутфорса, а каждая привилегированная команда оставляет след в журнале. Это десять минут работы, которые окупаются при первом же инциденте.

Если нужен сервер, чтобы применить это на практике, — у Cheap-Host VPS Start за 450 ₽/мес: 6 vCPU, 8 ГБ RAM, 96 ГБ NVMe, полный root на KVM и выдача сервера за минуту. Тарифы — на cheap-host.onl.

Читайте также