Как ограничить доступ пользователя к файлам в Linux?
Примечание: Ограничение доступа к файлам в Linux — это один из базовых элементов безопасности системы. Так как Linux используется как многопользовательская операционная система, важно правильно настраивать права, чтобы каждый пользователь имел доступ только к тем ресурсам, которые ему необходимы для работы. Для этого в системе существует несколько механизмов управления доступом: классические права файловой системы, дополнительные списки контроля доступа и мандатные политики.
Модель прав доступа в Linux
Каждый файл и каталог в Linux имеет владельца и группу. К ним привязаны три категории прав:
-
права владельца (user) — применяются к пользователю, которому принадлежит файл;
-
права группы (group) — применяются к пользователям, входящим в группу, которой принадлежит файл;
-
права остальных (others) — применяются ко всем другим пользователям системы.
Для каждой категории можно задать три типа разрешений:
-
r (read) — право на чтение файла или просмотр содержимого каталога;
-
w (write) — право на запись или изменение;
-
x (execute) — право на выполнение файла или доступ к содержимому каталога.
Использование команды chmod
Команда chmod позволяет изменять права доступа к файлам и каталогам. Она поддерживает символьную и числовую запись. Например:
-
chmod 644 file.txt — владелец может читать и изменять файл, а группа и остальные пользователи только читать;
-
chmod u+x script.sh — добавить право на выполнение для владельца.
Управление владельцем и группой
Для изменения владельца используется команда chown:
-
chown user file.txt — назначение нового владельца;
-
chown user:group file.txt — смена владельца и группы одновременно.
Для изменения только группы применяется chgrp:
- chgrp developers project.txt — передача файла группе developers.
Это удобно, если нужно ограничить доступ к файлам для определенных пользователей, назначив им группу.
Маска прав по умолчанию (umask)
При создании новых файлов и каталогов права задаются на основе маски umask. Администратор может изменить umask для пользователя, чтобы ограничить доступ к создаваемым им файлам. Например, значение umask 077 означает, что новые файлы будут доступны только владельцу.
Списки контроля доступа (ACL)
Помимо стандартной модели прав, Linux поддерживает ACL (Access Control Lists). Они позволяют более гибко настраивать доступ, задавая права для конкретных пользователей и групп, а не только для трех категорий.
-
setfacl -m u:username:r file.txt — дать пользователю право только на чтение;
-
getfacl file.txt — просмотр текущих ACL для файла.
Этот механизм удобен, если нужно дать доступ нескольким пользователям без изменения групп.
Ограничение доступа через монтирование файловых систем
При монтировании разделов можно использовать параметры, которые ограничивают права пользователей:
-
noexec — запрещает выполнение файлов;
-
nosuid — запрещает использование SUID-битов;
-
nodev — запрещает создание специальных файлов устройств.
Такие параметры повышают уровень безопасности в многопользовательской среде.
Использование SELinux и AppArmor
Для более строгого контроля в Linux могут применяться механизмы мандатного управления доступом: SELinux или AppArmor. Эти системы позволяют администратору задавать политики, которые ограничивают действия процессов и пользователей даже при наличии стандартных прав доступа. Например, можно запретить программе доступ к определенным каталогам, даже если права файловой системы это разрешают.
Ограничение доступа через sudo
Хотя sudo больше используется для управления привилегиями, через него тоже можно ограничить доступ. Пользователь может запускать только те команды, которые явно разрешены в конфигурации /etc/sudoers. Это косвенно контролирует его доступ к файлам, так как несанкционированные команды выполнять не получится.