Перейти к содержимому

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

Как создать пользователя, дать ему права администратора, пустить по ключу SSH, разрешить отдельные команды без пароля, заблокировать и удалить учётную запись.

Содержание

На сервере уже есть учётная запись администратора — ubuntu, debian, almalinux или freebsd (подробнее). Если на сервер заходят несколько человек или программа выкладки, заведите каждому свою учётную запись: видно, кто что делал, и доступ легко забрать у одного, не трогая остальных.

Создать пользователя

sudo useradd -m -s /bin/bash ivan
sudo passwd ivan

-m создаёт домашнюю папку /home/ivan, -s задаёт оболочку. Пароль понадобится для sudo, даже если входить человек будет по ключу.

В Ubuntu и Debian то же самое делает sudo adduser ivan — с вопросами по шагам. Во FreeBSD — sudo adduser, тоже по шагам.

Права администратора

Администраторы в Linux — участники особой группы: sudo в Ubuntu и Debian, wheel в AlmaLinux. Добавьте пользователя в неё:

sudo usermod -aG sudo ivan     # Ubuntu, Debian
sudo usermod -aG wheel ivan    # AlmaLinux

Не пропустите -a: без неё usermod -G заменит все группы пользователя одной. Права появятся при следующем входе. Проверить: войти под ivan и выполнить sudo whoami — ответ должен быть root.

Во FreeBSD группа wheel разрешает только su, для sudo нужно ещё правило:

sudo pw groupmod wheel -m ivan
echo '%wheel ALL=(ALL) ALL' | sudo tee /usr/local/etc/sudoers.d/wheel

Вход по ключу

Попросите у человека открытый ключ — одну строку, которая начинается с ssh-ed25519, — и положите её в его папку:

sudo install -d -m 700 -o ivan -g ivan /home/ivan/.ssh
echo 'ssh-ed25519 AAAA… ivan@laptop' | sudo tee -a /home/ivan/.ssh/authorized_keys
sudo chown ivan:ivan /home/ivan/.ssh/authorized_keys
sudo chmod 600 /home/ivan/.ssh/authorized_keys

Права здесь важны: если папка или файл доступны другим на запись, SSH ключ не примет. Как создать ключ и выключить вход по паролю — в статье Как подключиться к серверу по SSH.

sudo без пароля

У учётной записи, которая создаётся вместе с сервером, sudo пароль не спрашивает. Новым пользователям — спрашивает, и это правильно: украденный ключ без пароля не даёт прав root.

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

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

Строка в файле:

deploy ALL=(root) NOPASSWD: /usr/bin/systemctl restart myapp
Внимание Ошибка в правилах sudo ломает его для всех, и исправить её потом нечем. Поэтому перед правкой откройте второе окно и выполните в нём sudo -i — из него ошибку можно исправить. Имя файла в /etc/sudoers.d/ пишите без точек: файлы с точкой в имени sudo пропускает.

Работать от имени другого пользователя

sudo -i                           # оболочка root
sudo -iu ivan                     # оболочка пользователя ivan
sudo -u www-data php script.php   # одна команда от имени www-data

Вернуться к себе — exit.

Кто есть на сервере

getent passwd | awk -F: '$3 >= 1000 && $3 < 65000 {print $1}'   # обычные пользователи
id ivan                                                     # в каких группах
who                                                         # кто сейчас на сервере

Кто и когда входил по SSH, покажет журнал: Журналы: journalctl и /var/log.

Заблокировать или удалить

sudo usermod -L -e 1 ivan       # заблокировать: не пустит ни пароль, ни ключ
sudo usermod -U -e '' ivan      # разблокировать
sudo userdel -r ivan            # удалить вместе с домашней папкой

Перед удалением проверьте, не работают ли от его имени программы (ps -u ivan) и задания по расписанию (sudo crontab -l -u ivan).

Во FreeBSD: sudo pw lock ivan — заблокировать, sudo pw unlock ivan — разблокировать, sudo rmuser ivan — удалить.

Не нашли ответ? Напишите в поддержку — подскажем.