Группы в Linux
Пользователь может принадлежать к двум типам групп:
Первичная группа или группа входа в систему
это группа, которая назначается файлам, создаваемым пользователем. Обычно имя основной группы совпадает с именем пользователя. Каждый пользователь должен принадлежать ровно к одной основной группеВторичная или дополнительная группа
используется для предоставления определенных привилегий пользователей. Пользователь может быть участником не одной или сразу нескольких вторичных групп
Разберемся с первичными
и дополнительными
группами. При создании пользователя обычно создается одноименная группа это первичная группа
пользователя. Первичная группа используется, например, при создании файла.
Если пользователь Вася
имеет первичную группу Вася
и какие-то дополнительные группы, и он создал файл, то к файлу будут иметь доступ все пользователи которые входят в группу Вася
. Но одна из дополнительных групп у Васи
, это группа Разработчики
, и у группы Разработчики
не будет доступа к файлу, так как файл взял права от первичной группы Вася
, а не от дополнительной Разработчики
:
Файловый список пользователей и групп
Есть несколько способов узнать, к каким группам принадлежит пользователь, самый простой, посмотреть физические файлы:
/etc/passwd
основная группа пользователей/etc/group
дополнительные группы пользователей/etc/shadow
соленые хэши паролей
В passwd
хранится информация о пользователях в системе, вот информация о пользователе vadik
:
grep vadik /etc/passwd
Строка вывода:
vadik:x:1000:1000:vadik,,,:/home/vadik:/bin/bash
Разберем строку:
пользователь
| uid
| | gid
| | | группа
| | | | дом.каталог
| | | | | оболочка
| | | | | |
vadik:x:1000:1000:vadik,,,:/home/vadik:/bin/bash
То что после имени идет буква «x
» означает что пароль зашифрован в файле shadow
.
В /etc/group
хранится информация о группах в системе, вот информация о группе vadik
и о дополнительных группах пользователя vadik
:
grep vadik /etc/group
Строки вывода:
adm:x:4:syslog,vadik
cdrom:x:24:vadik
sudo:x:27:vadik
dip:x:30:vadik
www-data:x:33:vadik
plugdev:x:46:vadik
lpadmin:x:122:vadik
lxd:x:134:vadik
vadik:x:1000:www-data
sambashare:x:135:vadik
docker:x:999:vadik
Здесь вначале идет имя группы, потом символ x
обозначает что пароль зашифрован, затем gid
, затем пользователи Linux для которых эта группа является дополнительной. Таким образом группа vadik
имеет gid=1000
, а пользователь vadik
входит в дополнительные группы cdrom
, sudo
и так далее.
В /etc/shadow
хранятся соленые хэши паролей пользователей, вот например строка для vadik
:
grep vadik /etc/shadow
Строки вывода:
vadik:$y$j9T$D0ODw5g7Jo89MrJNg0SDE1$a.VC2c6miPYUS3VAKqe9WaTub17uPIgoZPF0lieOb/8:19512:0:99999:7:::
Строка файла содержит поля разделённые двоеточиями, в полях находится следующая информация:
- имя пользователя
- хеш пароля
- дата последней смены пароля в днях начиная с 1 января 1970 года, чем больше число, тем новее пароль
- минимальный срок действия пароля, если 0 то неограничен
- максимальный срок действия пароля
- период предупреждения о необходимости сменить пароль
- период неактивности пароля — у меня пустое поле, период неактивности отсутствует
- дата истечения срока действия учётной записи — у меня пустое поле, учётная запись никогда не устаревает
- зарезервированное поле для использования в будущем
Команда getent список всех групп системы
Чтобы просмотреть все группы присутствующие в системе, откройте файл /etc/group
. Каждая строка в этом файле представляет информацию для одной группе:
nano /etc/group
Другой вариант — использовать команду getent
которая отображает записи из баз данных настроенных в файле /etc/nsswitch.conf
включая базу данных group
которую мы можем использовать для запроса списка всех групп. Чтобы получить список всех групп, введите следующую команду:
getent group
Команда groups список всех групп в которых состоит пользователь
При выполнении без аргумента, команда распечатает список всех групп к которым принадлежит текущий зарегистрированный пользователь, первая группа в списке это основная группа:
groups
Для получения списка всех групп, к которым принадлежит конкретный пользователь, укажите имя пользователя для команды в качестве аргумента:
groups имя_пользователя
Более подробный вывод дает команда id
, покажет идентификатор пользователя uid
, основную группу пользователя gid
и вторичные группы groups
пользователя:
id имя_пользователя
Чтобы напечатать только имена вместо чисел, используйте параметр -n
, -g
выведет только основную группу а -G
все группы:
id -nG имя_пользователя
Команда gpasswd удаление пользователя из группы
Мы будем использовать gpasswd
, опция -d
сообщает, что нужно выполнить удаление, далее мы указываем пользователя, с которым будем работать и в конце группу, из которой его надо удалить:
gpasswd -d имя_пользователя группа