В статье о системе распределения прав доступа в операционных системах Linux мы рассматривали не только пользователей ОС, но и объединения этих пользователей — группы. Разберем подробнее, какие функции выполняют группы пользователей в Linux, и как можно ими управлять.
Смысл объединения пользователей в группы проистекает как раз из необходимости предоставлять права доступа к файлам и папкам разным пользователям системы. Так как пользователей может быть не два и не три, а больше, было принято решения создать группы пользователей и предоставлять права им.
Перечень существующих в операционной системе групп находится в файле /etc/group. Открыть его можно любым текстовым редактором как из терминала, так и из графической среды. А вот для редактирования нужны права администратора.
В Linux есть довольно значительное количество системных групп. Их предназначение заключается в распределении доступа к системным ресурсам. Различное ПО также может создавать группы для распределения доступа. Для начала рассмотрим основные группы, которые встретятся вам при работе с Linux.
Группа | Описание |
adm | Предоставляет доступ к директории /var/log/ |
audio | Управление аудиодрайвером |
cdrom | Предоставляет доступ к CD-ROM |
daemon | От имени данной группы и пользователя daemon запускаются процессы, которым необходима возможность записи на диск |
dialout | Предоставляет доступ к серийному порту |
disk | Предоставляет доступ к дискам (/dev/hd*, /dev/sd*) |
games | Предоставляет играм доступ к папкам для записи (настроек, сохранений и пр.) |
list | Просмотр сообщений в /var/mail/ |
lp | Использование устройств, подключаемых к параллельным портам |
Запись в /var/mail/ | |
man | Добавление страниц в /var/cache/man/ |
nogroup | Применяется для процессов, имеющих прав только на чтение, но не на запись |
plugdev | Возможность монтировать внешние устройства |
proxy | Группа для прокси-серверов, не предоставляет возможности записи на диск |
shadow | Доступ на чтение файла /etc/shadow |
src | Полный доступ к /usr/src/ |
staff | Запись в каталог /usr/local/ |
sync | Выполнение команд из /bin/sync/ |
sys | Доступ к исходникам ядра системы |
tty | Предоставляет доступ на чтение и запись для устройств /dev/vca |
utmp | Запись в файлы /var/log/utmp и /var/log/wtmp |
video | Доступ к работе с видеодрайвером |
wheel | Запуск утилиты sudo |
www-data | Группа веб-сервера, которая открывает доступ на запись в /var/www/ |
Управление группами в Linux осуществляется как через уже известный нам файл /etc/group, так и через графический интерфейс. В разных средах рабочего стола есть разные инструменты для управления группами. Кому интересно, может поискать в сети такие названия, как YaST и Kuser. Мы же рассмотрим управление группами через терминал Linux.
Для создания группы используется команда groupadd. Синтаксис команды очень простой:
groupadd [-g идентификатор [-o]] [-r] [-f] [-p пароль] [-R директория] [-h] [-K ключ=значение] имя_группы
-g — идентификатор создаваемой группы. Представляет из себя целое неотрицательное число. Диапазон, откуда присваиваются числа, задаётся ключами GID_MIN и GID_MAX в файле /etc/login.defs;
-o — опциональный ключ, который указывает на то, что задаваемый идентификатор не является уникальным (дублирует идентификатор другой группы);
-r — создаваемая группа будет системной. Если не указан идентификатор (-g), будет выбран первый из доступных системных идентификаторов;
-f — данная опция приводит к завершению команды с успешным статусом, если указанная группа уже существует и отменяет -g, если такой идентификатор уже используется (будет выбран другой свободный идентификатор);
-p — пароль для группы;
-R — директория измененного корневого каталога;
-h — вывод справки о команде и выход из команды;
-K — позволяет менять значение ключей в файле /etc/login.defs прямо из команды groupadd. Нужно указать ключ, которым хотим изменить, и его новое значение;
имя_группы — может содержать только строчные буквы, символы подчеркивания, тире и символ доллара. Имя группы может начинаться либо со строчной буквы, либо с символа подчеркивания. Максимальная длина имени — 16 символов.
Конечно, для создания группы нужно обладать правами администратора. Большинство из вышеприведенных опций используются нечасто. Обычно команда для создания новой группы выглядит примерно так:
sudo groupadd primer
Таким образом мы создали группу primer. После просмотра файла /etc/group мы увидим, что ей присвоен ближайший свободный GID — 1002.
Итак, состав группы можно определять путём простого редактирования файла /etc/group. Но есть и другой способ, предоставляющий свои возможности. Например, мы можем пойти от обратного — не редактировать свойства группы, а редактировать свойства пользователя. Команда usermod в числе прочего обладает рядом нужных нам параметров:
-G — список дополнительных групп, членом которых является пользователь;
-a — добавление пользователя в дополнительную группу, используется только с параметром -G;
-g — изменение основной группы пользователя.
Для того, чтобы добавить пользователя test в только что созданную группу primer, мы можем использовать команду
sudo usermod -a -G primer test
Можно ли удалить пользователя из группы при помощи команды usermod? Да, но происходит это не при помощи отдельного параметра, а просто при переопределении дополнительных групп, в которые входит пользователь. В общем виде такая команда будет выглядеть так:
usermod -G имя_группы_1,имя_группы_2,…,имя_группы_n имя_пользователя
Посмотреть, в какие группы входит пользователь, можно командой
id имя_пользователя
Посмотрим на скриншот ниже, а дальше прокомментируем его.
Команда
id test
Показывает информацию о пользователе test, его uid, gid, в какие группы он входит (основную и дополнительные). Основная группа для него это группа test с идентификатором 1000. Остальные группы являются дополнительными. Следующей командой
sudo usermod -G adm,cdrom,sudo,dip,plugdev,lpadmin,sambashare test
мы меняем перечень дополнительных групп для пользователя test. Опять повторив команду
id test
мы увидим, что перечень групп у пользователя test изменился. Так как мы не упомянули группу primer, фактически мы пользователя из этой группы удалили.
Что касается удаления групп, то здесь также можно воспользоваться редактированием файла /etc/group или отдельной командой. Команда в данном случае называется groupdel.
Удалим группу primer:
sudo groupdel primer
Команда groupdel имеет всего два параметра, в общем виде она выглядит так:
groupdel [-R директория] [-h] имя_группы
Выше мы разобрали команду groupadd, поэтому смысл параметров -R и -h должен быть понятен.
На этом можно остановиться с основами управления группами в Linux. Помимо этого, можно было упомянуть в целом похожие инструменты, такие как addgroup и delgroup, но, по сути, они всё равно обращаются к groupadd и groupdel, и изучить их можно самостоятельно.
Статьи по теме: