Поиск по сайту:

Как настроить списки контроля доступа (ACL) и дисковые квоты для пользователей и групп


Списки контроля доступа (также известные как ACL) — это функция ядра Linux, которая позволяет определять более детальные права доступа к файлам и каталогам, чем те, которые определяются обычными разрешениями ugo/rwx.

Например, стандартные разрешения ugo/rwx не позволяют устанавливать разные разрешения для разных отдельных пользователей или групп. Как мы увидим в этой статье, с помощью ACL это сделать относительно легко.

Проверка совместимости файловой системы с помощью ACL

Чтобы убедиться, что ваши файловые системы в настоящее время поддерживают списки ACL, вам следует убедиться, что они были смонтированы с использованием опции acl. Для этого мы будем использовать tune2fs для файловых систем ext2/3/4, как указано ниже. Замените /dev/sda1 на устройство или файловую систему, которую вы хотите проверить:

tune2fs -l /dev/sda1 | grep "Default mount options:"

Примечание. В XFS списки управления доступом поддерживаются «из коробки».

В следующей файловой системе ext4 мы видим, что ACL включены для /dev/xvda2:

tune2fs -l /dev/xvda2 | grep "Default mount options:"

Если приведенная выше команда не указывает, что файловая система смонтирована с поддержкой списков ACL, скорее всего, это связано с наличием опции noacl в /etc/fstab.

В этом случае удалите его, размонтируйте файловую систему, а затем смонтируйте снова или просто перезагрузите систему после сохранения изменений в /etc/fstab.

Знакомство с ACL в Linux

Чтобы проиллюстрировать, как работают списки управления доступом, мы воспользуемся группой с именем разработчики и добавим пользователей walterwhite и saulgoodman (да, я фанат Breaking Bad! ) к этому.:

groupadd developers
useradd walterwhite
useradd saulgoodman
usermod -a -G developers walterwhite
usermod -a -G developers saulgoodman

Прежде чем продолжить, давайте проверим, что оба пользователя добавлены в группу разработчиков:

id walterwhite
id saulgoodman

Давайте теперь создадим каталог с именем test в /mnt и файл с именем acl.txt внутри (/mnt/test/acl .txt).

Затем мы назначим владельцу группы developers и рекурсивно изменим его разрешения по умолчанию ugo/rwx на 770 (таким образом предоставив права на чтение, запись и выполнение). разрешения, предоставленные как владельцу, так и владельцу группы файла):

mkdir /mnt/test
touch /mnt/test/acl.txt
chgrp -R developers /mnt/test
chmod -R 770 /mnt/test

Как и ожидалось, вы можете написать в /mnt/test/acl.txt как walterwhite или saulgoodman:

su - walterwhite
echo "My name is Walter White" > /mnt/test/acl.txt
exit
su - saulgoodman
echo "My name is Saul Goodman" >> /mnt/test/acl.txt
exit

Все идет нормально. Однако вскоре мы столкнемся с проблемой, когда нам нужно будет предоставить доступ на запись к /mnt/test/acl.txt другому пользователю, не входящему в группу разработчиков.

Стандартные разрешения ugo/rwx потребуют добавления нового пользователя в группу разработчиков, но это предоставит ему/ей одинаковые разрешения на все объекты, принадлежащие группе. Именно здесь могут пригодиться ACL.

Настройка ACL в Linux

Существует два типа списков ACL: списки ACL доступа (которые применяются к файлу или каталогу) и списки ACL по умолчанию (необязательные), которые можно применять только к каталогу. .

Если файлы внутри каталога, где установлен ACL по умолчанию, не имеют собственного ACL, они наследуют ACL по умолчанию своего родительского каталога.

Давайте предоставим пользователю gacanepa доступ на чтение и запись к /mnt/test/acl.txt. Прежде чем сделать это, давайте посмотрим на текущие настройки ACL в этом каталоге с помощью:

getfacl /mnt/test/acl.txt

Затем измените ACL для файла, используйте u:, затем имя пользователя и :rw, чтобы указать разрешения на чтение/запись:

setfacl -m u:gacanepa:rw /mnt/test/acl.txt

И снова запустите getfacl для файла, чтобы сравнить. На следующем изображении показаны «До» и «После»:

getfacl /mnt/test/acl.txt

Далее нам нужно будет предоставить другим разрешения на выполнение в каталоге /mnt/test:


chmod +x /mnt/test

Имейте в виду, что для доступа к содержимому каталога обычному пользователю необходимы права на выполнение в этом каталоге.

Пользователь gacanepa теперь сможет писать в файл. Переключитесь на эту учетную запись пользователя и выполните следующую команду для подтверждения:

echo "My name is Gabriel Cánepa" >> /mnt/test/acl.txt

Чтобы установить ACL по умолчанию для каталога (который его содержимое будет унаследовать, если в противном случае не будет перезаписано), добавьте d: перед правилом и укажите каталог вместо имени файла:

setfacl -m d:o:r /mnt/test
getfacl /mnt/test/

Приведенный выше список ACL позволит пользователям, не входящим в группу владельцев, иметь доступ для чтения к будущему содержимому каталога /mnt/test. Обратите внимание на разницу в выводе getfacl /mnt/test до и после изменения:

Чтобы удалить определенный список ACL, замените -m в приведенных выше командах на -x. Например,

setfacl -x d:o /mnt/test

Альтернативно вы также можете использовать опцию -b, чтобы удалить ВСЕ списки ACL за один шаг:

setfacl -b /mnt/test

Для получения дополнительной информации и примеров использования списков ACL обратитесь к главе 10, разделу 2 Руководства по безопасности openSUSE (также доступно для бесплатной загрузки в формате PDF). ).

Установите дисковые квоты Linux для пользователей и файловых систем

Место для хранения данных — еще один ресурс, который необходимо тщательно использовать и контролировать. Для этого можно установить квоты для файловой системы как для отдельных пользователей, так и для групп.

Таким образом, устанавливается ограничение на использование диска, разрешенное для данного пользователя или конкретной группы, и вы можете быть уверены, что ваши диски не будут заполнены до отказа неосторожным (или злонамеренным) пользователем.

Первое, что вам необходимо сделать, чтобы включить квоты в файловой системе, — это смонтировать ее с параметрами usrquota или grpquota (для квот пользователей и групп соответственно) в /etc/fstab.

Например, давайте включим квоты на основе пользователей в /dev/vg00/vol_backups и квоты на основе групп в /dev/vg00/vol_projects.

Обратите внимание, что UUID используется для идентификации каждой файловой системы.

UUID=f6d1eba2-9aed-40ea-99ac-75f4be05c05a /home/projects ext4 defaults,grpquota 0 0
UUID=e1929239-5087-44b1-9396-53e09db6eb9e /home/backups ext4 defaults,usrquota 0 0

Размонтируйте и перемонтируйте обе файловые системы:

umount /home/projects
umount /home/backups
mount -o remount /home/projects
mount -o remount /home/backups 

Затем проверьте, что параметры usrquota и grpquota присутствуют в выводе команды mount (см. выделенное ниже):

mount | grep vg00

Наконец, выполните следующие команды для инициализации и включения квот:

quotacheck -avugc
quotaon -vu /home/backups
quotaon -vg /home/projects

Тем не менее, давайте теперь назначим квоты имени пользователя и группе, о которых мы упоминали ранее. Позже вы сможете отключить квоты с помощью quotaoff.

Установка дисковых квот Linux

Начнем с установки ACL в /home/backups для пользователя gacanepa, который предоставит ему права на чтение, запись и выполнение в этом каталоге:

setfacl -m u:gacanepa:rwx /home/backups/

Тогда с,

edquota -u gacanepa

Мы сделаем мягкий limit=900 и жесткий limit=1000 блоки (1024 байт/блок * 1000 блоков=1024000 байт=1 МБ ) использования дискового пространства.

Мы также можем установить ограничение в 20 и 25 в качестве мягкого и жесткого ограничения на количество файлов, которые может создать этот пользователь.

Приведенная выше команда запустит текстовый редактор ($EDITOR) с временным файлом, в котором мы можем установить упомянутые ранее ограничения:

Эти настройки приведут к отображению предупреждения пользователю gacanepa, когда он достигнет предела 900 блоков или 20 индексных дескрипторов для значения по умолчанию. льготный период 7 дней.

Если к тому времени ситуация превышения квоты не будет устранена (например, путем удаления файлов), мягкое ограничение станет жестким ограничением, и этому пользователю будет запрещено использовать больше места для хранения или создавать больше файлы.

Для проверки давайте попросим пользователя gacanepa создать пустой файл 2 МБ с именем test1 внутри /home/backups:

dd if=/dev/zero of=/home/backups/test1 bs=2M count=1
ls -lh /home/backups/test1

Как видите, операция записи файла завершается сбоем из-за превышения дисковой квоты. Поскольку на диск записываются только первые 1000 КБ, результатом в этом случае, скорее всего, будет поврежденный файл.

Аналогичным образом вы можете создать ACL для групп разработчиков, чтобы предоставить членам этой группы доступ rwx к /home/projects:

setfacl -m g:developers:rwx /home/projects/

И установите ограничения квоты с помощью:

edquota -g developers

Точно так же, как мы сделали ранее с пользователем gacanepa.

Льготный период можно указать на любое количество секунд, минут, часов, дней, недель или месяцев путем выполнения.

edquota -t

и обновите значения в разделах Льготный период блокировки и Льготный период для Inode.

В отличие от использования блоков или индексных дескрипторов (которые устанавливаются для пользователя или группы), льготный период устанавливается для всей системы.

Чтобы сообщить о квотах, вы можете использовать quota -u [user] или quota -g [group] для быстрого списка или repquota -v [/path/to /filesystem] для получения более подробного (многословного) и красиво отформатированного отчета.

Конечно, вы захотите заменить [user], [group] и [/path/to/filesystem] на конкретного пользователя/ имена групп и файловую систему, которые вы хотите проверить.

Краткое содержание

В этой статье мы объяснили, как настроить списки контроля доступа и дисковые квоты для пользователей и групп. Используя оба, вы сможете более эффективно управлять разрешениями и использованием диска.

Если вы хотите узнать больше о квотах, вы можете обратиться к Мини-инструкции по квотам в Проекте документации Linux.

Излишне говорить, что вы также можете рассчитывать на то, что мы ответим на вопросы. Просто отправьте их, используя форму комментариев ниже, и мы будем более чем рады их рассмотреть.