LXF159:Собственники файлов: ACL
|
|
|
Разрешайте работать со своими файлами по спискам управления доступом
Содержание |
Собственники файлов: ACL
Собственности посвящено девять десятых всех законов; ну, а если надо выдать файлы на запись нескольким пользователям? Нейл Ботвик расскажет про ACL.
- Метамодернизм в позднем творчестве В.Г. Сорокина
- ЛитРПГ - последняя отрыжка постмодерна
- "Ричард III и семиотика"
- 3D-визуализация обложки Ridero создаем обложку книги при работе над самиздатом.
- Архитектура метамодерна - говоря о современном искусстве, невозможно не поговорить об архитектуре. В данной статье будет отмечено несколько интересных принципов, характерных для построек "новой волны", столь притягательных и скандальных.
- Литература
- Метамодерн
- Рокер-Прометей против изначального зла в «Песне про советскую милицию» Вени Дркина, Автор: Нина Ищенко, к.ф.н, член Союза Писателей ЛНР - перепубликация из журнала "Топос".
- Как избавиться от комаров? Лучшие типы ловушек.
- Что делать если роблокс вылетает на windows
- Что делать, если ребенок смотрит порно?
- Почему собака прыгает на людей при встрече?
- Какое масло лить в Задний дифференциал (мост) Visco diff 38434AA050
- О чем может рассказать хвост вашей кошки?
- Верветки
- Отчетность бюджетных учреждений при закупках по Закону № 223-ФЗ
- Срок исковой давности как правильно рассчитать
- Дмитрий Патрушев минсельхоз будет ли преемником Путина
- Кто такой Владислав Поздняков? Что такое "Мужское Государство" и почему его признали экстремистским в России?
- Как правильно выбрать машинное масло в Димитровграде?
- Как стать богатым и знаменитым в России?
- Почему фильм "Пипец" (Kick-Ass) стал популярен по всему миру?
- Как стать мудрецом?
- Как правильно установить FreeBSD
- Как стать таким как Путин?
- Где лучше жить - в Димитровграде или в Ульяновске?
- Почему город Димитровград так называется?
- Что такое метамодерн?
- ВАЖНО! Временное ограничение движения автотранспортных средств в Димитровграде
- Тарифы на электроэнергию для майнеров предложено повысить
По части владельцев файлов и прав доступа линуксоиды проходят через три стадии. Первая – трудности: «Почему это так и почему мне нельзя записать файл сюда?». Вторая – понимание пользы защиты файлов от случайного или намеренного изменения или удаления. Третья затрагивает не всех – это недовольство ограничениями системы. Главное из них в том, что у каждого объекта – файла или каталога – только один владелец, и это ОК, пока в системе всего один пользователь (кстати, root мы пользователем не считаем – он обычно не работает с системой, а только администрирует ее). А стоит появиться нескольким пользователям, которым нужно изменять файлы друг друга, все усложняется. Ситуация это нередкая: например, удобно иметь общий каталог, где вся семья хранит фотки и работает с ними. Очень часто общий доступ к файлам нужен нескольким сотрудникам или отделениям офиса. Всех этих пользователей можно свести в одну группу и пользоваться каталогом, которым владеет группа, с правом на запись; но если кто-то создаст внутри новый файл или каталог, его владельцем с правом на запись будет только он сам.
Списки управления доступом
Чтобы улучшить такую систему «все или ничего», нужен более тонкий контроль над тем, кто, что и где может делать. При нескольких условиях такое позволяют списки управления доступом (Access Control Lists, ACL), расширение большинства файловых систем (ФС) Linux. Для начала нужно ядро со встроенной поддержкой ACL – в любом ядре из дистрибутива она будет, но собирая свое, не забудьте задать параметр CONFIG_EXT4_FS_POSIX_ACL или соответствующий для другой ФС. Далее, ACL надо активировать при монтировании ФС – в ФС типа XFS и Btrfs это включено по умолчанию, но для ФС ext в общем по умолчанию не делается, надо потрудиться самим. Чтобы ACL активировались при загрузке системы, откройте /etc/fstab и добавьте acl к списку опций монтирования файловой системы (опции разделяются запятыми):
/dev/sda5 /home ext4 noatime,acl 0 0
Этот параметр вступит в действие после перезагрузки. Чтобы активировать ACL сразу, перемонтируйте файловую систему с дополнительной опцией, например, так:
sudo mount /home -o remount,acl
Наконец, нужны пользовательские утилиты ACL, устанавливаемые в составе пакета ACL. Основные утилиты – setfacl (задает права доступа ACL для файла/каталога) и getfacl (отображает их).
Зададим простой ACL
Начнем с примера. Команды:
touch имяФайла
ls -l имяФайла
дадут следующий результат:
-rw-r--r-- 1 nelz users 0 Apr 11 15:14 имяФайла
– обычный файл с обычными правами на чтение/доступ для одного пользователя. Посмотрим, что о нем скажет команда getfacl.
getfacl имяФайла
выведет следующее:
- file: имяФайла
- owner: nelz
- group: users
user::rwgroup::
r--
other::r--
Результат примерно тот же, как у ls, но более подробный. Добавим прав доступа – этим владеет setfacl. Команды
setfacl --modify group:project:rw имяФайла
getfacl имяФайла
дают следующий результат:
- file: имяФайла
- owner: nelz
- group: users
user::rw
group::r--
group:project:rw
mask::rw
other::r--
Параметр --modify (или -m) велит setfacl изменить список управления доступом файла, а group:project:rw описывает добавляемое право доступа. Оно состоит из трех частей, разделенных знаком :. Первая – тип добавляемого права доступа: пользователь (user), группа (group) или остальные (other), аналогично обычным правам доступа. Вторая часть – имя пользователя или группы; если оставить его пустым, по умолчанию используется группа или пользователь, владеющие файлом, а для остальных (other) оно всегда пусто. Третья часть – применяемые права доступа. В примере мы добавили права на чтение и запись для всех членов группы project. Чтобы выполнять эти действия, не нужно быть администратором системы root или пользоваться sudo. Список управления доступом для файла задается владельцем файла, и пока вы работаете там, где у вас есть права доступа на запись, вы можете создавать все необходимые файлы и каталоги и запускать для них setfacl.
Пока мы не сделали ничего сверх обычной выдачи прав доступа, но разрешения ACL можно создавать и для каталогов. А главное, для каталогов можно задать права доступа по умолчанию. Если сделать владельцем каталога группу project и выдать ее на запись, то любой член этой группы сможет создать в каталоге файл, но владельцем каждого файла будет он сам, и только у него будут права на запись этого файла. Задавать права доступа для каждого файла очень нудно, поэтому можно сделать следующее:
mkdir Каталог
setfacl -m group:project:rwx Каталог
setfacl -m default:group:project:rwx Каталог
Первый вызов setfacl, аналогично прошлому, дает группе project права доступа rwx на новый каталог. Во втором вызове в описании ACL есть новый элемент – default, задающий права доступа для вновь созданных файлам/каталогам. Для временного переключения пользователей применяется sudo. Пусть Боб (bob) и Джим (jim) – пользователи из группы project. Скомандуйте:
sudo -u bob touch Каталог/имяФайла
ls -l Каталог/имяФайла
getfacl Каталог/имяФайла
sudo -u jim nano Каталог/имяФайла
Так как файл имяФайла создает bob, он является его владельцем, о чем сообщает команда ls. Setfacl показывает, что члены группы project могут писать данные в этот файл, и запустив Nano от имени jim, вы увидите, что Джим и вправду может редактировать файл – для сохранения изменений нажмите Ctrl+X в Nano. Хотя вы редактировали файл как другой пользователь, его владелец – все тот же Боб, как покажет команда ls -l somedir.
Работа с примерами
Обратите внимание, что если указать неверную группу или имя пользователя, setfacl выдаст ошибку, и если вы хотите поработать с этими примерами, стоит создать новую группу и нескольких пользователей. Добавьте пользователей через утилиты своего дистрибутива или сделайте это с терминала командами:
sudo groupadd project
sudo useradd bob
sudo useradd jim
sudo gpasswd -a bob project
sudo gpasswd -a jim project
Разобравшись в примерах, «лишних» людей можно удалить:
sudo userdel bob
sudo userdel jim
sudo groupdel project
Другие параметры
Пока мы пользовались только параметром -m для добавления одного ACL для файла или каталога. Можно указать и несколько списков, через запятые. Как и с параметром --modify, обозначения default, user, group и other можно сократить до первой буквы.
setfacl -m g:project:rwx,u:alice:rwx somedir
Эта команда, как и прежде, дает полный доступ всем членам группы project, а заодно дает доступ и пользователю alice, даже если она не член группы project. Если у вас есть типовой набор ACL, используемый в нескольких местах, скажем, при каждом создании проекта, их можно сохранить в файле, например, project.acl –
group:project:rwx
default:group:project:rwx
user:alice:rwx
и потом задавать права доступа для любого каталога командой
setfacl --modify-file project.acl somenewdir
У параметров --modify и --modify-file (или -M) есть параметры --remove и --remove-file (или -x и -X) для удаления ACL у файла или каталога соответственно. С помощью этих четырех параметров можно добавить или удалить ACL для файла; также есть параметры --set и --set-file, устанавливающие заданные ACL, удаляя все существующие (у них нет сокращенного варианта записи). Также можно перенаправить вывод getfacl на вход setfacl, тогда мы скопируем ACL с одного файла на другой.
getfacl oldfile | setfacl --set-file=- newfile
Символ — после set-file означает, что в качестве файла используется стандартный ввод, на который поступает вывод команды getfacl. О списках управления доступом можно рассказывать и далее, но для начала этого достаточно. Если вам нужна дополнительная информация, на man-страницах команд getfacl и setfacl приведен список всех параметров и несколько примеров. |