Debian. Шпаргалка сисадмина. Операции с пользователями

Debian. Шпаргалка сисадмина. Операции с пользователями
www.debian.org

Разбираем наиболее часто используемые команды в Debian с их описаниями и некоторыми нюансами использования. Расширенная информация доступна в манах, а для вас я собрал самые нужные кейсы использования. Ряд команд могут быть опасны в реальном окружении, поэтому экспериментируйте на безопасных инсталляциях.


Если интересуетесь ОС Debian, рекомендую обратиться к тегу Debian на моем блоге.


Debian. Шпаргалка сисадмина. Операции с пользователями

Для управления пользователями существует ряд основных команд:

  • useradd — регистрирует нового пользователя или изменяет информацию по умолчанию о новых пользователях;
  • usermod — изменяет учётную запись пользователя;
  • userdel — удаляет учётную запись и файлы пользователя;
  • passwd — изменяет пароль пользователя.

И некоторые другие. Далее небольшие примеры использования каждой команды.

useradd

Создаем пользователя test01 (без домашнего каталога и без пароля):

Но учтите, что голая команда даст оболочку /bin/sh, в которой у пользователя не будут работать стрелки и табуляция. Сменить её можно командой chsh -s /bin/bash test01.

Создаем пользователя test01 с домашним каталогом /home/test01:

  • -m — создать домашний каталог пользователя

Если домашний каталог нужен в нестандартном месте, его путь задается ключом -d:

  • -d — домашний каталог новой учётной записи

Примечание: удобство использования ключа -m в том, что автоматически созданный каталог уже будет иметь необходимые права. Это верно, если каталога еще не было. В существующий каталог useradd не скопирует файлы из /etc/skel и не сменит его владельца. Если каталог вы будете создавать отдельно, то придется менять владельца командой chown и возможно разрешения по умолчанию командой chmod. Подробнее читайте в статье Debian. Шпаргалка сисадмина. Права доступа.

Создаем пользователя testuser01 в группе testgroup01 с домашним каталогом, оболочкой /bin/bash и паролем Qwerty123:

  • -g — имя или ID первичной группы новой учётной записи, группа должна существовать
  • -s — оболочка новой учётной записи
  • -p — зашифрованный пароль новой учётной записи

Обратите внимание, ключ -p ждет хеш пароля, а не сам пароль. Получить хеш можно командой openssl passwd -6, как в примере выше, или mkpasswd из пакета whois.

Примечание: если вы создаете учетную запись для служебных задач и не планируете чтобы кто-то под ней реально логинился, то есть смысл установить окружение /usr/sbin/nologin.

Надо отметить, что вводить пароль в открытом виде в командную строку не совсем правильно, лучше использовать две команды последовательно:

В этом случае вы устанавливаете пароль отдельной командой и он не запоминается в кэше командной строки, этот способ более предпочтителен.

useradd или adduser

В Debian вы также можете найти команду adduser. Она сама создает домашний каталог, копирует в него файлы из /etc/skel, ставит оболочку /bin/bash и спрашивает пароль:

Для ручной работы удобнее adduser, а в скриптах и системах автоматизации используйте useradd (в ней нет интерактивного режима и она делает ровно то, что явно задано ключами).

usermod

Смена имени пользователя testuser01 на testuser02:

-l Имя пользователя будет изменено с testuser01 на testuser02. Больше ничего не меняется, домашний каталог и группа сохранят старое имя testuser01. А вот переименовать пользователя целиком с его окружением можно следующим образом:

Изменение первичной группы пользователя testuser02 на группу testgroup02:

-g — Имя или числовой идентификатор новой первичной группы пользователя. Группа с таким именем должна существовать. Все файлы в домашнем каталоге пользователя, принадлежавшие предыдущей первичной группе пользователя, будут принадлежать новой группе. Группового владельца файлов вне домашнего каталога нужно изменить вручную.

Добавление пользователя testuser02 в дополнительную группу sudo:

Важно! Без ключа -a пользователь будет исключен из всех остальных дополнительных групп, включая sudo. Новая группа начнет действовать после повторного входа пользователя в систему.

Удаление пользователя testuser02 из группы docker:

Создание нового домашнего каталога /home/testuser02 пользователя testuser02 и перенос данных из старого в новый:

  • -d — Домашний каталог нового пользователя. Если указан параметр -m, то содержимое текущего домашнего каталога будет перемещено в новый домашний каталог, который будет создан, если он ещё не существует.
  • -m — Переместить содержимое домашнего каталога в новое место. Этот параметр можно использовать только с параметром -d. Команда usermod пытается изменить владельцев файлов и копирует права, ACL и расширенные атрибуты, но после неё всё равно могут потребоваться некоторые ручные действия.

Если у пользователя запущены процессы, usermod откажется менять имя, UID или домашний каталог:

Завершите процессы пользователя и повторите команду:

Владельца файлов crontab и заданий at придется изменить вручную.

userdel

Удаление пользователя testuser02. Домашний каталог и файлы в нем останутся нетронутыми:

Удаление пользователя testuser02 вместе с домашним каталогом и файлами в нем, а также почтового ящика, если он есть:

Файлы пользователя за пределами домашнего каталога, его crontab и правило в /etc/sudoers.d останутся на месте. Найти осиротевшие файлы (у которых больше нет владельца), можно следующим образом:

Правило sudo стоит удалить вручную, потому что с ним есть нюанс: пользователь, созданный позже с тем же именем, сразу получит старые права.

По аналогии с usermod, userdel откажется удалять пользователя с запущенными процессами. Завершите их командой pkill -u testuser02.

В Debian для удаления есть еще команда deluser, пара к adduser. Пользователя вместе с его домашним каталогом можно удалить вот так:

Для удаления файлов утилите нужен пакет perl (без него увидим ошибку).

passwd

Задать пароль для учетной записи testuser02:

Логично, что обычный пользователь может изменить пароль только своей учётной записи, у рута ограничений нет.

В скриптах используйте пайп с передачей пароля команде chpasswd (читает пары имени и пароля из стандартного ввода):

Заставляем пользователя сменить пароль при следующем входе:

Отобразить состояние учетной записи (имя, состояние пароля, дата последнего изменения пароля, сроки действия пароля):

Второе поле показывает состояние пароля:

  • P — пароль задан
  • L — пароль заблокирован
  • NP — пароля нет

Отображение состояния всех учетных записей:

Блокируем пароль пользователя:

Помните, что passwd -l закрывает только вход по паролю, в то время как по ssh-ключу можно заходить как прежде. Чтобы закрыть вход полностью, задайте учетной записи истекший срок действия (вторая команда снимает это ограничение):

Команда passwd -d удаляет пароль полностью. После этого в систему можно войти с пустым паролем.

Об основных командах все. Ниже есть информация о других вспомогательных командах, связанных с пользователями.

Дополнительные команды

  • id — показывает UID, GID и группы указанного пользователя, без имени покажет текущего;
  • groups — список групп пользователя;
  • last, lastb — выводят список последних входов в систему и неудачных попыток входа.

А вот так можно отобразить информацию о трех последних входах в систему пользователя root:

  • lastlog — выводит отчёт о последней регистрации в системе всех или указанного пользователя

В Debian 13 команд last, lastb и lastlog больше нет 1. Утилиту last ставит пакет wtmpdb, вместо lastlog теперь lastlog2 из одноименного пакета, а неудачные попытки входа показывает lslogins:

  • logname — выводит имя, под которым пользователь вошел в систему;
  • whoami — от кого выполняется текущая команда.
  • su — изменяет ID пользователя или делает его суперпользователем
  • sudo, sudoedit — выполняют команду от имени другого пользователя

Переключаться на root лучше командой с дефисом:

Без дефиса su оставляет переменные окружения пользователя, в том числе PATH без каталога /usr/sbin. В такой сессии административные команды не находятся:

Выполнить одну команду от имени root можно так (пример с установкой sudo):

Права на sudo в Debian получает любой участник группы sudo, добавить в нее пользователя можно командой usermod -aG из раздела выше. Иерархию правил удобно организовать отдельными файлами в каталоге /etc/sudoers.d. Но помните, что файлы с точкой в имени или которые заканчиваются на ~, sudo молча пропускает. Иными словами правило в файле deploy.conf работать не будет, а в файле deploy будет.

  • users — выводит имена пользователей, которые сейчас находятся в системе;
  • w — показывает, кто находится в системе и что делает;
  • who — показывает, кто находится в системе.

Использованные источники: