- Secure Files/Directories using ACLs (Access Control Lists) in Linux
- How to Check ACL Support in Linux Systems
- 1. Check Kernel for ACL Support
- 2. Check Required Packages
- 3. Check Mounted File System for ACLs Support
- 4. For NFS Server
- How to Implement ACL Support in Linux Systems
- How to Set New ACLs
- How to View ACLs
- How to Remove ACLs
- Reference Links
- If You Appreciate What We Do Here On TecMint, You Should Consider:
- Access Control Lists (Русский)
- Contents
- Установка
- Включение ACL
- Использование
- Изменение ACL
- Просмотр ACL
- Примеры
- Вывод команды ls
- Права на выполнение личных файлов
- Access Control List — списки контроля доступа
- Содержание
- Вступление
- Включение ACL в системе
- Утилиты ACL
- Утилита getfacl
- Утилита setfacl
- Примеры использования
- Автоматические операции
- Копирование ACL прав с одного объекта на другой.
- Копирование прав ACL каталога в права по умолчанию этого же каталога
- Операции над объектами c ACL
Secure Files/Directories using ACLs (Access Control Lists) in Linux
As a System Admin, our first priority will be to protect and secure data from unauthorized access. We all are aware of the permissions that we set using some helpful Linux commands like chmod, chown, chgrp… etc. However, these default permission sets have some limitation and sometimes may not work as per our needs. For example, we cannot set up different permission sets for different users on same directory or file. Thus, Access Control Lists (ACLs) were implemented.
Linux Access Control Lists
Let’s say, you have three users, ‘tecmint1‘, ‘tecmint2‘ and ‘tecmint3‘. Each having common group say ‘acl’. User ‘tecmint1‘ want that only ‘tecmint2‘ user can read and access files owned by ‘tecmint1‘ and no one else should have any access on that.
ACLs (Access Control Lists) allows us doing the same trick. These ACLs allow us to grant permissions for a user, group and any group of any users which are not in the group list of a user.
Note: As per Redhat Product Documentation, it provides ACL support for ext3 file system and NFS exported file systems.
How to Check ACL Support in Linux Systems
Before moving ahead you should have support for ACLs on current Kernel and mounted file systems.
1. Check Kernel for ACL Support
Run the following command to check ACL Support for file system and POSIX_ACL=Y option (if there is N instead of Y, then it means Kernel doesn’t support ACL and need to be recompiled).
2. Check Required Packages
Before starting playing with ACLs make sure that you have required packages installed. Below are the required packages that needs to be installed using yum or apt-get.
3. Check Mounted File System for ACLs Support
Now, check the mounted file system that whether it is mounted with ACL option or not. We can use ‘mount‘ command for checking the the same as shown below.
But in our case its not showing acl by default. So, next we have option to remount the mounted partition again using acl option. But, before moving ahead, we have another option to make sure that partition is mounted with acl option or not, because for recent system it may be integrated with default mount option.
In the above output, you can see that default mount option already have support for acl. Another option is to remount the partition as shown below.
Next, add the below entry to ‘/etc/fstab’ file to make it permanent.
Again, remount the partition.
4. For NFS Server
On NFS server, if file system which is exported by NSF server supports ACL and ACLs can be read by NFS Clients, then ACLs are utilized by client System.
For disabling ACLs on NFS share, you have to add option “no_acl” in ‘/etc/exportfs‘ file on NFS Server. To disable it on NSF client side again use “no_acl” option during mount time.
How to Implement ACL Support in Linux Systems
There are two types of ACLs:
- Access ACLs: Access ACLs are used for granting permissions on any file or directory.
- Default ACLs: Default ACLs are used for granting/setting access control list on a specific directory only.
Difference between Access ACL and Default ACL:
- Default ACL can be used on directory level only.
- Any sub directory or file created within that directory will inherit the ACLs from its parent directory. On the other hand a file inherits the default ACLs as its access ACLs.
- We make use of “–d” for setting default ACLs and Default ACLs are optionals.
Before Setting Default ACLs
To determine the default ACLs for a specific file or directory, use the ‘getfacl‘ command. In the example below, the getfacl is used to get the default ACLs for a folder ‘Music‘.
After Setting Default ACLs
To set the default ACLs for a specific file or directory, use the ‘setfacl‘ command. In the example below, the setfacl command will set a new ACLs (read and execute) on a folder ‘Music’.
How to Set New ACLs
Use the ‘setfacl’ command for setting or modifying on any file or directory. For example, to give read and write permissions to user ‘tecmint1‘.
How to View ACLs
Use the ‘getfacl‘ command for viewing ACL on any file or directory. For example, to view ACL on ‘/tecmint1/example‘ use below command.
How to Remove ACLs
For removing ACL from any file/directory, we use x and b options as shown below.
Let’s implement ACL’s on following scenario’s.
Two Users (tecmint1 and tecmint2), both having common secondary group named ‘acl‘. We will create one directory owned by ‘tecmint1‘ and will provide the read and execute permission on that directory to user ‘tecmint2‘.
Step 1: Create two users and remove password from both
Step 2: Create a Group and Users to Secondary Group.
Step 3: Create a Directory /tecmint and change ownership to tecmint1.
Step 4: Login with tecmint1 and create a Directory in /tecmint folder.
Step 5: Now set ACL using ‘setfacl‘, so that ‘tecmint1‘ will have all rwx permissions, ‘tecmint2‘ will have only read permission on ‘example‘ folder and other will have no permissions.
Step 6: Now login with other user i.e. ‘tecmint2‘ on another terminal and change directory to ‘/tecmint1‘. Now try to view the contents using ‘ls‘ command and then try to change directory and see the difference as below.
Step 7: Now give ‘execute‘ permission to ‘tecmint2‘ on ‘example‘ folder and then use ‘cd‘ command to see the effect. Now ‘tecmint2‘ have the permissions to view and change directory, but don’t have permissions for writing anything.
Note: After implementing ACL, you will see a extra ‘+‘ sign for ‘ls –l’ output as below.
Reference Links
If You Appreciate What We Do Here On TecMint, You Should Consider:
TecMint is the fastest growing and most trusted community site for any kind of Linux Articles, Guides and Books on the web. Millions of people visit TecMint! to search or browse the thousands of published articles available FREELY to all.
If you like what you are reading, please consider buying us a coffee ( or 2 ) as a token of appreciation.
We are thankful for your never ending support.
Источник
Access Control Lists (Русский)
Списки управления доступом (Access Control Lists, ACL) — расширенный, более гибкий механизм прав доступа для файловых систем, разработанный как дополнение к стандартным правам доступа UNIX. ACL позволяет задавать права доступа к объектам на диске для пользователей и групп.
Contents
Установка
Пакет acl уже установлен, так как является зависимостью systemd.
Включение ACL
Для использования ACL файловая система должна быть смонтирована с опцией acl . Файл fstab позволяет настроить постоянное монтирование с данной опцией.
В некоторых файловых системах параметр монтирования acl включён по умолчанию. К таким файловым системам относятся Btrfs и Ext2/3/4. Следующая команда позволяет проверить раздел с файловой системой ext* на наличие параметра acl :
Убедитесь, что используемая по умолчанию опция не была переопределена. Об этом будет свидетельствовать параметр noacl в соответствующей строке файла /proc/mounts .
Задать параметры монтирования файловой системы по умолчанию можно командой tune2fs -o параметр раздел , например:
Это очень удобно при работе с внешними дисками, поскольку такой диск будет монтироваться с опцией acl и на других Linux-машинах. В противном случае придётся редактировать файл /etc/fstab на каждой системе.
Использование
Изменение ACL
Для изменения прав ACL используется команда setfacl.
Задать права пользователя (в качестве пользователь можно использовать имя пользователя или его ID):
Задать права группы (в качестве группа можно использовать имя группы или её ID):
Задать права для остальных:
Настроить наследование новыми файлами и каталогами записей ACL родительского каталога (не относится к файлам/каталогам, которые копируются в каталог):
Удалить определённую запись ACL:
Удалить записи по умолчанию:
Удалить все записи ACL:
The factual accuracy of this article or section is disputed.
Просмотр ACL
Вывести права доступа ACL:
Примеры
Установить все права доступа к файлу abc для пользователя johnny :
Измененить права для пользователя johnny :
Удалить все записи ACL:
Вывод команды ls
Символ + (плюс) после прав доступа Unix в выводе команды ls -l указывает на использование ACL:
Права на выполнение личных файлов
Ниже описано, как процесс вроде веб-сервера может получить доступ к файлам в домашнем каталоге пользователя без ущерба для безопасности.
Будем считать что веб-сервер работает от пользователя http и получает доступ к домашнему каталогу /home/geoffrey пользователя geoffrey .
Санчала предоставим права на выполнение для пользователя http :
Поскольку пользователь http теперь имеет доступ к файлам в /home/geoffrey то безопаснее будет удалить доступ для остальных пользователей:
Проверим изменения с помощью getfacl :
Как видно из вывода, other больше не имеют никаких прав, но пользователь http всё ещё может обращаться к файлам.
Если необходимо будет выдать пользователю http права доступа на запись в определённые файлы/каталоги, выполните:
Источник
Access Control List — списки контроля доступа
Содержание
Поддерживаемые версии Ubuntu |
---|
Все с ядром 2.4.21 (?) и выше, а также другие ОС |
Вступление
Итак, пришло время задуматься о безопасности вашей сети. В частности о назначении прав на каталоги и файлы для пользователей и групп. Стандартные права в операционных системах Unix не так гибки, как хотелось бы. К сожалению они годятся для использования в простых схемах сети. Например, ситуацию когда к одному и тому же каталогу нужно, чтобы несколько групп пользователей имели разные права доступа, не реализовать с использованием стандартных прав.
Устоявшиеся истины:
Чтобы добавить пользователя в ту, или иную группу, достаточно отредактировать файл /etc/group:
Примечание прислал Лихоманенко Артем 2013/04/23 15:55
Видно, что в листинге выше в группу scanner входят пользователи hplip и allexserv. Чтобы добавить в эту группу еще пользователей, просто перечислите их символьные имена через запятую.
Синтаксис файла прост:
имя_группы:пароль:GID:список_пользователей
Итак, основная мысль статьи — это использование расширенных прав ACL . 2)
Включение ACL в системе
В тех разделах винчестера, в которых указан дополнительный параметр acl команды mount — grpquota,acl,suid — списки контроля будут поддерживаться в полном объеме. В моем случае поддержка ACL активирована на разделах /dev/sda5 и /dev/sda6.
После редактирования файла, лучше не мучаться и перезагрузить сервер, хотя, как утверждается в некоторых статьях, достаточно размонтировать раздел и смонтировать его вновь (такой номер у меня почему-то не прошел).
Утилиты ACL
Существуют два типа ACL :
Но не все так грустно! Перевод статьи был написан в 2006 году (к сожалению до оригинала я так и не добрался). В другой же статье, более поздней, сказано:
Итак, рассмотрим синтаксис и параметры getfacl и setfacl.
Утилита getfacl
О getfacl сильно и говорить нечего. Она выводит листинг ACL прав для указанных объектов.
Теперь рассмотрим, что же отобразит команда getfacl:
Что касается ключей getfacl, то есть пара из них которые стоит рассмотреть, но рассматривать их будем тогда, когда будем изучать setfacl.
Утилита setfacl
Теперь об утилите setfacl. Как уже говорилось выше, утилита setfacl предназначена для установки, модификации или удаления ACL .
Рассмотрим простой синтаксис setfacl:
setfacl
Часто используемые ключи:
Ключ | Описание |
---|---|
— Устанавливает новые указанные права ACL , удаляя все существующие. Необходимо, чтобы наравне с задаваемыми правилами ACL были также указаны стандартные права Unix, в противном случае будет давать ошибку; | |
— Модифицирует указанные ACL на объекте. Другие существующие ACL сохраняются. | |
— Удаляет указанные ACL права с объекта. Стандартные права Unix не изменяются. |
Часто используемые опции:
Опция | Описание |
---|---|
-b | — Удаляет все ACL права с объекта, сохраняя основные права; |
-k | — Удаляет с объекта ACL по умолчанию. Если таковых на объекте нет, предупреждение об этом выдаваться не будет; |
-d | — Устанавливает ACL по умолчанию на объект. |
–restore=file | — Восстанавливает ACL права на объекты из ранее созданного файла с правами. 5) |
-R | — Рекурсивное назначение (удаление) прав, тобишь пройтись по всем подкаталогам. |
Формирование списка правил:
Синтаксис | Описание | Пример использования |
---|---|---|
— Назначает ACL для доступа заданному пользователю. Здесь можно указать имя или UID пользователя. Это может быть любой пользователь, допустимый в данной системе. | Пример: |
— назначает пользователю allexserv права на чтение и запись.
— назначает группе children права на чтение.
— устанавливает фактические максимальные права на чтение и выполнение.
— убирает все права (отсутствие прав).
— Сами правила для пользователя или группы. Могут принимать значения ( r ), ( x ), ( w ), или сочетания друг с другом.
Примеры использования
Теперь давайте добавим к этому файлу еще пользователя allexserv:
Теоретически, в данном случае пользователь child не может удалить файл (про allexserv ничего не говорю, т.к. он входит в группу root у меня). Но проведя тест, пользователь child все-таки удалил файл, правда перед удалением система спросила:
В то же время попробовал отредактировать файл qwert под пользователем child и попытался записать изменения. Система в записи отказала. Здесь стоит отметить, что удаление файла регламентируется правами на каталог в коем расположен этот файл. Причина такого поведения именно в этом.
Теперь давайте удалим с файла qwert права ACL для пользователя allexserv:
Очевидно, что таким макаром можно назначать и удалять ACL права для пользователей и групп на файлы и каталоги.
Задача: создадим каталог Proverka и назначим ему владельца child и группу children (разумеется, пользователь и группа должны существовать в системе). Установим ACL права для пользователя allexserv и пользователя mysql. Установим ACL по умолчанию на каталог Proverka так, чтобы создаваемым объектам внутри него также назначались ACL .
Создаем каталог, устанавливаем права и владельца:
Видно, что появились строки начинающиеся с default. Это и есть права по умолчанию, которые будут принимать все создаваемые внутри объекты. Проверим, создав пустой файл myfile.txt и подкаталог MyKatalog в каталоге Proverka:
Удалить права по умолчанию можно: setfacl -k Proverka.
Если нужно также удалить права по умолчанию и в подкаталогах, то добавьте ключ -R (рекурсия): setfacl -R -k /media/Work/test/Proverka .
Здесь мы оперировали двумя пользователями. Но ничто не мешает вам оперировать также целыми группами пользователей.
Автоматические операции
Любой администратор стремится к оптимизации. Понятно, что назначить вручную 100 объектам одни и те же права — нудное занятие и нецелесообразное. Есть некоторые фишечки, которые могут облегчить подобные задачи.
Копирование ACL прав с одного объекта на другой.
В документации приведен следующий пример:
Справедлива будет также такая запись:
В этом случае права на file2 не заменяются как при использовании — -set, а добавляются к уже существующим правам ACL .
Копирование прав ACL каталога в права по умолчанию этого же каталога
В этом примере getfacl получает все права которые вы установили на каталог dir и устанавливает их на этот же каталог dir делая их правами по умолчанию. Очень удобно. Обратите внимание на ключ — -access у команды getfacl. При вызове getfacl без параметров, она отображает все права ACL , включая права по умолчанию. Здесь же, ключ — -access заставляет getfacl показать только права ACL на каталог, а права по умолчанию (если таковые имеются у каталога) — скрыть. Обратный ключ — это ключ -d:
можно было бы воспользоваться именно этой фишечкой, как то так:
Результат был бы тот же.
Вот и все, а вообще, не поленитесь почитать man getfacl, очень занимательно!
Операции над объектами c ACL
В заключении хочу еще раз обратить внимание на операции с обектами у которых установлены ACL , такие как копирование, перемещение, архивирование. Выше мы уже упоминали о них. Некоторые замечания:
Утилиту star нужно будет установить из репозиториев: apt-get install star
Вот некоторые часто используемые опции star:
Опция | Описание |
---|---|
-c | Создаёт файл архива |
-n | Отключает извлечение файлов, используется в сочетании с -x для просмотра списка извлекаемых файлов. |
-r | Заменяет файлы в архиве. Файлы записываются в конец архива, заменяя любые файлы с тем же путём и именем. |
-t | Выводит содержимое файла архива. |
-u | Обновляет файл архива. Файлы записываются в конец архива, если их ещё не было в архиве или если они новее, чем файлы с тем же именем в архиве. 7) |
-x | Извлекает файлы из архива. Если используется с ключом -U и файл в архиве старее, чем соответствующий файл в файловой системе, такой файл не извлекается. |
-help | Выводит наиболее важные параметры. |
-xhelp | Выводит менее важные параметры. |
-/ | Оставляет ведущую косую черту в имени файла при извлечении файлов из архива. По умолчанию она убирается. |
-acl | При создании архива или извлечении файлов, архивирует или восстанавливает все ACL , связанные с файлами или каталогами. |
Пример для архивирования утилитой star с сжатием:
star -czv -Hexustar -acl -f /tmp/homedir.tgz /media/Profil/home
Пример для разархивирования в текущий каталог:
star -xv -Hexustar -acl -f homedir.tgz
Вот собственно и все, что я хотел рассказать про ACL . Применяйте логику и смекалку и все будет хорошо.
© 2012 Ubuntu-ru — Русскоязычное сообщество Ubuntu Linux.
© 2012 Canonical Ltd. Ubuntu и Canonical являются зарегистрированными торговыми знаками Canonical Ltd.
Источник