Для того чтобы идентифицировать физического человека в ОС используются пользователи, в основном это конечно делается из соображения безопасности.

Пользователи имеют имя пользователя (user name) для идентификации человека, и в идеале должно содержать настоящее имя человека. Внутри ОС ядро идентифицирует пользователя по уникальному идентификатору (unique identificator) - UID. Если пользователь ОС используется человеком, то необходимо также задать пароль пользователя, благодаря которому человек идентифицирует себя.

Аккаунт пользователя — это фундаментальная вещь для обеспечения безопасности ОС. Каждый процесс в системе запускается под своим пользователем, так правильно. Каждый файл имеет своего владельца, что обеспечивает сохранность файла. Процесс запущенный под определённым пользователем будет иметь доступ только к тем файлам, к которым он имеет доступ.

О том как управлять пользователями можно почитать тут. О том как управлять группами можно почитать тут.

Типы пользователей ОС 👨‍💻

Пользователи в основном делятся на 3 основных типа:

  • Superuser - для администрирования ОС. По умолчанию им является пользователь root с уникальным UID 0. У него все права в ОС которые только существуют, поэтому в идеале не стоит работать под ним и тем более раздавать пароль от него всем подряд.
  • System user - пользователи, предназначенные для запуска сервисов (daemons). Каждый сервис должен запускаться под своим пользователем, и ни в коем случае не должен быть запущен от root. Также эти пользователи не должны иметь права авторизации в ОС (/sbin/nologin).
  • Regular user - обычные пользователи ОС, под которыми вы сидите каждый день.

UID 🆔

Для просмотра информации о текущем пользователе используется команда id username. Где мы как раз-таки увидим наш UID, для обычного пользователя UID начинается с 1000.

id admin
uid=1000(admin) gid=1000(admin) groups=1000(admin),10(wheel) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

Для того чтобы посмотреть владельца файла можно использовать команду ls -la file, в выводе в 3 колонке будет имя владельца файла.

ls -la /tmp/stderr.txt
-rw-rw-r--. 1 admin admin 42 Nov  1 21:46 /tmp/stderr.txt

Также мы говорили о том, что каждый процесс запускается от своего пользователя, для просмотра этого используется команда ```ps -au``.

ps -au
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         916  0.0  0.0  13656    20 tty1     Ss+  Oct30   0:00 /sbin/agetty -o -p -- \u --noclear tty1 linux
admin     145378  0.0  0.7  24120  2232 pts/0    Ss   Nov01   0:00 -bash
admin     154568  0.0  1.1  55808  3588 pts/0    R+   10:46   0:00 ps -au

В графе USER мы видим пользователя, от которого запущен процесс, т.е. владельца процесса. Но само ядро привязывает пользователя к процессу по UID. Соответственно где-то в системе хранится сопоставление имени пользователя с его UID и находится это в файле /etc/passwd.

/etc/passwd 🔒

Каждая строка хранит информацию о пользователе. Каждая строка разбита на 7 колонок.

/etc/passwd line

  1. Имя пользователя
  2. Пароль пользователя, хранящийся в зашифрованном виде. Хранится в файле /etc/shadow. Это поле всегда имеет значение х.
  3. UID для пользователя
  4. GID - id группы основной
  5. Полное имя пользователя
  6. Домашняя директория пользователя
  7. Оболочка по умолчанию

/etc/shadow 🔑

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

/etc/shadow line

  1. Имя пользователя
  2. Пароль
  3. Через сколько дней можно сменить пароль
  4. Дней до смены пароля
  5. Дней до предупреждения пользователя о смене пароля
  6. Дней до истечения срока действия аккаунта
  7. Зарезервировано для возможного использования в будущем

Среда окружения 🧖🏿

Каждый пользователь может изменять свои настройки по умолчанию. Например, можно задать новый umask или прокинуть какие-то переменные в своё окружение. Для этого пользователь может использовать файл ~/.bash_profile. Символ ~ обозначает домашнюю директорию пользователя /home/user.

Но также системный администратор может выставить настройки для всех пользователей используя директорию /etc/profile.

Также администратор ОС может использовать директорию /etc/skel. Все файлы находящиеся здесь будут скопированы в домашнюю директорию новых пользователей, при их создании.

Теперь немного про группы 👯

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

Как и пользователи группы имеют свой собственный id- GID и также имеют своё имя группы (Group name).

Также, как и пользователи имеют свой файл с сопоставлением имени группы и GID. Этот файл находится по пути /etc/group.

/etc/group 🪄

/etc/group line

  1. Имя группы
  2. Пароль группы, всегда имеет значение х
  3. GID - id группы
  4. Список пользователей которые входят в группу разделённых запятыми

Основные и дополнительные группы (Primary and Supplementary) 🧙

Каждый пользователь имеет только одну основную группу. Это группа становится группой владельцем для создаваемых файлов от имени пользователя.

По умолчанию, когда вы создаёте пользователя также и создаётся основная группа с одноименным названием. Создаваемая группа будет для пользователя основной, и по умолчанию только этот пользователь будет состоять в ней (User Private Group).

Пользователи также могут иметь и дополнительные группы. Кто и в каких дополнительных группах состоит записывается в файле /etc/group.

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