Современные операционные системы (включая Windows, Unix/Linux, macOS) являются многопользовательскими. Это означает, что в них можно создавать более одного пользователя и работать с каждым пользователем по отдельности, при этом не вмешиваясь в работу других программ и пользователей. Пользователей также можно редактировать — например, изменять их имена, числовые идентификаторы и т.д. В данной статье мы рассмотрим управление пользователями в Linux, используя дистрибутив Ubuntu.
Этот материал для управления пользователями можно использовать для любого сервера или виртуальной машины с предустановленной операционной системой Linux. Подойдет абсолютно любой дистрибутив, так как работа с пользователями организована по единому принципу во всех современных дистрибутивах Unix и Linux.
Как отмечалось выше, в качестве примера в данной статье используется дистрибутив Ubuntu версии 22.04, однако вы можете без проблем использовать и любой другой дистрибутив включая Debian, CentOS, Astra Linux и т.д.
Все команды, которые использовались в данной статье, выполнялись из-под учетной записи root
. Обычные пользователи не могут создавать, удалять или изменять информацию о пользователях и группах. Однако если у обычного пользователя присутствуют права sudo
, то вы также сможете управлять пользователями в системе.
Вы можете протестировать работу с пользователями в Linux, запустив собственный Linux-сервер в Timeweb Cloud.
Чтобы арендовать облачный или выделенный сервер в Timeweb Cloud, необходимо пройти регистрацию.
Переходим по ссылке для регистрации нового пользователя. Мы выберем регистрацию на физическое лицо и заполним следующие данные:
ФИО,
адрес электронной почты,
Также регистрацию можно пройти, воспользовавшись одним из сторонних сервисов: Google-аккаунт, ВКонтакте и GitHub.
После регистрации на указанный адрес почты придет сообщение с ссылкой для активации аккаунта и входа в панель — перейдите по ней.
После того, как учетная запись была создана и активирована, можно арендовать облачный сервер.
1) Переходим на страницу авторизации и входим в аккаунт при помощи логина или адреса электронной почты и пароля или при помощи ВКонтакте, GitHub, Google.
2) После успешной авторизации отобразится панель управления текущего проекта. Переходим в раздел «Облачные серверы» и нажимаем «Создать» или «Добавить».
3) Выбираем операционную систему, которая будет установлена на сервер. В нашем случае нам необходима Ubuntu версии 22.04.
4) Выбираем регион, в котором будет находиться наш сервер. Выбирать рекомендуется тот регион, который ближе всего находится к вам физически. У каждого доступного региона справа вверху отображается ping, т.е. время, необходимое для передачи данных с вашего компьютера на сервер. Чем меньше указанное время, тем быстрее будет осуществляться передача данных.
5) Далее выбираем необходимую конфигурацию для сервера:
6) Далее необходимо решить, будет ли сервер доступен из внешний сети или же только из приватной (частной) сети.
7) По желанию можно оформить дополнительные услуги, включая резервные копии и защиту от DDoS-атак (последняя доступна в Санкт-Петербурге и Москве).
8) Также заранее можно загрузить SSH-ключ, чтобы не входить на север при помощи пароля.
9) Можно задать необходимое имя для сервера которое будет отображаться в панели управления, а также выбрать проект.
10) Для создания сервера необходимо нажать на кнопку «Заказать»:
Если на вашем аккаунте недостаточно средств, то будет выведено предупреждение о необходимости пополнить баланс. После оплаты и создания сервера откроется Дашборд сервера, где можно будет найти IP-адрес, логин и пароль для подключения.
В системах Linux, вне зависимости от того, был ли пользователь создан вручную или в результате установки какой-либо программы, информация о нем хранится в файле /etc/passwd
:
Структура файла passwd
следующая:
имя пользователя (логин):пароль:номер пользователя:номер группы пользователя:дополнительная информация:полный путь до домашней директории:полный путь до командной оболочки
Например:
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
Описание используемых полей в файле passwd
:
Имя пользователя — используется, например, для входа по протоколу SSH или при добавлении в определенную группу пользователей. Разрешенная длина для создания имени — от 1 до 32 символов.
Пароль — в современных дистрибутивах Linux пароли не хранятся в открытом виде. Вместо самого пароля используется один из следующих символов:
/etc/shadow
;Если же у пользователя отсутствует один из вышеперечисленных символов, то у учетной записи данного пользователя отсутствует пароль.
Номер пользователя (UID, User ID) — каждому создаваемому пользователю в системе Linux присваивается уникальный номер (идентификатор) в виде определенной положительной цифры или числа.
Цифра 0 всегда принадлежит пользователю root
. Цифры от 1 до 9 и числа от 10 до 499 являются зарезервированными и выделяются только для псевдопользователей (пользователи, которые создаются вместе с установкой определенных программ, например, PostgreSQL или Nginx). Для обычных пользователей, как правило, выделяются промежутки чисел начиная с 500 или с 1000. Номер пользователя можно изменять (кроме пользователя root
).
Номер группы пользователя (GID, Group ID) — при создании пользователя также создается одноименная группа. Группы необходимы для объединения пользователей с целью группового назначения прав на необходимые объекты в системе (файлы, директории и т.д.). Пользователь должен присутствовать минимум в одной группе.
Как и пользователям, группам присваиваются уникальные числовые номера.
Дополнительная информация — пользователям можно добавлять дополнительную информацию, такую как полное имя, адрес, номер телефона. Данная информация не является обязательной и ее можно не заполнять.
Полный путь до домашней директории — у каждого пользователя в системе Linux есть свой домашний каталог. По умолчанию домашний каталог находится в директории /home
, однако можно выбрать другую директорию, например, /var
или /bin
. Скажем, при установке СУБД PostgreSQL автоматически создается пользователь с именем postgres
, у которого домашней директорией является /var/lib/postgresql
. В качестве имени папки используется имя пользователя.
Полный путь до командной оболочки и запрет на подключение — у пользователя может присутствовать командная оболочка, в которой выполняются команды (обычно это bash
или shell
(sh
)). Также пользователю можно ввести запрет на использование учетной записи для входа на сервер. Для этого используется утилита /bin/false
. Также отключить возможность входа пользователя на сервер можно при помощи утилиты /usr/sbin/nologin
.
Для создания пользователей в Unix- и Linux-системах используется низкоуровневая утилита под названием useradd
.
Например, создадим пользователя с именем alex
:
useradd alex
Если мы посмотрим на содержимое файла /etc/passwd
, то увидим информацию о созданном пользователе:
cat /etc/passwd
Однако стоит обратить внимание на то, что по умолчанию, т.е. без использования ключей, useradd
НЕ создает пользователю пароль и домашнюю директорию. Несмотря на то, что в файле /etc/passwd
есть соответствующее значение, в данном контексте утилита лишь «резервирует» домашний каталог для пользователя.
Для того чтобы задать пользователю пароль, используется утилита passwd
. Зададим нашему пользователю alex
пароль:
passwd alex
Пароль необходимо вводить два раза — сначала вводим сам пароль, а затем подтверждаем. Стоит отметить, что установка пароля обязательна. Без этого авторизоваться под новым пользователем не удастся.
При использовании команды useradd
также можно задать пароль на этапе создания пользователя, используя ключ -p
, однако пароль должен быть предварительно зашифрован. Для этого можно воспользоваться утилитой openssl
(присутствует по умолчанию в большинстве дистрибутивов Linux). Создадим пользователя new-user
, задав ему пароль StrongPassword123$
:
useradd -m -p $(openssl passwd -1 StrongPassword123$) new-user
Проверим файл /etc/passwd
на наличие созданного пользователя new-user
и его пароля:
cat /etc/passwd
Пользователь new-user
был успешно создан и ему задан пароль, о чем говорит символ x
.
Данный метод не рекомендуется использовать в связи с тем, что пароль вводится в открытом виде и доступен в истории команд.
Несмотря на то, что по умолчанию useradd
только создает пользователя, у утилиты существуют ключи, позволяющие задать пользователю домашний каталог и оболочку для входа.
Для того чтобы создать пользователя и задать ему домашний каталог, используются ключи -m
и -d,
после которого можно указать полный путь до предполагаемой директории:
useradd -m -d /home/alex alex
Если не указывать директорию вручную, то домашний каталог пользователя будет создан в директории /home
.
Чтобы задать пользователю оболочку, необходимо использовать опцию -s
, после которой необходимо указать необходимую оболочку.
useradd -s /usr/bin/bash alex
В предыдущем разделе для создания пользователей была использована утилита useradd
. Но использовать ее бывает не очень удобно. Также в руководстве для команды useradd для систем на основе Debian дается указание использовать команду adduser
вместо useradd
.
Команда adduser
, так же как и useradd
, создает пользователей в системе, однако работает на более высоком уровне и является интерактивной. С технической точки зрения, adduser
представляет собой скрипт на языке программирования Perl, который для создания пользователей использует useradd
.
При использовании adduser
достаточно задать имя пользователя, а далее утилита автоматически создаст одноименную группу для пользователя, домашний каталог в директории /home
, предложит задать пароль, а также заполнить такую информацию, как полное имя (Full Name), номер кабинета/комнаты (Room Number), рабочий телефон (Work Phone), домашний телефон (Home Phone) и любую другую информацию, которую вы посчитаете нужной (Other). Если вы не хотите заполнять данную информацию, достаточно нажимать клавишу Enter пока вы не дойдете до финального вопроса: «Is the information correct?». Необходимо ввести Y (да) или n (нет).
Процесс создания пользователя с именем master
при помощи утилиты adduser
представлен на скриншоте ниже:
Использование adduser
значительно облегчает работу по созданию новых пользователей, так как вам не придется использовать дополнительные команды и ключи для создания пользователей.
Чтобы удалить пользователя, необходимо воспользоваться командой userdel
. Удалим пользователя с именем test1
:
userdel test1
По умолчанию команда userdel
не удаляет домашний каталог пользователя. Чтобы удалить не только пользователя, но и его домашний каталог, необходимо использовать ключ -r
:
userdel -r test1
Существует еще один способ удалить пользователя — при помощи команды deluser
. Утилита deluser
доступна только в Debian-based дистрибутивах. Для удаления пользователя при помощи deluser
достаточно выполнить команду ниже, где alex
— имя пользователя, который будет удален:
deluser alex
Так же, как и при работе с командой userdel
, команда deluser
по умолчанию не удаляет домашний каталог пользователя и каталог пользователя в директории /var/mail
, в которой хранятся сообщения электронной почты. Чтобы при удалении пользователя также удалить эти два каталога, необходимо использовать опцию --remove-home
:
deluser --remove-home alex
Как уже было упомянуто ранее, современные дистрибутивы Linux не хранят пароли в открытом виде. Вместо этого система хранит только их хэш-функции. Хэш-функции хранятся в отдельном текстовом файле под названием /etc/shadow
:
Структура файла shadow
следующая:
имя пользователя (логин):зашифрованный пароль в виде хэш-функции:дата последнего изменения пароля в формате Unix-времени (Unix time):минимальное количество дней, оставшихся до смены пароля:максимальное количество дней, в течение которых действует пароль:количество дней до истечения срока действия пароля:количество дней, после которых учетная запись будет отключена:дата истечения срока действия учетной записи
Например:
alex:$y$j9T$fZUYlRu35Llhwr5fNN3QC0$V739g6q33EFgKJhSJVioTMs3jR1.39jS8jliFU9oUO2:19819:0:99999:7:::
Описание используемых полей в файле shadow
:
Имя пользователя — имя пользователя, для которого хранится пароль.
Пароль — зашифрованный пароль в виде хэш-функции. Перед самой хэш-функцией между символами $$
обозначается алгоритм хэширования, который был использован при создании пароля. В Linux-системах поддерживаются следующие алгоритмы хэширования, а также их обозначения:
Дата последней смены пароля — дата, когда пароль был изменен в последний раз. Обозначается в формате Unix-времени (Unix time), которое определяется как количество дней, прошедших с полуночи 1 января 1970 года. Значение 0 говорит о том, что пользователь должен сменить свой пароль при следующем входе в систему. Пустое поле означает, что функция смены пароля отключена.
Минимальное количество дней, оставшихся до смены пароля — количество дней, оставшихся до того, когда пользователю будет разрешено изменить пароль. Пустое обозначение и цифра 0 означают, что минимальный срок действия пароля не указан.
Максимальное количество дней, в течение которых действует пароль — после истечения данного срока пользователь вынужден будет сменить пароль. За несколько дней до истечения срока действия пароля пользователь получает предупреждение о том, что его пароль должен быть изменен.
Количество дней, после которых учетная запись будет отключена — количество дней после истечения срока действия пароля, в течение которых данная учетная запись будет неактивной (отключена).
Дата истечения срока действия учетной записи — дата истечения срока действия учетной записи, которая обозначается в формате Unix-времени (Unix time), означающее количество секунд, прошедших с полуночи 1 января 1970 года.
Для того чтобы задать пользователю пароль или же сменить его, используется утилита passwd
. Чтобы задать пользователю alex
пароль или изменить его, используется единый синтаксис:
passwd alex
Если вы забыли пароль пользователя, то при запуске утилиты passwd
от имени пользователя root
вам не нужно вводить старый пароль.
В этом подразделе рассмотрим, как работать с группами пользователей.
При создании пользователя автоматически создается одноименная группа. Группы можно создавать как отдельный объект. Для создания групп используется команда groupadd
. Создадим группу с именем group1
:
groupadd group1
Вся информация о группах хранится в отдельном текстовом файле /etc/group
:
cat /etc/group
Структура файла group
следующая:
имя группы:наличие пароля у группы:идентификатор группы
Например:
group1:x:1003:
Описание используемых полей в файле group
:
Имя группы — имя группы, которая присутствует в системе. По умолчанию при создании пользователя создается одноименная группа.
Пароль от группы — у группы, как и у пользователя, может быть пароль. В данном случае он будет запрошен при попытке присоединения пользователя к группе. Функционал использования пароля для групп используется крайне редко.
Групповой идентификатор (GID) — у каждой группы присутствует свой уникальный идентификатор, который назначается автоматически при создании группы.
Но вы также можете задать его вручную, используя ключ -g
, после которого необходимо указать число. Создадим группу с именем group2
и назначим ей идентификатор 1010
:
groupadd -g 1010 group2
Если вы добавляете групповой идентификатор вручную, и он оказался занят другой группой, то вы получите соответствующее предупреждение:
groupadd -g 1010 group3
Идентификатор уже существующей группы можно изменить. Для этого используется команда groupmod
. Ранее мы создали группу с именем group2
и назначали ей идентификатор 1010
. Изменим его на 1012
при помощи команды:
groupmod -g 1012 group2
Также группы можно переименовывать. Переименуем группу group2
в newgrp
:
groupmod -n newgrp group2
Проверим, что группа действительно была переименована:
cat /etc/group
Для того чтобы добавить существующего пользователя в группу, необходимо воспользоваться командой usermod
:
usermod -aG newgrp alex
Команда usermod
поддерживает добавление только одного пользователя. Чтобы добавить двух и более пользователей, можно воспользоваться командой gpasswd
. Добавим одновременно двух пользователей — sshd
и tcpdump
— в группу newgrp
:
gpasswd -M sshd,tcpdump newgrp
Существует еще один вариант добавления двух и более пользователей, используя цикл for
:
for user in systemd-resolve landscape; do usermod -a -G newgrp "$user"; done
В команде выше мы добавили пользователей systemd-resolve
и landscape
в группу newgrp
.
Для того чтобы посмотреть, в каких группах присутствует пользователь, необходимо воспользоваться командой groups
, после которой указывается имя необходимого пользователя:
groups new-user
Как можно увидеть на скриншоте выше, пользователь с именем new-user
находится только в одной одноименной группе.
Чтобы удалить пользователя из группы, можно также использовать команду gpasswd
. Удалим пользователя sshd
из группы newgrp
:
gpasswd --delete sshd newgrp
Дополнительно можно воспользоваться утилитой deluser
, которая помимо удаления пользователей также поддерживает и удаление пользователей из группы. Удалим пользователя landscape
из группы newgrp
, используя утилиту deluser
:
deluser landscape newgrp
Удалять пользователей из групп можно вручную. Для этого необходимо открыть на редактирование файл /etc/group
, найти необходимую группу и удалить нужного пользователя. Однако использовать данный метод не рекомендуется в связи с тем, что существует риск удалить нужную информацию, и возникшие ошибки могут привести к неработоспособности системы.
Чтобы удалить группу, используется команда groupdel
. Удалим группу newgrp
:
groupdel newgrp
В операционных системах семейств Unix и Linux организована гибкая работа с пользователями. Существует несколько способов для создания, удаления и модификации пользователей и групп, которые мы рассмотрели в этой статье и привели примеры их использования.