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

Access Control Lists (также известные как ACLs) является опцией ядра Linux, которая позволяет определить более тонкие права доступа к файлам и каталогам, чем те, которые определены обычными ugo/rwx разрешениями.

Например, стандартные ugo/rwx разрешения не позволяют установить различные разрешения для различных отдельных пользователей или групп. С ACLs эту операцию можно выполнить относительно просто, как мы поймем в этой статье.

проверка совместимости файловой системы с ACLs

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

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

Примечание: В XFS ACLs поддерживаются изначально.

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

# tune2fs -l /dev/xvda2 | grep "Default mount options:"
Check ACL Enabled on Linux Filesystem

Если вышеуказанныйCOMMAND does not indicate that the file system has been mounted with support for ACLs, it is most likely due to the noacl option being present in /etc/fstab.

In that case, remove it, unmount the file system, and then mount it again, or simply reboot your system after saving the changes to /etc/fstab.

Presentation of ACLs in Linux

Для иллюстрации того, как работают ACL, мы будем использовать группу с именем developers и добавим к ней пользователей walterwhite и saulgoodman (да, я фанат “Во все тяжкие!”).

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

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

# id walterwhite
# id saulgoodman
Find User ID in Linux

Теперь создадим каталог с именем 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
Verify ACL Rules on Users

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

Стандартные права ugo/rwx потребуют добавления нового пользователя в группу developers, но это дало бы ему/ей те же разрешения на все объекты, принадлежащие группе. Вот где и пригодятся 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
Set ACL on Linux Users

Затем нам нужно предоставить другим право на выполнение в каталоге /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 до и после изменения:

Set Default ACL to Linux Directory

Для удаления определенного ACL замените -m в вышеуказанных командах на -x. Например,

# setfacl -x d:o /mnt/test

Вместо этого вы можете использовать опцию -b для удаления ВСЕХ ACL в одном шаге:

# setfacl -b /mnt/test

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

Установите квоты на дисковое пространство в Linux для пользователей и filesystems

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

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

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

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

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

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

Отмонтируйте и перемонтируйте оба filesystem:

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

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

# mount | grep vg00
Check Linux User Quota and Group Quota

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

# 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

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

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

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

Linux Disk Quota For User

Эти настройки вызовут предупреждение пользователю 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
Verify Linux User Quota on Disk

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

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

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

И установить ограничения квот следующим образом:

# edquota -g developers

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

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

# edquota -t

и обновляя значения под Период прощения блока и Период прощения i-ноды.

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

Для отчета квот вы можете использовать quota -u [пользователь] или quota -g [группа] для быстрого списка или repquota -v [/путь/к/файловой системе] для более детального (verbose) и хорошо форматированного отчета.

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

Резюме

В этой статье мы объяснили, как устанавливать Access Control Lists ( ACL ) и квоты на диски для пользователей и групп. Utilizing both, you will be able to manage permissions and disk usage more effectively.

Если вы хотите узнать больше о квотах, вы можете обратиться к Quota Mini-HowTo в The Linux Documentation Project.

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

Source:
https://www.tecmint.com/set-access-control-lists-acls-and-disk-quotas-for-users-groups/