Очень полезной функцией Linux являются «Списки контроля доступа», которые контролируют доступ к файлам и каталогам. Вот как списки управления доступом контролируют права доступа к файлам в Linux.
Примечание. Чтобы полностью понять, как работают списки контроля доступа, мы сначала настроим некоторых пользователей и группы в работающей системе Linux. Следующее упражнение выполняется на виртуальной машине под управлением операционной системы Kali. Пользователь root имеет право добавлять в систему новых пользователей и распределять их по группам.
Создание пользователей и групп
Во-первых, мы войдем в систему как пользователь root, создадим пользователей и поместим их в соответствующие группы, как показано в таблице ниже. Пользователям даны простые имена, чтобы лучше понять концепцию.
Пользователь | Группа |
---|---|
john1 john2 john3 |
johns |
Д Contents Создание пользователей и групп/tr> |
Мы будем использовать команду adduser
для добавления новых пользователей в систему.
Команда id
отобразит сведения о вновь созданном пользователе. Он покажет идентификатор пользователя (uid), идентификатор группы (gid) и имя группы (groups). Пользователь при создании автоматически добавляется в группу с тем же именем, что и имя пользователя. Этот пользователь будет единственным членом группы.
Аналогично также создаются пользователи «john2» и «john3».
adduser john2 adduser john3
После создания трех пользователей используйте команду id
, чтобы просмотреть соответствующие идентификаторы пользователя и группы.
Мы видим, что три пользователя находятся в своих группах — 1000, 1001 и 1002. Согласно таблице, показанной ранее, мы хотим, чтобы три пользователя находились в одной группе: johns
. Поскольку в настоящее время такой группы в системе не существует, мы создадим ее с помощью команды groupadd
:
groupadd -g <new_group_ID> <group_name>
Новый идентификатор группы указан как 5000. Если переключатель -g
игнорировать, система автоматически выберет идентификатор группы. Название новой группы — «Джонс». Теперь трех пользователей — «john1», «john2» и «john3» — необходимо добавить в качестве членов этой группы. Для этой задачи мы будем использовать команду usermod
.
usermod -g <group_name> <user_name>
usermod
добавляет пользователя «user_name» в группу «group_name». На следующем рисунке сначала показаны uid и gid для «john1» перед сменой группы. После успешного выполнения команды usermod
«john1» добавляется в группу «johns» с gid 5000.
Тот же процесс выполняется для пользователей «john2» и «john3».
usermod -g johns john2 usermod -g johns john3
Наконец, подробную информацию о трех пользователях в группе «johns» можно просмотреть с помощью команды id
.
Мы успешно создали трех пользователей и добавили их в одну группу.
Аналогичным образом пользователи «jane1» и «jane2» создаются и добавляются в группу «janes» с gid 6000. Их данные можно просмотреть с помощью команды id
, как показано ниже.
Для чего нужны списки контроля доступа?
Предположим, что пользователь «john1» входит в систему
создает новый файл в домашнем каталоге
и добавляет к нему некоторый контент.
С помощью команды ls
мы просматриваем метаданные файла.
Первые несколько символов в выводе, - rw - r - - r - -
, соответствуют строке разрешения. Давайте разберем его.
– | rw – | r – – | r – – |
---|---|---|---|
тип файла | разрешения, которые john1 имеет для файла | разрешения члены группы johns имеют доступ к файлу | разрешения, предоставленные другим пользователям, не входящим в группу johns |
Эта статья — хорошее руководство по правам доступа к файлам.
Что, если «john1», будучи владельцем файла, захочет дополнительно предоставить разрешения на запись только «john2» и «jane1», но сохранить разрешения на чтение для «john3» и «jane2?»
rw – | r – – |
---|---|
john1 john2 jane1 |
john3 jane2 |
Один из вариантов — создать новую группу с разрешениями на чтение и запись для «john1», «john2» и «jane1», а также другую группу с разрешениями только на чтение для «john3» и «jane2». Если john1 желает дополнительно изменить разрешения для любого члена группы, необходимо создать дополнительные группы. Создание нескольких групп и управление ими является обузой для системного администратора.
Вместо этого для файла можно создать «Список контроля доступа», в котором будут четко указан
Для чего нужны списки контроля доступа?
олнять с этим файлом.Как создать список контроля доступа (ACL) для файла?
Каждому файлу при создании назначается ACL. Его эффективное использование — это просто вопрос его модификации. Только владелец файла и пользователь root могут изменять ACL файла.
Мы можем использовать команду getfacl
для просмотра существующего ACL:
getfacl <file_name>
Строки, начинающиеся с #
, являются строками комментариев. Фактическая информация находится в последних трех строках вывода, что аналогично строке разрешения, полученной ранее. Строка «пользователь» относится к разрешениям, назначенным владельцу файла «john1». Строка «группа» относится к разрешениям, назначенным другим членам группы «johns». Как вы уже догадались, строка «другие» относится к кому-либо еще за пределами группы.
Давайте воспользуемся командой setfacl
, чтобы изменить существующий список ACL для файла.
setfacl -m entity:name:permissions <file_name>
объект | имя | разрешения |
---|---|---|
Значение здесь означает, для кого предназначена запись ACL:
пользователь (u) или группа(g) или другие(o) |
имя пользователя или группы, для которых актуальна запись ACL | разрешения на чтение, запись и выполнение обозначаются буквами r,w,x |
«john2» сначала предоставляется доступ к файлу на чтение и запись
за которым следует «jane1».
Давайте посмотрим обновленный список ACL для «secretfile».
Мы видим, что разрешения на чтение и запись были назначены «john2» и «jane1».
Проверка подлинности ACL
Мы видим, что «john2» может читать файл и писать в него.
Новая информация, введенная «john2», добавлена в файл.
Аналогично, «jane1» получает те же привилегии — доступ на чтение и запись.
Но «john3» в той же группе не может писать в файл.
«jane2», принадлежащая к другой категории, также не может производить запись в файл.
Заключение
Тот же процесс можно распространить и на каталоги. Списки контроля доступа поз