Группы в группах (Иван Савин, OSSDEVCONF-2022)
- Докладчик
- Иван Савин
Данный доклад посвящён механизму, обеспечивающему назначение дополнительных групп для пользователей с помощью специализированного модуля. С точки зрения пользователя, этот механизм действует аналогично добавлению группы в группу подобно тому, как это реализовано в MS Windows.
Рассмотрены особенности реализации и реальный опыт применения на практике.
Содержание
Видео
Презентация
Thesis
Специализированный модуль — модуль ролей (libnss-role) — это модуль для службы переключения имён (NSS). Он делает возможным добавление групп в группы. Для администрирования модуля ролей существуют специальные вспомогательные утилиты, в рамках которых все группы условно разделены на две категории: роли и привилегии.
Роли — группы, предназначение которых указывать на характерную деятельность, выполняемую пользователем. Такими группами могут быть группы localadmins, users, powerusers, developers и др.
Привилегии — обычные группы, которые могут быть назначены пользователю. После этого пользователь может совершать действия, соответствующие данной привилегии. К привилегиям относятся такие группы как cdwriter, audio, serial, virtualbox и др.
В конфигурационном файле nsswitch.conf в цепочке применяемых модулей role должен быть последним:\\ group: files systemd role
Модуль выполняет обход всех групп, назначенных пользователю до применения этого модуля, и вычисляет дополнительные группы, которые должны быть назначены на основании правил, прописанных в файлах конфигурации.
Файлы конфигурации
Для хранения и получения информации о ролях и привилегиях модуль использует файл /etc/role. Начиная с версии 0.5.0, также поддерживается каталог /etc/role.d, позволяющий устанавливать отдельные конфигурационные файлы для ролей. Файлы конфигурации хранят информацию о вхождении групп в группы. Каждая строка в файлах имеет формат:
\\<имя_группы>:<имя_группы>[,<имя_группы>]*
Имя до «:» означает, что данная группа будет являться ролью или что то же самое будет входить в другие группы, а последующие имена — в какие группы входит данная или какие привилегии ей назначены. Вхождения групп в группы применяется рекурсивно.
Пример:
Пусть у нас есть пользователь user. Пусть в файле /etc/group имеются записи:\\ group1:x:1:user\\ group2:x:2:user\\ group3:x:3:\\ group4:x:4:\\ group5:x:5:\\ group6:x:6:
А файл /etc/role содержит:\\ group2:group3,group4\\ group4:group5,group6
Тогда пользователь user получит все имеющиеся группы. Группы group1 и group2, так как они назначены ему непосредственно, group3 и group4 — потому что они назначены группе group2, а группы group5 и group6 — так как они назначены группе group4.
Вспомогательные утилиты для администрирования
roleadd — добавляет роль (если её ещё нет) и назначает ей привилегии. Пользователи, входящие в группу-роль, входят во все группы-привилегии.
roledel — удаляет привилегии из ролей, т.е. пользователи из группы-роли исключаются из удаляемой группы-привилегии.
rolelst — показывает текущий список ролей и привилегий.
На основании вышеприведённых утилит сделан графический инструмент, модуль альтератора alterator-roles. С его помощью можно манипулировать ролями и привилегиями более наглядно.
Системная роль (заголовок на первом рисунке) — это понятие, введённое для удобства. Такая роль имеет отдельный
конфигурационный файл в «/etc/role.d» с названием соответствующей роли. Например, для системной роли
users будет конфигурационный файл «/etc/role.d/users.role». Такие роли можно будет распространять,
например, групповыми политиками, и их было решено выделить в отдельное подмножество.
Одним из ключевых «удобных» моментов является возможность задать системные роли локальным пользователям из предопределённого списка. Системные роли интегрированы в управление локальными учётными записями (локальными пользователями).