Как создать администратора (sudo) в Ubuntu и Linux

Две команды от пользователя, у которого уже есть sudo:

sudo adduser alice
sudo usermod -aG sudo alice

Вместо alice подставьте нужное имя. В Ubuntu (24.04 и 26.04 LTS) и Debian этого хватит: /etc/sudoers даёт группе sudo все права root. В Fedora, RHEL, CentOS, Rocky и AlmaLinux группа называется wheel.

Я проверил все команды на Ubuntu 24.04 и 26.04, Debian 12 и 13, Fedora 45, AlmaLinux 9 и 10.

Что спрашивает adduser

adduser создаёт группу и домашнюю директорию пользователя, ставит шелл /bin/bash и спрашивает:

  • пароль, два раза;
  • Full Name, Room Number, Work Phone, Home Phone, Other — каждое поле можно пропустить по Enter;
  • Is the information correct? [Y/n] — Enter.

Вместо usermod можно написать sudo adduser alice sudo: сначала пользователь, потом группа.

Как создать администратора без вопросов

В скриптах удобнее useradd. Без -m он не создаст домашнюю директорию, а шелл по умолчанию в Ubuntu — /bin/sh. Поэтому оба флага пишем явно:

sudo useradd -m -s /bin/bash -G sudo alice
sudo passwd alice

passwd спрашивает пароль в терминале. В скрипте берите chpasswd, а пароль держите в переменной, чтобы его не было в тексте скрипта и в списке процессов:

printf '%s:%s\n' alice "$ALICE_PASSWORD" | sudo chpasswd

Пишите printf, а не echo: в /bin/sh на Ubuntu и Debian echo портит обратные слэши в пароле.

Для аккаунта, который будет входить только по SSH-ключу:

sudo adduser --disabled-password --gecos "" alice
sudo usermod -aG sudo alice

Пароля у такого пользователя нет, а sudo его спросит. Задайте пароль командой sudo passwd alice или настройте sudo без пароля (ниже).

Как проверить, что у пользователя есть sudo

groups alice
sudo -l -U alice

В выводе groups должна быть группа sudo (в Fedora и RHEL — wheel), а в выводе sudo -l -U — строка (ALL : ALL) ALL (в Fedora и RHEL — (ALL) ALL). Для обычного пользователя будет User alice is not allowed to run sudo. Последняя проверка — войти под alice и запустить команду через sudo:

su - alice
sudo whoami   # выведет root

«alice is not in the sudoers file»: нужно перелогиниться

В классическом sudo (Ubuntu 24.04, Debian, Fedora, RHEL) новые группы подхватываются только при входе в систему. Если у alice уже открыта сессия, usermod её не изменит: groups внутри сессии покажет старый список, а sudo ответит alice is not in the sudoers file. Пусть выйдет и зайдёт заново или переподключится по SSH. Команда groups alice читает /etc/group и показывает sudo сразу, поэтому по ней проблему не видно.

В Ubuntu 26.04 по умолчанию стоит sudo-rs. Он читает /etc/group при каждом вызове, так что в открытой сессии права появляются сразу. Пользователю без прав он отвечает I'm sorry alice. I'm afraid I can't do that.

Debian: если sudo не установлен

Те же команды и та же группа sudo. Подвох в установщике: если задать пароль root, он не ставит sudo и не добавляет вашего пользователя в группу. Исправляем из-под root:

su -
apt install sudo
usermod -aG sudo alice

Пишите su - с дефисом. Обычный su в Debian оставляет ваш PATH без /usr/sbin, и вы получите usermod: command not found.

Fedora, RHEL, CentOS: группа wheel

sudo useradd alice
sudo passwd alice
sudo usermod -aG wheel alice

Здесь adduser — ссылка на useradd. Он ничего не спрашивает и оставляет аккаунт без пароля, так что passwd не пропускайте. Домашнюю директорию он создаёт сам, шелл по умолчанию — /bin/bash.

sudo без пароля

Правило кладём в /etc/sudoers.d, но сначала проверяем синтаксис:

t=$(mktemp)
echo 'alice ALL=(ALL) NOPASSWD:ALL' > "$t"
sudo visudo -cf "$t" && sudo install -m 0440 "$t" /etc/sudoers.d/alice
rm "$t"

visudo -cf выведет parsed OK или покажет, где ошибка. mktemp создаёт файл, в который можете писать только вы. Файл с постоянным именем вроде /tmp/alice может заранее создать другой пользователь, и вы установите его правило. Точку в имени файла не ставьте: sudo пропускает файлы в /etc/sudoers.d, в имени которых есть . или которые кончаются на ~. Файл alice.conf молча не сработает. Если правите руками, открывайте через sudo visudo -f /etc/sudoers.d/alice: файл с ошибкой он не сохранит.

SSH-ключ для нового пользователя

Со своего компьютера, если сервер пускает по паролю (как это включить):

ssh-copy-id alice@server

Если ключа ещё нет, создайте его командой ssh-keygen -t ed25519 (подробнее про SSH-ключи на Mac).

Если у alice нет пароля, ssh-copy-id не залогинится. Тогда добавьте ключ на сервере из-под администратора:

sudo mkdir -p /home/alice/.ssh
echo 'ssh-ed25519 AAAA... you@laptop' | sudo tee -a /home/alice/.ssh/authorized_keys
sudo chown -R alice:alice /home/alice/.ssh
sudo chmod 700 /home/alice/.ssh
sudo chmod 600 /home/alice/.ssh/authorized_keys

Если у .ssh или authorized_keys есть права на запись для всех (например, 777 или 666), sshd проигнорирует ключ и ответит Permission denied.

Как забрать права администратора

sudo gpasswd -d alice sudo     # в Fedora и RHEL — wheel
sudo rm /etc/sudoers.d/alice   # если создавали этот файл

В классическом sudo уже открытые сессии alice сохраняют sudo, пока она не выйдет из системы. sudo pkill -KILL -u alice завершит их вместе со всеми её процессами. В Ubuntu 26.04 (sudo-rs) права пропадают сразу.

В Ubuntu и Debian то же делает sudo deluser alice sudo. Удалить аккаунт вместе с домашней директорией: sudo deluser --remove-home alice в Ubuntu и Debian, sudo userdel -r alice в любой из этих систем.

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

  • usermod -G sudo alice без -a заменит все дополнительные группы alice одной sudo. Пишите -aG.
  • Для root-шелла хватит sudo -i. sudo su из версии этого поста 2017 года делает то же самое двумя программами вместо одной.
  • В /etc/sudoers в Ubuntu есть ещё строка %admin, но группы admin по умолчанию нет. Используйте sudo.
Консультирую по продукту, собираю MVP и учу делать продукты самостоятельно. Поработать со мной →