Создание пользователя с 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-ключ не принимается у нового пользователя | Неверные права или владелец .ssh | chmod 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.