Бесплатная миграция IT-инфраструктуры в облако

Управление пользователями Linux

Александр Бархатов
Александр Бархатов
Технический писатель
07 мая 2024 г.
842
15 минут чтения
Средний рейтинг статьи: 3.5

Современные операционные системы (включая Windows, Unix/Linux, macOS) являются многопользовательскими. Это означает, что в них можно создавать более одного пользователя и работать с каждым пользователем по отдельности, при этом не вмешиваясь в работу других программ и пользователей. Пользователей также можно редактировать — например, изменять их имена, числовые идентификаторы и т.д. В данной статье мы рассмотрим управление пользователями в Linux, используя дистрибутив Ubuntu.

Этот материал для управления пользователями можно использовать для любого сервера или виртуальной машины с предустановленной операционной системой Linux. Подойдет абсолютно любой дистрибутив, так как работа с пользователями организована по единому принципу во всех современных дистрибутивах Unix и Linux. 

Как отмечалось выше, в качестве примера в данной статье используется дистрибутив Ubuntu версии 22.04, однако вы можете без проблем использовать и любой другой дистрибутив включая Debian, CentOS, Astra Linux и т.д.

Все команды, которые использовались в данной статье, выполнялись из-под учетной записи root. Обычные пользователи не могут создавать, удалять или изменять информацию о пользователях и группах. Однако если у обычного пользователя присутствуют права sudo, то вы также сможете управлять пользователями в системе.

Вы можете протестировать работу с пользователями в Linux, запустив собственный Linux-сервер в Timeweb Cloud.

Регистрация в Timeweb Cloud

Чтобы арендовать облачный или выделенный сервер в Timeweb Cloud, необходимо пройти регистрацию. 

Переходим по ссылке для регистрации нового пользователя. Мы выберем регистрацию на физическое лицо и заполним следующие данные:

  • ФИО,

  • адрес электронной почты,

  • номер телефона.

Также регистрацию можно пройти, воспользовавшись одним из сторонних сервисов: Google-аккаунт, ВКонтакте и GitHub.

После регистрации на указанный адрес почты придет сообщение с ссылкой для активации аккаунта и входа в панель — перейдите по ней.

Создание облачного сервера

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

1) Переходим на страницу авторизации и входим в аккаунт при помощи логина или адреса электронной почты и пароля или при помощи ВКонтакте, GitHub, Google.

2) После успешной авторизации отобразится панель управления текущего проекта. Переходим в раздел «Облачные серверы» и нажимаем «Создать» или «Добавить».

3) Выбираем операционную систему, которая будет установлена на сервер. В нашем случае нам необходима Ubuntu версии 22.04.

4) Выбираем регион, в котором будет находиться наш сервер. Выбирать рекомендуется тот регион, который ближе всего находится к вам физически. У каждого доступного региона справа вверху отображается ping, т.е. время, необходимое для передачи данных с вашего компьютера на сервер. Чем меньше указанное время, тем быстрее будет осуществляться передача данных.

Image12

5) Далее выбираем необходимую конфигурацию для сервера:

Image17

6) Далее необходимо решить, будет ли сервер доступен из внешний сети или же только из приватной (частной) сети. 

7) По желанию можно оформить дополнительные услуги, включая резервные копии и защиту от DDoS-атак (последняя доступна в Санкт-Петербурге и Москве).

8) Также заранее можно загрузить SSH-ключ, чтобы не входить на север при помощи пароля.

9) Можно задать необходимое имя для сервера которое будет отображаться в панели управления, а также выбрать проект.

10) Для создания сервера необходимо нажать на кнопку «Заказать»:

Image32

Если на вашем аккаунте недостаточно средств, то будет выведено предупреждение о необходимости пополнить баланс. После оплаты и создания сервера откроется Дашборд сервера, где можно будет найти IP-адрес, логин и пароль для подключения.

Где хранится информация о пользователях

В системах Linux, вне зависимости от того, был ли пользователь создан вручную или в результате установки какой-либо программы, информация о нем хранится в файле /etc/passwd:

Image10

Структура файла passwd следующая:

имя пользователя (логин):пароль:номер пользователя:номер группы пользователя:дополнительная информация:полный путь до домашней директории:полный путь до командной оболочки

Например:

gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin

Описание используемых полей в файле passwd:

Имя пользователя — используется, например, для входа по протоколу SSH или при добавлении  в определенную группу пользователей. Разрешенная длина для создания имени — от 1 до 32 символов.

Пароль — в современных дистрибутивах Linux пароли не хранятся в открытом виде. Вместо самого пароля используется один из следующих символов:

  • x — означает, что пароль хранится в зашифрованном виде вместе с «солью» (произвольный набор символов, который добавляется к хэш-сумме пароля при его создании с целью затруднить подбор пароля при помощи хэш-суммы). Сам зашифрованный пароль хранится в файле /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.

Создание пользователей через useradd

Для создания пользователей в Unix- и Linux-системах используется низкоуровневая утилита под названием useradd.

Например, создадим пользователя с именем alex:

useradd alex

Image14

Если мы посмотрим на содержимое файла /etc/passwd, то увидим информацию о созданном пользователе:

cat /etc/passwd

Image21

Однако стоит обратить внимание на то, что по умолчанию, т.е. без использования ключей, useradd НЕ создает пользователю пароль и домашнюю директорию. Несмотря на то, что в файле /etc/passwd есть соответствующее значение, в данном контексте утилита лишь «резервирует» домашний каталог для пользователя.

Для того чтобы задать пользователю пароль, используется утилита passwd. Зададим нашему пользователю alex пароль:

passwd alex

Image4

Пароль необходимо вводить два раза — сначала вводим сам пароль, а затем подтверждаем. Стоит отметить, что установка пароля обязательна. Без этого авторизоваться под новым пользователем не удастся. 

При использовании команды useradd также можно задать пароль на этапе создания пользователя, используя ключ -p, однако пароль должен быть предварительно зашифрован. Для этого можно воспользоваться утилитой openssl (присутствует по умолчанию в большинстве дистрибутивов Linux). Создадим пользователя new-user, задав ему пароль StrongPassword123$:

useradd -m -p $(openssl passwd -1 StrongPassword123$) new-user

Image11

Проверим файл /etc/passwd на наличие созданного пользователя new-user и его пароля:

cat /etc/passwd

Image26

Пользователь new-user был успешно создан и ему задан пароль, о чем говорит символ x

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

Несмотря на то, что по умолчанию useradd только создает пользователя, у утилиты существуют ключи, позволяющие задать пользователю домашний каталог и оболочку для входа. 

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

useradd -m -d /home/alex alex

Image20

Если не указывать директорию вручную, то домашний каталог пользователя будет создан в директории /home.

Чтобы задать пользователю оболочку, необходимо использовать опцию -s, после которой необходимо указать необходимую оболочку.

useradd -s /usr/bin/bash alex

Image27

Создание пользователей через adduser

В предыдущем разделе для создания пользователей была использована утилита 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 представлен на скриншоте ниже:

Image18

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

Удаление пользователей

Чтобы удалить пользователя, необходимо воспользоваться командой userdel. Удалим пользователя с именем test1:

userdel test1

Image29

По умолчанию команда userdel не удаляет домашний каталог пользователя. Чтобы удалить не только пользователя, но и его домашний каталог, необходимо использовать ключ -r:

userdel -r test1

Image5

Существует еще один способ удалить пользователя — при помощи команды deluser. Утилита deluser доступна только в Debian-based дистрибутивах. Для удаления пользователя при помощи deluser достаточно выполнить команду ниже, где alex — имя пользователя, который будет удален:

deluser alex

Image23

Так же, как и при работе с командой userdel, команда deluser по умолчанию не удаляет домашний каталог пользователя и каталог пользователя в директории /var/mail, в которой хранятся сообщения электронной почты. Чтобы при удалении пользователя также удалить эти два каталога, необходимо использовать опцию --remove-home:

deluser --remove-home alex

Image31

Работа с паролями пользователей

Как уже было упомянуто ранее, современные дистрибутивы Linux не хранят пароли в открытом виде. Вместо этого система хранит только их хэш-функции. Хэш-функции хранятся в отдельном текстовом файле под названием /etc/shadow:

Image9

Структура файла shadow следующая:

имя пользователя (логин):зашифрованный пароль в виде хэш-функции:дата последнего изменения пароля в формате Unix-времени (Unix time):минимальное количество дней, оставшихся до смены пароля:максимальное количество дней, в течение которых действует пароль:количество дней до истечения срока действия пароля:количество дней, после которых учетная запись будет отключена:дата истечения срока действия учетной записи

Например:

alex:$y$j9T$fZUYlRu35Llhwr5fNN3QC0$V739g6q33EFgKJhSJVioTMs3jR1.39jS8jliFU9oUO2:19819:0:99999:7:::

Описание используемых полей в файле shadow:

Имя пользователя — имя пользователя, для которого хранится пароль.

Пароль — зашифрованный пароль в виде хэш-функции. Перед самой хэш-функцией между символами $$ обозначается алгоритм хэширования, который был использован при создании пароля. В Linux-системах поддерживаются следующие алгоритмы хэширования, а также их обозначения:

  • $1$ - MD5
  • $2a$ - Blowfish
  • $2y$ - Blowfish
  • $5$ - SHA-256
  • $6$ - SHA-512
  • $y$ - yescrypt

Дата последней смены пароля — дата, когда пароль был изменен в последний раз. Обозначается в формате Unix-времени (Unix time), которое определяется как количество дней, прошедших с полуночи 1 января 1970 года. Значение 0 говорит о том, что пользователь должен сменить свой пароль при следующем входе в систему. Пустое поле означает, что функция смены пароля отключена.

Минимальное количество дней, оставшихся до смены пароля — количество дней, оставшихся до того, когда пользователю будет разрешено изменить пароль. Пустое обозначение и цифра 0 означают, что минимальный срок действия пароля не указан.

Максимальное количество дней, в течение которых действует пароль — после истечения данного срока пользователь вынужден будет сменить пароль. За несколько дней до истечения срока действия пароля пользователь получает предупреждение о том, что его пароль должен быть изменен.

Количество дней, после которых учетная запись будет отключена — количество дней после истечения срока действия пароля, в течение которых данная учетная запись будет неактивной (отключена).

Дата истечения срока действия учетной записи — дата истечения срока действия учетной записи, которая обозначается в формате Unix-времени (Unix time), означающее количество секунд, прошедших с полуночи 1 января 1970 года.

Для того чтобы задать пользователю пароль или же сменить его, используется утилита passwd. Чтобы задать пользователю alex пароль или изменить его, используется единый синтаксис:

passwd alex

Image4

Если вы забыли пароль пользователя, то при запуске утилиты passwd от имени пользователя root вам не нужно вводить старый пароль.

Управление группами пользователей

В этом подразделе рассмотрим, как работать с группами пользователей.

Создание групп пользователей

При создании пользователя автоматически создается одноименная группа. Группы можно создавать как отдельный объект. Для создания групп используется команда groupadd. Создадим группу с именем group1:

groupadd group1

Image30

Вся информация о группах хранится в отдельном текстовом файле /etc/group:

cat /etc/group

Image24

Структура файла group следующая:

имя группы:наличие пароля у группы:идентификатор группы

Например:

group1:x:1003:

Описание используемых полей в файле group:

Имя группы — имя группы, которая присутствует в системе. По умолчанию при создании пользователя создается одноименная группа.

Пароль от группы — у группы, как и у пользователя, может быть пароль. В данном случае он будет запрошен при попытке присоединения пользователя к группе. Функционал использования пароля для групп используется крайне редко.

Групповой идентификатор (GID) — у каждой группы присутствует свой уникальный идентификатор, который назначается автоматически при создании группы.

Но вы также можете задать его вручную, используя ключ -g, после которого необходимо указать число. Создадим группу с именем group2 и назначим ей идентификатор 1010:

groupadd -g 1010 group2

Image8

Если вы добавляете групповой идентификатор вручную, и он оказался занят другой группой, то вы получите соответствующее предупреждение:

groupadd -g 1010 group3

Image3

Идентификатор уже существующей группы можно изменить. Для этого используется команда groupmod. Ранее мы создали группу с именем group2 и назначали ей идентификатор 1010. Изменим его на 1012 при помощи команды:

groupmod -g 1012 group2

Image22

Переименование групп

Также группы можно переименовывать. Переименуем группу group2 в newgrp:

groupmod -n newgrp group2

Image7

Проверим, что группа действительно была переименована:

cat /etc/group

Image13

Добавление пользователей в группы

Для того чтобы добавить существующего пользователя в группу, необходимо воспользоваться командой usermod:

usermod -aG newgrp alex

Image16

Команда usermod поддерживает добавление только одного пользователя. Чтобы добавить двух и более пользователей, можно воспользоваться командой gpasswd. Добавим одновременно двух пользователей — sshd и tcpdump — в группу newgrp:

gpasswd -M sshd,tcpdump newgrp

Image6

Существует еще один вариант добавления двух и более пользователей, используя цикл for:

for user in systemd-resolve landscape; do usermod -a -G newgrp "$user"; done

Image2

В команде выше мы добавили пользователей systemd-resolve и landscape в группу newgrp.

Просмотр групп пользователя

Для того чтобы посмотреть, в каких группах присутствует пользователь, необходимо воспользоваться командой groups, после которой указывается имя необходимого пользователя:

groups new-user

Image1

Как можно увидеть на скриншоте выше, пользователь с именем new-user находится только в одной одноименной группе.

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

Чтобы удалить пользователя из группы, можно также использовать команду gpasswd. Удалим пользователя sshd из группы newgrp:

gpasswd --delete sshd newgrp

Image19

Дополнительно можно воспользоваться утилитой deluser, которая помимо удаления пользователей также поддерживает и удаление пользователей из группы. Удалим пользователя landscape из группы newgrp, используя утилиту deluser:

deluser landscape newgrp

Image28

Удалять пользователей из групп можно вручную. Для этого необходимо открыть на редактирование файл /etc/group, найти необходимую группу и удалить нужного пользователя. Однако использовать данный метод не рекомендуется в связи с тем, что существует риск удалить нужную информацию, и возникшие ошибки могут привести к неработоспособности системы. 

Удаление группы

Чтобы удалить группу, используется команда groupdel. Удалим группу newgrp:

groupdel newgrp

 Image25

Заключение

В операционных системах семейств Unix и Linux организована гибкая работа с пользователями. Существует несколько способов для создания, удаления и модификации пользователей и групп, которые мы рассмотрели в этой статье и привели примеры их использования.

Хотите внести свой вклад?
Участвуйте в нашей контент-программе за
вознаграждение или запросите нужную вам инструкцию
img-server
07 мая 2024 г.
842
15 минут чтения
Средний рейтинг статьи: 3.5
Пока нет комментариев