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

Как маски ACL позволяют точно настроить права доступа к файлам в Linux


Маски ACL позволяют вам установить максимально разрешенные разрешения для файла в Linux. Узнайте, что они означают и почему они так важны.

Ключевые выводы

  • Маски списков управления доступом (ACL) обеспечивают совместимость с программами, которые не поддерживают ACL, преобразуя записи ACL в разрешения POSIX.
  • Маски ACL представляют максимально разрешенные разрешения для любого объекта пользователя или группы, который не является владельцем пользователя, группы или «другого» класса.
  • При добавлении новых записей ACL маска автоматически корректируется в соответствии с максимальными разрешениями, разрешенными для всех именованных пользователей или групп.

Вы используете списки контроля доступа (ACL), но не понимаете концепцию масок? Ты не один. Давайте углубимся в эту важную концепцию, взглянув на то, что они собой представляют и как они взаимодействуют с разрешениями файловой системы Linux.

Что такое маски ACL?

Маски ACL — это способ обеспечить совместимость разрешений с программами и утилитами, которые не поддерживают ACL.

Маска ACL для файла или каталога соответствует максимальному разрешению, разрешенному любому объекту пользователя или группы, который не является владельцем пользователя, группы или «другого» класса пользователя/группы/другого класса. парадигма. Другими словами, он преобразует записи ACL в разрешения POSIX в целях обеспечения обратной совместимости.

Давайте посмотрим на недавно созданный файл, с которым мы будем работать в этой статье, mysupersecretfile.txt:

ls -l mysupersecretfile.txt

Довольно простые разрешения для такого конфиденциального документа, не так ли?

Обратите внимание на точку (.) после установленных разрешений. Это указывает на контекст SELinux, который не связан с ACL или масками ACL.

Для ясности давайте также проверим записи ACL для файла, используя команду getfacl:

getfacl mysupersecretfile.txt

Текущие записи ACL для записей пользователей и групп-владельцев напрямую соответствуют фактическому пользователю-владельцу POSIX и группе-владельцу файла. Это нормально для любого файла, который не имеет расширенных записей ACL и называется «минимальными ACL».

Допустим, мы получили запрос на добавление пользователя с именем менеджер в качестве записи ACL в этот файл с разрешениями на чтение. Мы сделаем это с помощью команды setfacl. Затем давайте рассмотрим новые разрешения ACL с помощью команд ls и getfacl:

setfacl -m u:manager:r mysupersecretfile.txt
ls -l mysupersecretfile.txt
getfacl mysupersecretfile.txt

Теперь вы заметите знак «+» рядом с записями разрешений в команде ls, указывающий, что с файлом связаны записи ACL.

Видите ли вы сейчас строку маска в выводе команды getfacl? В дополнение к расширенной записи ACL пользователя-менеджера эта запись маски была назначена автоматически. Это необходимо; он представляет максимальные разрешения, разрешенные для любого именованного пользователя или группового объекта (опять же, помимо пользователя-владельца и групповых объектов-владельцев). На данный момент разрешение на чтение соответствует разрешению на чтение существующей маски.

Теперь добавим в ACL нашего файла еще одного пользователя из второго запроса — Contractor. Однако на этот раз нам нужно предоставить им разрешения на чтение и запись. Давайте посмотрим, как это повлияет на маску:

setfacl -m u:contractor:rw mysupersecretfile.txt
getfacl mysupersecretfile.txt

Теперь, помимо записи ACL менеджера (r), мы также видим запись подрядчика (rw). Но почему запись маски изменилась на чтение и запись?

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

При работе со списками ACL вы увидите, что роль разрешений группового класса (например, в выводе команды ls -l) изменена, чтобы отразить маску ACL. Не волнуйтесь, разрешения владельца группы по-прежнему отражаются как запись ACL «владеющая группа».

Имейте в виду, что если вы добавите другого пользователя с меньшим количеством разрешений, например, только для чтения, он не унаследует разрешения маски — точно так же, как пользователь-менеджер не получил разрешения на запись, когда мы добавили запись ACL пользователя-подрядчика.

Эффективные разрешения

Мы можем установить права доступа к маске вручную с помощью команды setfacl. Это позволит нам фильтровать любые разрешения для именованных пользователей и/или групп, установленные для файла одновременно, или для записей ACL существующих пользователей файла, по наименьшему общему знаменателю. Это называется эффективными разрешениями.

Давайте установим маску нашего файла только для чтения, а затем взглянем по-новому на записи ACL:

setfacl -m m::r mysupersecretfile.txt
getfacl mysupersecretfile.txt

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

ls -l mysupersecretfile.txt

Если вы хотите добавить запись ACL именованного пользователя или группы, но не хотите пересчитывать маску, вы можете использовать -n вместе с setfacl. Это ограничит добавляемый вами ACL максимальными разрешениями, разрешенными маской (показанными действующими разрешениями записи). Однако это не значение по умолчанию; имейте в виду, что маска не является формой обязательного контроля доступа. Давайте попробуем это ниже:

setfacl -n -m u:milton:rwx mysupersecretfile.txt
getfacl mysupersecretfile.txt

Маски по умолчанию

Когда вы работаете со списками ACL, концепция масок по умолчанию очень похожа на записи ACL по умолчанию. Например, когда вы добавляете в каталог маску по умолчанию, все вновь созданные файлы и подкаталоги внутри него будут наследовать эту же маску (а также запись маски по умолчанию). Просто используйте параметр -d с командой setfacl, чтобы применить маску по умолчанию:

mkdir mysupersecretdirectory
setfacl -d -m m::rX mysupersecretdirectory/
getfacl mysupersecretdirectory/
mkdir mysupersecretdirectory/mysupersecretsubdirectory/
getfacl mysupersecretdirectory/mysupersecretsubdirectory/

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


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

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

Статьи по данной тематике: