Настройка прав доступа ACL
Для создания прав доступа к файлам Samba ресурса сервера используйте ACL (Access Control List — список контроля доступа). При помощи ACL вы можете установить доступ к файлам определенным группам, либо конечным пользователям.
Новый ресурс
Для примера допустим у вас в системе есть две группы admins и managers, а также два пользователя alexei и petr.
Создадим директорию Managers для доступа на чтение и запись пользователям, входящим в группу managers.
mkdir -m 700 Managers
setfacl -m d:g:managers:rwx,g:managers:rwx Managers
Первая команда создаст директорию с правами чтения выполнения и изменения содержимого для пользователя root.
Второй командой мы установим те же права для пользователей группы managers.
Файлы и директории, создаваемые пользователями этой группы, либо root-ом, будут наследовать атрибуты доступа.
Просмотр прав доступа
Увидеть права доступа из консоли можно выполнив команду:
getfacl Managers
Программа выведет следующий текст:
# owner: root # group: root user::rwx group::--- group:managers:rwx mask::rwx other::--- default:user::rwx default:group::--- default:group:managers:rwx default:mask::rwx default:other::---
Управление доступом
Для управлением доступом используется команда setfacl.
Для модификации или добавления правила используется параметр -m.
-m user::права
-m group::права
Если пользователь пропущен, то права назначаются владельцу файла.
Если группа пропущена, то права назначаются группе-владельцу файла.
Добавить право на чтение/запись файла secretinfo пользователям alexei и petr:
setfacl -m user:alexei:rw,u:petr:rw secretinfo
Права по умолчанию
Для директорий можно указать ACL права, которые будут автоматически добавляться для файлов и директорий, создаваемых в ней.Для этого используется идентификатор default или параметр -d. На саму директорию права указанные в default не распространяются.
Для файлов и директорий, создаваемых в директории managerdata, добавить право чтение/записи для пользователя petr.
setfacl -m default:user:iivanov:rw managerdata
Рекурсивная установка прав
Для установки прав для всех файлов и директорий внутри директории используется параметр -R.
Так как для того, чтобы читать файл необходимы права на чтение r, а для того чтобы читать директорию необходимы права на чтение и выполнение rx, то можно при указании прав вместо х указывать X.
Флаг X устанавливает права на выполнение только для директорий и файлов, которые уже имеют право на выполнение.
Флаг X вычисляется на момент запуска setfacl, поэтому в default правилах она интерпретируется как x.
Разрешить пользователю alexei читать все файлы и просматривать директории в folder.
setfacl -R -m d:u:alexei:rwx,u:apetrov:rwX folder
или
setfacl -R -m d:u:alexei:rw,u:apetrov:rwX folder
Обе команды имеют недостаток, который проявляется при создании новых файлов и директорий.
Разница в том, что в первом случае пользователь alexei получит право на выполнение всех новых файлов создаваемых в folder и вложенных директориях,а во втором случае пользователь не сможет просматривать новые директории.
Удаление прав
Удалить права доступа к файлу secretfile для пользователя petr.
setfacl -x u:petr secretfile
Удалить права доступа ко всем файлам и директориям внутри folder для пользователя alexei.
setfacl -R -x u:alexei folder
Очистка правил
Для удаления всех ACL правил используется опция -b. Ее также можно использовать совместно с -m, для того, чтобы заместить права.
Удалить все ACL правила и разрешить пользователю petr читать secretfile.
setfacl -b -m u:petr:r secretfile
Эффективная маска
Эффективная маска используется для ограничения определенного действия для всех пользователей и групп описанных в ACL. То есть можно например запретить всем писать в файл установив эффективную маску r-x.
setfacl -m m::rx filename
Иногда эффективная маска вычисляется автоматически (например при действии chmod, а также при создании файла, так как применяется права umask). Для отмены маски ее следует установить в значение rwx.
Порядок определения доступа к файлу
Может ли пользователь выполнить действие над файлом или директорией определяются следующим образом.
- Используются права владельца, если пользователь им является.
- Используются права, указанные конкретно для этого пользователя.
- Если действие разрешено хотя бы для одной из группы в которую входит пользователь.
- Если пользователь не входит ни в одну группу описанную в ACL, то используются права для other.
Использование команды в числовом виде
Права записываются одной строкой сразу для трёх типов пользователей:
- владельца файла (u);
- других пользователей, входящих в группу владельца (g);
- всех прочих пользователей (o);
В числовом виде файлу или каталогу устанавливаются абсолютные права , в то же время в символьном виде можно установить отдельные права для разных типов пользователей.
Пример: в числовом виде, установить права rwx-rx-rx:
chmod 755 filename
владелец | группа | остальные | |
---|---|---|---|
восьмеричное значение | 7 | 5 | 5 |
символьная запись | rwx | r-x | r-x |
обозначение типа пользователя | u | g | o |
Таким образом, права «755» записываются в символьном виде как «rwxr-xr-x». При этом для понимания сути задания прав в Unix-системах полезно знать представление чисел в двоичной системе счисления.
двоичная | восьмеричная | символьная | права на файл | права на директорию |
---|---|---|---|---|
000 | --- | нет | нет | |
001 | 1 | --x | выполнение | чтение файлов и их свойств |
010 | 2 | -w- | запись | нет |
011 | 3 | -wx | запись и выполнение | всё, кроме чтения списка файлов |
100 | 4 | r-- | чтение | чтение имён файлов |
101 | 5 | r-x | чтение и выполнение | доступ на чтение |
110 | 6 | rw- | чтение и запись | чтение имён файлов |
111 | 7 | rwx | все права | все права |
Часть разрешений имеет смысл только в сочетании с другими. Из первых четырёх пунктов (не дающих права на чтение файла) для файлов обычно используется только «—», то есть полный запрет доступа к файлу данному типу пользователей. Для директорий из всего списка обычно применяются только 0, 5 и 7 — запрет, чтение и выполнение, и полный доступ.
Суммировав эти коды для трёх типов пользователей, можно получить числовую или символьную запись. Например, chmod 444 {имяфайла}: 400+40+4=444 — все имеют право только на чтение (идентично «r—r—r—»).
Помимо стандартных разрешений ‘rwx’, команда chmod осуществляет также управление битами SGID, SUID и T. Установленные атрибуты SUID или SGID позволяют запускать файл на выполнение с правами владельца файла или группы соответственно.
Для SUID вес — 4000, а для SGID — 2000. Данные атрибуты имеют смысл при установленном соответствующем бите исполнения и обозначаются при символьной записи буквой «s»: «rwsrwxrwx» и «rwxrwsrwx» соответственно.
Пример: chmod 4555 {имяфайла} — все имеют право на чтение и выполнение, но запускаться файл на исполнение будет с правами владельца.
Установка SGID для директории приведёт к установке принадлежности каждого нового создаваемого файла к той же группе, к которой принадлежит сама директория, а не к основной группе владельца, как это происходит по умолчанию. SUID для директории не имеет смысла.
t-бит используется только с директориями. Когда t-бит для директории не установлен, файл в данной директории может удалить любой пользователь, имеющий доступ на запись к данному файлу. Устанавливая t-бит на директорию, мы меняем это правило таким образом, что удалить файл может только владелец этого файла. Следуя приведённой выше кодировке, t-бит имеет вес 1000.
Примечание: Право на запись даёт пользователю возможность записывать или изменять файл, а право на запись для каталога — возможность создавать новые файлы или удалять файлы из этого каталога. Если на каталоге стоит возможность записи (w), то файл внутри этого каталога можно будет удалить, даже если право на запись для него не установлено. (В соответствии с концепцией файловой системы POSIX).
Популярные значения
- 400 (-r--------)
- Владелец имеет право чтения; никто другой не имеет права выполнять никакие действия
- 644 (-rw-r--r--)
- Все пользователи имеют право чтения; владелец может редактировать
- 660 (-rw-rw----)
- Владелец и группа могут читать и редактировать; остальные не имеют права выполнять никаких действий
- 664 (-rw-rw-r--)
- Все пользователи имеют право чтения; владелец и группа могут редактировать
- 666 (-rw-rw-rw-)
- Все пользователи могут читать и редактировать
- 700 (-rwx------)
- Владелец может читать, записывать и запускать на выполнение; никто другой не имеет права выполнять никакие действия
- 744 (-rwxr--r--)
- Каждый пользователь может читать, владелец имеет право редактировать и запускать на выполнение
- 755 (-rwxr-xr-x)
- Каждый пользователь имеет право читать и запускать на выполнение; владелец может редактировать
- 777 (-rwxrwxrwx)
- Каждый пользователь может читать, редактировать и запускать на выполнение
- 1555 (-r-xr-xr-t)
- Каждый пользователь имеет право читать и запускать на выполнение; удалить файл может только владелец этого файла
- 2555 (-r-xr-sr-x)
- Каждый пользователь имеет право читать и запускать на выполнение с правами группы(user group) владельца файла
- 4555 (-r-sr-xr-x)
- Каждый пользователь имеет право читать и запускать на выполнение с правами владельца файла
Шаг 2 – Изменение владельца файла или папки через командную строку
chown – команда используется для смены владельца файла или папки. Самый стандартный синтаксис для этой команды:
chown [владелец/группа владельца]
К примеру, если у нас есть файл “demo.txt” и мы хотим изменить владельца на “jerry” и группу владельца на “clients”, нам необходима эта команда:
chown jerry:clients demo.txt
Как вы видите, мы отделили владельца и группу владельца символом “” (двоеточие). Если мы хотим поменять только владельца файла, используем этот код:
chown jerry demo.txt
Мы просто убрали группу владельца и вписали нового владельца файла, в таком случае группа владельца останется без изменений.
Другой схожий пример, если мы хотим поменять только группу владельца:
chown :clients demo.txt
В этом случае, группа владельца изменится на clients (владелец останется прежним).
Управление владением файлами
Это происходит в следующем порядке:
- Оболочка проверяет, являетесь ли вы владельцем файла, к которому вы хотите получить доступ. Если вы являетесь этим владельцем, вы получаете разрешения и оболочка прекращает проверку.
- Если вы не являетесь владельцем файла, оболочка проверит, являетесь ли вы участником группы, у которой есть разрешения на этот файл. Если вы являетесь участником этой группы, вы получаете доступ к файлу с разрешениями, которые для группы установлены, и оболочка прекратит проверку.
- Если вы не являетесь ни пользователем, ни владельцем группы, вы получаете права других пользователей (Other).
ls -l
lsfindfind -user
find users
chown
chown -R
chownchgrpchown.
chown
- chown lisa myfile1 устанавливает пользователя lisa владельцем файла myfile1.
- chown lisa.sales myfile устанавливает пользователя lisa владельцем файла myfile, а так же устанавливает группу sales владельцем этого же файла.
- chown lisa:sales myfile то же самое, что и предыдущая команда.
- chown .sales myfile устанавливает группу sales владельцем файла myfile без изменения владельца пользователя.
- chown :sales myfile то же самое, что и предыдущая команда.
chgrpchgrp
chown-Rchgrp
Следующие 9 символов обозначают права доступа.
Данные 9 символов состоят из трех групп:
- Первая группа из трех символов обозначает права доступа владельца файла или директории (u — user).
- Вторая группа из трех символов обозначает права доступа на файл или директорию для системной группы (g — group).
- Третья группа из трех символов обозначает права доступа на файл или директорию для всех остальных (o — other).
У этих трёх групп одинаковая комбинация символов, то есть:
Что же они обозначают?
Очень легко запомнить:
r | read, то есть, право доступа на чтение файла или директории. |
w | write, то есть, право на изменение и удаление файла или директории. |
x | eXecute, то есть, право на запуск файла как программы или вход в директорию. |
Всегда располагаются в таком порядке:
Если вместо какого-то символа идёт тире (минус), к примеру:
то это значит, что отсутствуют права на изменение и удаление файла или директории.
Или так:
то это обозначает, что отсутствуют права на изменение и запуск файла или директории. Доступен только просмотр.
Таким образом, из нашего примера:
это сообщение обозначает, что является директорией, у владельца и у группы есть полные права доступа — на чтение, изменение, удаление, запуск (вход внутрь каталога), у всех остальных есть только права на чтение и запуск(вход внутрь каталога).
Как видите, ничего сложного нет.
Определение владельца и группы файла или директории.
Но у Вас может возникнуть закономерный вопрос о том, а как же узнать, кто именно является владельцем файла и какая группа?
Те же самые команды из первого пункта:
Как видно на скриншоте:
- в третей колонке идет имя владельца файла;
- в четвертой колонке идет название группы.
Следовательно, если пользователь не владелец файла, но входит в группу, то у него будут права на файл или директорию этой самой группы.
Общая информация о правах доступа в Linux
Режим доступа к файлу можно изменить с помощью команды chmod. Изменять права доступа к файлу позволено только его владельцу либо пользователю root. В UNIX-системах код задается в виде восьмеричного числа. Также поддерживается система мнемонических (буквенных) обозначений. Первый способ удобнее для системного администратора, но при этом можно задать только абсолютное значение режима доступа. А используя мнемонический синтаксис, вы можете сбрасывать и устанавливать отдельные параметры, к примеру, добавить право на чтение либо убрать право на запись.
Первым аргументом команды chmod является спецификация прав доступа, то есть восьмеричное число (774, 777 и т.д.) либо мнемоническое обозначение (r+o, w-u и т.д.). Второй и последующий аргументы — имена файлов, права доступа к которым подлежат изменению. При использовании восьмеричной нотации первая цифра относится к владельцу, вторая — к группе, а третья — к остальным пользователям.
Права доступа к файлам подразделяются на следующие:r — право на чтение данных.w — право на изменение содержимого (запись – только изменение содержимого, но не удаление).x — право на исполнение файла.
Теперь о правах доступа к папке (директории):r — право на чтение директории (можно прочитать содержимое директории, т.е. получить список объектов, находящихся в ней)w — право на изменение содержимого директории (можно создавать и удалять объекты в этой директории, причем если вы имеете право на запись, то удалять вы сможете даже те файлы, которые вам не принадлежат)x — право, которое позволяет вам войти в директорию (это право всегда проверяется в первую очередь, и даже если вы имеете все нужные права на объект, который закопан глубоко в цепочке директорий, но не имеете права “X” для доступа хотя бы к одной директории на пути к этому файлу, то к нему вы так и не пробьетесь)
В таблице указано восемь возможных комбинаций:
Восьмеричное число | Двоичное число | Режим доступа |
---|---|---|
000 | ||
1 | 001 | |
2 | 010 | |
3 | 011 | -wx |
4 | 100 | |
5 | 101 | r-x |
6 | 110 | rw- |
7 | 111 | rwx |
Например, команда:
chmod 711 myfile
предоставляет владельцу все права, а всем остальным пользователям — только право выполнения, а команда:
chmod 775 myfile
предоставляет владельцу и группе все права, а остальным пользователям запрещает изменение файла. Для смены прав доступа необходимо находиться в директории, где расположен файл, либо указывать полный путь:
chmod 775 /var/www/myfile
Для применения прав доступа ко всем вложенным в директорию файлам и папкам (рекурсивно) необходимо в команду добавить ключ -R. То есть команда будет выглядеть как:
chmod -R 711 myfile
Примеры мнемонических спецификаций команды chmod:
Спецификация | Значение |
---|---|
u+w | Владельцу файла дополнительно дается право выполнения. |
ug=rw,o=r | Владельцу и группе предоставляется право чтения/записи, остальным пользователям — право чтения. |
a-x | Все пользователи лишаются права выполнения. |
ug=srx,o= | Владельцу и группе дается право чтения/выполнения, устанавливается также бит SUID; остальным пользователям запрещен доступ к файлу. |
g=u | Группе назначаются такие же права, что и владельцу |
Символ u («user») обозначает владельца файла, символ g («group») — группу, символ о («others») — других пользователей, символ a («all») — всех пользователей сразу.
То есть, если необходимо убрать право на редактирование всех вложенных файлов и папок у других пользователей, то с помощью мнемонических обозначений команда будет выглядеть следующим образом:
chmod o-w -R myfile
В качестве примера мы будем устанавливать права доступа 777 для папки /var/www/mysite и всех вложенных в нее файлов и каталогов.ВНИМАНИЕ! Установка прав доступа 777 используется исключительно в качестве примера, их использование может привести к уязвимости сервера!
Связанные команды
chown – Изменить владельца файлов или каталогов.getfacl – Показать списки контроля доступа к файлам.ls – список содержимого каталога или каталогов.
Инструкции <хедер class=”author-хедер”>
Запись прав доступа числом
Пример:
chmod 764 myfile
В данном формате права доступа задаются не символами rwx, как описано выше, а трехзначным числом. Каждая цифра числа означает определенный набор прав доступа.
- Первая цифра используется для указания прав доступа для пользователя.
- Вторая цифра для группы.
- Третья для всех остальных.
В таблице ниже приводятся все возможные комбинации разрешений rwx и соответсвующие им числа (которые используются в команде chmod):
разрешения отсутствуют | — | |
1 | x — запуск | –x |
2 | w — изменение | -w- |
3 | x+w — запуск+изменение | -wx |
4 | r — чтение | r– |
5 | r+x — чтение+запуск | r-x |
6 | r+w — чтение+изменение | rw- |
7 | r+w+x — чтение+изменение+запуск | rwx |
Рассмотрим использование команды chmod с записью прав доступа числом на примере. Установим для файла права доступа 764:
chmod 764 myfile
Это означает (см. таблицу выше), что для файла myfile мы устанавливаем права доступа 764, которые означают:
- 7 — права для владельца-пользователя. Владелец файла может читать, изменять и запускать файл (r+w+x).
- 6 — права для группы. Пользователи, которые принадлежат группе могут читать и изменять файл (r+w).
- 4 — права для всех остальных. Все остальные могут только читать файл (r).
Если записать 764 с помощью символов (см. таблицу), то мы получим: «rwxrw-r-».
В таблице ниже приведены некоторые часто используемые значения числовых значений прав доступа:
400 | -r——– | Владелец файла может только читать файл. Для всех остальных все действия с файлом запрещены. |
644 | -rw-r–r– | Все пользователи могут читать файл. Владелец может изменять файл. |
660 | -rw-rw—- | Владелец и группа могут читать и изменять файл. Для всех остальных все действия с файлом запрещены. |
664 | -rw-rw-r– | Все могут читать файл. Владелец и группа могут изменять. |
666 | -rw-rw-rw- | Все могут читать и изменять файл. |
700 | -rwx—— | Владелец может читать, изменять и запускать файл. Для всех остальных все действия с файлом запрещены. |
744 | -rwxr–r– | Все могут читать файл. Владелец может также изменять и запускать файл. |
755 | -rwxr-xr-x | Все могут читать и запускать файл. Владелец может также изменять файл. |
777 | -rwxrwxrwx | Все пользователи могут читать, изменять и редактировать файл. |
Запись прав доступа символами
Примеры:
chmod +x myfile1
chmod g=rw myfile2
chmod u-w myfile3
Как вы можете видеть, в данном формате права доступа задаются символами rwx, но в синтаксисе используются и другие вспомогательные символы, например, математические операции «+» и «-» и такие символы как, например, «g» или «u».
Общий синтаксис можно записать примерно так:
chmod (владелец)(математическая операция)(разрешения) имя_файла
Обозначения для владельцев файла следующие:
u | Владелец-пользователь. |
g | Группа. |
o | Все остальные. |
a | Вообще все. |
Математические операции означают следующее:
+ | Добавляет к текущим правам доступа новое разрешение. |
– | Удаляет из текущих прав доступа определенное разрешение. |
= | Устанавливает полностью новые разрешения (предыдущие перезаписываются новыми). |
В одной команде можно перечислять владельцев и их разрешения через запятую (см. пример ниже).
Рассмотрим примеры:
- chmod +x myfile1
В данном случае мы не используем обозначения для владельцев, а значит разрешения устанавливаются для всех пользователей. «+x» означает — установить разрешение на запуск (x) файла для всех пользователей. Это эквивалентно выполнению команды: chmod a+x myfile1.
- chmod g=rw myfile2
Здесь используется обозначение g и символ равенства «=». Это означает, что для группы мы устанавливаем права доступа на чтение и запись файла (rw).
- chmod u-w myfile3
Для владельца файла (u) мы удаляем разрешение на изменение (w) файла.
- chmod ug+x myfile2
Разрешаем владельцу (u) и группе (g) запускать файл (x).
- chmod u+x,g-w,o-r myfile3
Это как раз тот случай, когда мы перечисляем владельцев через запятую и устанавливаем для них разрешения. Для владельца файла (u) мы разрешаем запуск файла, для группы (g) мы запрещаем изменять файл, для всех остальных (o) мы запрещаем читать файл.
Рекурсивное изменение прав доступа
Если необходимо изменить права доступа на все файлы в директории, включая вложенные директории, то для этого существует опция -R, что означает рекурсивное изменение прав доступа для директорий и их содержимого. Например, изменим права доступа у всех файлов в директории Mydir:
chmod -R 644 Mydir
И еще один момент. Если пользователь не является владельцем файла, но ему нужно изменить права доступа у данного файла, то команду chmod необходимо выполнять с использованием sudo, например:
sudo chmod 644 file
Подытожим
Для каждого файла или директории в Linux задаются права доступа. Они задаются тремя атрибутами: набором разрешений, именем владельца, именем группы.
Набор разрешений — это три блока прав доступа: права доступа для владельца файла, права доступа для группы, права доступа для всех остальных.
Разрешения записываются символами r, w, x.
Набор разрешений состоит из трех блоков и записывается в виде трех rwx, записанных друг за другом в виде одного «слова».
Если какая-либо возможность отключена (запрещена), то вместо соответствующего символа в наборе разрешений ставится прочерк (символ минус).
Как посмотреть права доступа к файлам в Linux
Конечно, вы можете посмотреть права доступа к файлам в Linux с помощью файлового менеджера. Все они поддерживают эту функцию, но так вы получите неполную информацию. Для максимально подробной информации обо всех флагах, в том числе специальных, нужно использовать команду ls с параметром -l. Все файлы из каталога будут выведены в виде списка, и там будут показаны все атрибуты и биты.
Чтобы узнать права на файл linux выполните такую команду, в папке где находится этот файл:
$ ls -l
За права файлов в linux тут отвечают черточки. Первая это тип файла, который рассмотрен в отдельной статье. Дальше же идут группы прав сначала для владельца, для группы и для всех остальных. Всего девять черточек на права и одна на тип.
Рассмотрим подробнее, что значат условные значения флагов прав:
- — — нет прав, совсем;
- —x — разрешено только выполнение файла, как программы но не изменение и не чтение;
- -w- — разрешена только запись и изменение файла;
- -wx — разрешено изменение и выполнение, но в случае с каталогом, вы не можете посмотреть его содержимое;
- r— — права только на чтение;
- r-x — только чтение и выполнение, без права на запись;
- rw- — права на чтение и запись, но без выполнения;
- rwx — все права;
- —s — установлен SUID или SGID бит, первый отображается в поле для владельца, второй для группы;
- —t — установлен sticky-bit, а значит пользователи не могут удалить этот файл.
В нашем примере, файл test1 имеет типичные разрешения для программ, владелец может все, группа только чтение и выполнение, а все остальные — только выполнение. Для test2 дополнительно установлен флаг SUID и SGID. А для папки test3 установлен Sticky-bit. Файл test4 доступный всем. Теперь вы знаете как посмотреть права на файл linux.