В Linux пользователь может быть членом разных групп. Прежде всего у каждого пользователя есть как минимум одна - основная группа. (Если у пользователя нет основной группы, он не сможет войти в систему). Обычно при создании пользователя ему в качестве основной назначается одноименная группа.
Также пользователь может принадлежать к дополнительным группам. Самое важное различие между основной группой и другими группами заключается в том, что основная группа автоматически становится группой-владельцем любого нового файла, создаваемого пользователем.
Идентификатор основной группы или GID пользователя хранится в четвертом поле файла /etc/passwd. Например, получим информацию о пользователе superuser1 из этого файла:
eugene@Eugene:~$ sudo grep superuser1 /etc/passwd superuser1:x:1001:1001::/home/superuser1:/bin/sh
Здесь мы видим, что группа пользователя - 1001. Получим значение только четвертого столбца:
eugene@Eugene:~$ sudo grep superuser1 /etc/passwd | cut -d : -f 4 1001
Команда groups позволяет получить все группы пользователя. Данной команде передается логин пользователя. Например, получим список групп пользователя root:
eugene@Eugene:~$ groups root root : root
Как видно, root принадлежит одноименной группе. Если логин не указан, выводится список групп текущего пользователя:
eugene@Eugene:~$ groups eugene adm cdrom sudo dip plugdev users lpadmin
Команда groupadd добавляет новую группу в систему. Она имеет следующий синтаксис:
groupadd [options] GROUP
В качестве обязательного параметра - GROUP
ей передается имя группы. И также могут быть переданы необязательные параметры, из которых можно выделить следующие:
-g, --gid GID
: устанавливает GID для новой группы
-p, --password ПАРОЛЬ
: применяет пароль для новой группы
-U, --users ПОЛЬЗОВАТЕЛИ
: задает список пользователей-членов этой группы
Например, создадим группу "developers":
sudo groupadd developers
Все созданные группы хранятся в файле /etc/group. Если мы его откроем, то увидим в нем содержимое наподобие следующего:
root:x:0: daemon:x:1: bin:x:2: sys:x:3: ................. eugene:x:1000: superuser1:x:1001: developers:x:1002:
Каждая строка в файле описывает определенную группу и состоит из четырех полей, разделенных двоеточием:
Первое поле представлет имя группы
Во втором поле хранится пароль группы (знак ! означает, что для этой группы пароль не разрешен). У большинства групп в поле пароля есть символ x, и это значит, что информация о пароле группы хранится в файле /etc/gshadow. Однако в реальности групповые пароли используются не часто, а в некоторых дистрибутивах Linux вообще нет файла /etc/gshadow
Когда пользователь создает файл, то его основная группа автоматически назначается группой-владельцем этого файла. Это означает, что все члены одной группы обычно могут получить доступ к файлу.
Зачем нужен пароль группы? Если пользователь хочет создать файлы, у которых группа-владелец отличается от основной группы, он может использовать команду newgrp.
Например, newgrp developers
установит в качестве основной группы пользователя "developers". Использование этой команды будет работать без каких-либо вопросов,
если пользователь является членом группы "developers". Однако если пользователь не является членом этой группы, консоль предложит пользователю ввести пароль группы.
Третье поле файла содержит уникальный идентификатор группы или GID
Последнее поле содержит имена членов группы (только для пользователей, для которых это не основная группа)
Проверим наличие группы с помощью команды "cat /etc/group | grep developers"
eugene@Eugene:~$ cat /etc/group | grep developers developers:x:1002:
Здесь мы видим, что GID у группы developers - 1002.
Например, пусть у нас ранее был создан пользователь "superuser1":
sudo useradd superuser1
Добавим этого пользователя в группу "developers":
eugene@Eugene:~$ sudo usermod -aG developers superuser1 eugene@Eugene:~$ id superuser1 uid=1001(superuser1) gid=1001(superuser1) groups=1001(superuser1),1002(developers) eugene@Eugene:~$
А при обращении к группе "developers" мы увидим, что в ней появлися новый пользователь:
eugene@Eugene:~$ cat /etc/group | grep developers developers:x:1002:superuser1
Команда groupmod изменяет группу:
groupmod [options] GROUP
В качестве обязательного параметра - GROUP
ей передается имя группы. И также могут быть переданы необязательные параметры, из которых можно выделить следующие:
-a, --append
: добавляет пользователей, упомянутых опцией -U, в группу, не удаляя уже имеющихся участников
-g, --gid GID
: изменить идентификатор группы на GID
-n, --new-name NEW_GROUP
: измеяет имя группы на NEW_GROUP
-p, --password ПАРОЛЬ
: изменяет пароль
-U, --users ПОЛЬЗОВАТЕЛИ
: список пользователей-членов этой группы
Например, изменение имени группы "developers" на "testers":
sudo groupmod -n testers developers
Команда grpck проверяет целостность группы. Эта команда проверяет, что все группы, перечисленные в файле /etc/group, имеют действительные записи в файле паролей (/etc/passwd). Команда выполняется следующим образом:
sudo grpck -r /etc/passwd
Команда groupdel удаляет группу:
groupdel [options] GROUP
В качестве обязательного параметра - GROUP
ей передается имя группы. Например, удалим группу testers:
sudo groupdel -f testers
Опция -f
позволяет принудительно удалить группу, даже если это основная группа пользователя