- Урок 18. Расширенные права доступа Linux с помощью ACL
- Using xattrs or Extended Attributes on Linux
- What are extended attributes?
- Support for extended attributes
- Other attributes
- security.capability
- security.ima
- security.evm
- Related tools
- getfacl
- getfattr
- xattr
- More resources
- Расширяем права доступа в Linux с помощью ACL
Урок 18. Расширенные права доступа Linux с помощью ACL
Что делать, если для файла требуется установить различные права доступа для различных пользователей. Например, файл Report.pdf имеет следующие права доступа:
Допустим пользователю admin необходимо предоставить доступ rw- , а пользователю technician — только r— .
Что делать в этом случае?
Понятное дело, что стандартные механизмы распределения прав доступа здесь не помогут — они не настолько гибкие. И тут на помощь приходит технология списков доступа (Access List Control, ACL — списки контроля доступа). Во многих современных дистрибутивах она уже установлена и активна.
ACL бывает 2-х типов:
- ACL прав доступа — определяет доступ к файлу или каталогу на основе установленных прав
- ACL по умолчанию — назначается только каталогу. Если в данном каталоге файлы не имеют собственный ACL, то они они наследуют ACL родительского каталога.
Вернемся к нашему файлу Report.pdf и проверим расширенные права доступа. Для проверки ACL выполним следующую команду — getfacl Report.pdf :
Как видно ACL пока не настроен для данного файла. Настроем его исходя из вышеуказанных требований. Для установки расширенных прав используется следующая команда:
setfacl -m u:пользователь:права_доступа файл
-m ( —modify=acl ) используется, когда необходимо модифицировать ACL.
u ( user ) означает пользователя.
Теперь установим права доступа setfacl -m u:admin:rw-,u:technician:r— Report.pdf и п роверим что у нас получилось:
Можно ли установить расширенные права для группы и остальных пользователей?
Да, можно. Для этого используются следующие ключи:
setfacl -m g:Class:r Report.pdf — добавление группы с правами чтения
setfacl -m o:r Report.pdf — установка прав чтения для всех остальных
Права для группы можно устанавливать и обычным способом с помощью команды chmod .
А как узнать, что у файла установлены расширенные права доступа?
В выводе команды ls -l мы увидим знак “ + ” в конце списка прав доступа:
А как удалить пользователя или группу из ACL?
Для этого воспользуемся опцией -x ( —remove=acl ). Например, удалим пользователя technician — setfacl -x u:technician Report.pdf
А если необходимо удалить полностью весь ACL с данного файла, то воспользуемся опцией -b ( —remove-all ) — setfacl -b Report.pdf
После удаления ACL исчезает и символ “+”:
Мы рассмотрели ACL прав доступа. Теперь рассмотрим ACL по умолчанию. При создании списков доступа по умолчанию добавляется опция -d ( —default ), кроме того необходимо также указать и стандартные права доступа. Для примера создадим
каталог Homework/ и добавим файл fileBeforeACL и каталог folderBeforeACL . Затем назначим каталогу Homework/ ACL по умолчанию. Каталог Homework/ имеет следующие стандартные права доступа:
Теперь добавим пользователя teacher с правами r-x и назначим каталогу ACL по умолчанию — setfacl -d -m u::rwx,g::r—,o::r—,u:andrey:r-x,u:admin:r-x,u:teacher:r-x Homework/
Проверим что получилось:
Добавились новые поля default . Именно они определяют права по умолчанию для всех вложенных файлов. Чтобы убедиться в этом проверим ACL файлов Homework/ :
Но ведь ничего не изменилось!
Все верно, права по умолчанию применяются только к вновь созданным и скопированным файлам. Создадим файл fileAfterACL и каталог folderAfterACL и посмотрим на их права:
Теперь ACL по умолчанию работает так, как надо.
А для чего используется маска во всех ACL?
Маска говорит о максимально назначенных правах для пользователей. Она вычисляется автоматически при добавлении пользователя.
Например, ACL имеет 2-х пользователей:
Маска будет равна rwx .
Значит у пользователя student тоже будут права rwx ?
Нет, у него будут права r— и не более. Однако, если мы вручную изменим маску на r— , то у пользователя teacher понизятся права до r— , хотя по факту установлены rwx .
То есть маска — это своего рода механизм регулирования прав всех пользователей?
А как можно вручную изменить маску?
Командой setfacl -m m:права_доступа файл
Список используемых команд:
getfacl файл — проверка ACL
setfacl -m u:пользователь:права_доступа файл — установка прав доступа для определенного пользователя (владельца)
setfacl -m g:группа:права_доступа файл — установка прав доступа для группы владельцев
setfacl -x u:пользователь файл — исключение пользователя из ACL
setfacl -x g:группа файл — исключение группы из ACL
setfacl -b файл — удаление ACL
setfacl -m m:права_доступа файл — изменение маски
Источник
Using xattrs or Extended Attributes on Linux
What are extended attributes?
Extended attributes or xattrs, are an extensible mechanism to store metadata on a filesystem. Metadata is a collection of information or data points about a particular object. If we would compare this article, the metadata contains the title, author, description, language, Twitter image, etc.
Normally the file system can only store a limited set of information about files. Typically this is the filename, ownership, file permissions, and dates. By using extended attributes, we can describe more properties of the file.
Support for extended attributes
Not all file systems have support for xattrs. However, the popular ones do, like EXT4, Btrfs, ReiserFS, JFS, and ZFS. To determine if your file system has xattr support enabled, check the options file of the related device:
One way to set an attribute for a file is by adding an access control list (ACL). This can be done with the setfacl command. For example, we can allow the web server daemon to read data from /data/storage.
Running the command won’t give any output. So let’s check if something has changed:
# ls -l
total 4
drwxr-xr-x+ 2 root root 4096 Nov 18 16:00 storage
The plus sign in ls reveals there is something different than the other files. This is because of adding the extended attribute.
Although we could use the getfacl command to determine the permissions, we can actually use the getfattr command to see what kind of attribute is added.
getfattr: Removing leading ‘/’ from absolute path names
# file: data/storage
system.posix_acl_access
Now we know for sure it is an ACL stored in the extended attributes of this particular file (or actually directory).
If we want to see detailed information, we can use the xattr tool for that.
Using xattr to list extended attributes of a file
Other attributes
security.capability
The security.capability files stores Linux capabilities for the related file. Applies to binaries which are provided one or more capabilities via this file.
security.ima
For the Integrity Measurement Architecture (IMA), the file security.ima stores a hash or digital signature.
security.evm
Similar to security.ima, the Extended Verification Module (EVM) stores a hash/HMAC or digital signature in this file. The different with IMA is that it protects the metadata of the file, not the contents.
Related tools
getfacl
Installation: apt-get install acl
getfattr
Installation: apt-get install attr
xattr
Installation: apt-get install python-xattr
More resources
Two useful links suggested by our readers, are:
Keep learning
So you are interested in Linux security? Join the Linux Security Expert training program, a practical and lab-based training ground. For those who want to become (or stay) a Linux security expert.
Run automated security scans and increase your defenses. Lynis is an open source security tool to perform in-depth audits. It helps with system hardening, vulnerability discovery, and compliance.
Источник
Расширяем права доступа в Linux с помощью ACL
Архив номеров / 2005 / Выпуск №11 (36) / Расширяем права доступа в Linux с помощью ACL
Строка default:mask показывает маску эффективных прав, которую не могут превысить пользователь или группа. Используя маску, можно задать общие права для всех пользователей и групп, например: #setfacl -m m::rx file Как видите, для пользователя sergej и группы sales установлены отличные от всех остальных права. При этом, если вы попытаетесь установить параметры для несуществующего пользователя или группы, утилита завершит выполнение с ошибкой. Кстати, установить новые разрешения в файловой системе, смонтированной без опции ACL, не получится. # setfacl -dm u:sergej:rw /home/sergej/acl
Проверим наследование атрибутов. И в качестве вывода получим: default:group: sales: rwx Теперь пробуем создать файл в каталоге: # mount /home -o remount,acl Пользователь sergej и группа sales унаследовали права. Убедимся, что стандартные права доступа все еще существуют. drwxr-xr-x 2 root root 80 Окт 22 16:10 . drwxr-xr-x 21 root root 592 Окт 22 16:00 .. -rw-rw-r— 1 root root 0 Окт 22 16:10 test_file В некоторых дистрибутивах команда ls для файлов и каталогов, в которых используется ACL, дополнительно выводит знак +, например drwxr-xr-x+. От чего зависит присутствие плюса в выводе, мне, к сожалению, неизвестно. Команда chmod также работает с такими файлами и каталогами, только теперь изменяются не права доступа пользователей, а значение маски доступа. Сохранение расширеных прав при копировании и перемещении В документации сказано, что при копировании и перемещении расширенные права доступа должны сохраняться, что сейчас и проверим: # mv test_acl work default:group: sales: rwx Все атрибуты на месте, т.е. команда mv перемещает файлы вместе с привязанными к ним списками контроля доступа. Теперь переместим тестовый каталог в раздел смонтированный без ACL и проверим разрешения: # mv test_acl /home/sergej/ Из увиденного можно сделать однозначный вывод: без указания при монтировании дискового раздела опции ACL списки контроля доступа работать не будут. Утилита getfacl при использовании на таком разделе выведет стандартные права доступа. А вот при копировании получились несколько другие результаты. Создадим файл и еще один тестовый каталог, но при установке разрешения для каталога не будем использовать опцию -d: # setfacl -m u:vasja:rw,g:webmaster:rwx test_acl_file Теперь сделаем копию файла в текущем каталоге: # apt-get install acl attr Как видите, разрешения изменились и соответствуют стандартным установкам, определенным переменной umask. Теперь копируем файл в каталог test_acl, в котором при создании разрешений использовался параметр -d. # cp test_acl_file test_acl Разрешения изменились и соответствуют файлу test_file, который был создан в этом каталоге. # setfacl -m u:fedja:rw,g:netadmin:rwx test_acl_file Теперь копируем в этот каталог тестовый файл. # cp test_acl_file dir Если при создании каталога не использовался параметр -d, разрешения не наследуются и при копировании (создании) файлов и каталогов права доступа соответствуют стандартным разрешениям UNIX, т.е. фактически обнуляются. И еще один интересный момент, о котором стоит упомянуть. Операции копирования и перемещения были проделаны и другими инструментами. Результат эксперимента с Midnight Commander совпал с результатом использования утилит ср и mv, а вот Konqueror при перемещении не сохранил расширенные права. Почти аналогично ведут себя kate и Kwrite. Если сохранять результат в текущий файл, то права сохраняются, а если в новый, то теряются. Все это выглядит несколько странно, потому что за операции с правами по идее должно отвечать ядро. Как видите, при использовании ACL необходимо очень тщательно отбирать и инструменты, т.к. при работе с некоторыми утилитами права теряются. Ошибка может привести к тому, что любая «неправильная» утилита может сделать бесполезной всю безопасность с ACL. Некоторые опции утилит setfacl и getfacl При помощи связки getfacl/setfacl можно сохранить и восстановить списки контроля доступа, это может понадобиться при архивировании данных или переносе в другую систему. # getfacl -R —skip-base . > backup.acl Если для некоторого файла или каталога требуется установить разрешения, которые сходны с уже имеющимися, то можно поступить так (опции, написанные с заглавной буквы, применяются при использовании в качестве ввода результата работы другой утилиты). # getfacl -a dir | setfacl -M — dir # getfacl file1 | setfacl -S- file2 Чтобы удалить разрешение, используйте опцию -х. Например, удалим права для группы sales: # setfacl -x g:sales test_acl Опция -m модифицирует (а фактически сохраняет) старые разрешения, добавляя к ним новые. В некоторых случаях проще установить новые права на файл или каталог, полностью затерев старые. Для этих целей используется флаг -s. # setfacl -m u:fedja:rw,g:netadmin:rwx test_acl_file Установленную для каталога маску доступа, используемую по умолчанию, можно изменить так: # setfacl -m default:u::rx acldir Поддержка ACL в NFS и Samba Поддержка ACL в NFS еще не закончена, но 4 версия протокола уже поддерживает стандартизованные удаленные вызовы процедур на получение и установку разрешений ACL. Причем правильно обрабатывает запросы демон, работающий в пространстве ядра. Демон, работающий в пространстве пользователя, поддерживает только вторую версию протокола и неправильно обслуживает запросы. Клиенты, работающие со второй версией протокола, используют традиционные девять бит, поэтому при передаче информация об ACL искажается. Уже в третьей версии клиенты для запроса прав пользователя опираются на вызов ACCESS, и точное разрешение этого вопроса предоставляется клиенту. Хотя стоит отметить, что существуют решения, позволяющие использовать ACL поверх NFS, но это тема другого разговора. Пока же разработчики рекомендуют использовать ACL при работе с NFS осторожно. Зато списки контроля доступа могут использоваться вместе с Samba, что позволяет объединить Linux-сервер и Windows Active Directory. Хотя стоит отметить, что POSIX ACL и Windows NT/2000/XP ACL имеют отличия, но сервер Samba достаточно близко может работать с разрешениями, принятыми в Windows-среде, обеспечивая практически все действия. Для работы Samba с ACL необходимо не только установить поддержку ACL в ядре, но и собрать Samba с опцией —with-acl-support. А в конфигурационном файле smb.conf в разделе предоставляемого ресурса должно быть прописано nt acl support = yes. Для установки и просмотра разрешений можно использовать не только утилиты администрирования Windows, но и консольную утилиту smbcacls, запускаемую на стороне сервера. Формат запуска утилиты такой: smbcacls //server/share filename [options] Неудобно, что опции несколько отличаются от setacl. Так опция -А добавляет разрешение к файлу или каталогу сохраняя предыдущее, опция -s устанавливает новые разрешения затирая старые. При помощи опции -M изменяется маска доступа, а опции -С и -G позволяют указать нового владельца и группу-владельца. Кроме стандартных rwx для файлов и каталогов можно установить дополнительные права:
Разработчикам проекта Trustees [2] схема, применяемая в POSIX ACL, показалась неудобной. Для поддержания в рабочем состоянии системы POSIX ACL требуются инструменты, позволяющие рекурсивно обходить каталоги, необходимые для установки или изменения разрешений. Кроме того, при большом количестве объектов такая схема требует особого внимания и контроля. Схема, используемая в Novell Netware, несколько проще, т.к. для установки разрешений используется один конфигурационный файл, который будет полностью контролироваться системным администратором и не потребует разработки дополнительного инструментария либо сложных скриптов. Именно такой подход применен в trustees. В июне 2005 года стал наконец доступен стабильный релиз новой версии 3.0, о котором пойдет речь далее. Trustees позволяет дать доступ пользователю или группе пользователей к дереву каталогов, а не единственному файлу, что является отходом от стандарта POSIX ACL. В принципе в большинтсве случаев создание каталога и определение к нему доступа, является типичной задачей, доступ к отдельному файлу регулируется реже и является частным решением. Поэтому такой подход вполне себя оправдывает. К тому же в этом случае не требуется установка тысяч разрешений для каждого файла, что может привести при невнимательности к ошибке, и теперь администратору легче контролировать разрешения т.к. все ограничения для каталога и подкаталогов записываются в одной строке. Кроме того в этом случае снимается зависимость от используемой файловой системы и сервиса. Поэтому Trustees в принципе можно использовать при работе с Samba, ftp, NFS, http. Кроме принципа организации доступа Novell Netware в проекте использованы наработки Java Security. В архиве размером 26.3 Кб содержатся патчи к ядрам версии 2.6 (2.6.8-2.6.13-rc3), исходные тексты для компиляции модуля и утилиты settrustees. Trustees можно скомпилировать вместе с ядром или установить как модуль. Для первого варианта необходимы исходные тексты ядра с номером версии, для которого имеется патч (при отсутствии такового можно попробовать ближайший по номеру, с большой вероятностью он будет работать). Далее поступаем обычным образом: patching file security/trustees/trustees.h patching file security/trustees/init.c patching file security/trustees/funcs.c patching file security/trustees/fs.c patching file security/trustees/Kconfig patching file security/trustees/trustees_private.h patching file security/trustees/Makefile patching file security/trustees/security.c patching file security/Kconfig patching file security/trustees/Kbuild patching file security/Makefile При конфигурировании необходимо включить пункт Trustees ACLS в Security options ( рис . 2).
Рисунок 2. После пропатчивания в Security options появится новый пункт Trustees ACLS, который необходимо включить При ручном редактировании раскомментируем следующие строки в файле .config: После чего ядро компилируется и устанавливается обычным образом. При установке в качестве модуля необходимо наличие исходных текстов рабочего ядра (оно должно быть обязательно собрано с опцией CONFIG_SECURITY). Далее переходим в каталог module распакованного архива trustees и вводим make install. Если при компиляции не будут найдены исходные тексты, то следует указать их местонахождение вручную. # make KDIR=/usr/src/linux-2.6.11 install После успешной компиляции модуля переходим в подкаталог src и вводим make, получившийся исполняемый файл settrustees копируем в /usr/sbin, чтобы он был доступен только пользователю root. Теперь все готово к работе. Загружаем модуль modprobe trustees.ko, либо перегружаем систему с новым ядром. Для задания разрешения по умолчанию используется конфигурационный файл /etc/trustees.conf, но его можно переопределить опцией -f. Все записи по одной в строку состоят из устройства с каталогом/файлом и параметров доступа к нему. Обратите внимание на флаг I во втором примере. С его помощью указываются на чувствительные к регистру букв устройства. Иначе для //smb/share/DIR и //smb/share/dir будут установлены одни и те же права доступа. Каталоги, находящиеся на определенном устройстве, описываются без указания точки монтирования, т.е. если прописывается каталог /home/sergej, а раздел /home смонтирован на /dev/hda5, то указывается он так: В качестве указания параметров доступа используются следующие флаги:
Пустой параметр означает запрет всех полномочий. Вместе с флагами могут использоваться следующие модификаторы, которые могут устанавливаться, например для временного переопределения прав:
Пустые линии игнорируются, знак решетки (#) означает комментарий. Для примера занесем в файл информацию, запрещающую пользователю sergej запись в каталог, находящийся на разделе с файловой системой FAT, традиционно имеющий права доступа 777, и ограничимся одним уровнем рекурсии. Теперь создаем тестовый каталог и указываем модулю на необходимость монтирования виртуальной файловой системы. # mount -t trusteesfs none /mnt/win/test Так монтируются каталоги индивидуально, если требуется смонтировать все каталоги из файла /etc/trustees.conf, то вызывается утилита settrustees. # mount | grep trusteesfs
Пробуем создать файл :
Что и следовало ожидать. Стоит отметить, что создание файла на уровень выше или ниже тестового каталога пройдет без проблем. Чтобы остановить использование виртуальной файловой системы, достаточно набрать: Более жизненный пример. Позволим веб-серверу считывать данные из каталога с документами, а веб-мастерам, кроме того и изменение файлов: Итак, применение ACL позволяет использовать более сложные модели доступа, чем традиционная реализация, применяемая в UNIX-системах. Используя ACL, даже при небольшом количестве пользователей администратор может существенно упростить процесс распределения полномочий пользователей. Но на сегодняшний день без боязни можно использовать лишь консольные утилиты, остальные нуждаются в предварительном тестировании перед использованием в промышленной среде. Источник |