Поговорив о пользователях и группах, самое время
вспомнить про права доступа, которые для них настраиваются. Общая
схема прав одинакова и для файлов, и для папок. Вы уже видели, как
система отображает права доступа, в выводе команды ls -l
, которая показывает содержимое директории:
Первые 10 символов содержат информацию о правах к файлу или каталогу.
-
тип файла
rw-
права пользователя-владельца
r--
права пользователей группы-владельца
r--
права всех остальных пользователей
Далее идёт имя пользователя-владельца и группы -владельца.
root
файл принадлежит пользователю root
root
файл принадлежит группе root
Исходя из этого, иерархия доступа на уровне пользователей разбивается следующим образом: права пользователя-владельца, права участников группы-владельца и права всех остальных.
Соответственно, для каждой категории указывается, какие операции с файлом ей доступны: чтение (r), запись (w) или выполнение (x) — для исполняемых файлов. Для директорий параметры те же, но обозначают немного другое: просмотр директории (r), создание папок / файлов (w) внутри директории, переход в директорию (x).
Каждый из этих уровней доступа можно выразить в восьмеричной системе с помощью числового значения: 4 (r), 2 (w), 1 (x). Вот так мы и получаем общую схему прав:
a — любые пользователи |
||||||||
u — права пользователя |
g — права группы |
o — права всех остальных |
||||||
r |
w |
x |
r |
w |
x |
r |
w |
x |
4 |
2 |
1 |
4 |
2 |
1 |
4 |
2 |
1 |
Для отображения уровня прав помимо формата rwxrwxrwx
используется упомянутый восьмеричный формат. Для этого достаточно сложить все уровни прав по категориям:
rwxrwxrwx = (4+2+1), (4+2+1), (4+2+1) = 777
Теперь можно перейти к инструментам, которые позволяют управлять правами на файлы и директории.
- Смена владельца файла или директории
- Смена прав доступа к файлу или директории
- Изменение атрибутов файлов
Смена владельца файла или директории
Для смены владельца доступны два инструмента. Первый — chown
, позволяет изменить пользователя и группу файла или папки:
chown [новый пользователь]:[новая группа] [файл или папка]
Если не указывать группу, изменится только пользователь-владелец. Если не указывать пользователя (:[новая группа]
), изменится только группа-владелец.
При изменении прав на директории можно использовать параметр -R
. Он рекурсивно изменит владельца всех вложенных директорий и файлов. Представим, что нам нужно предоставить права на папку new-user
для одноимённого пользователя и его группы. Команда для этого будет выглядеть так:
chown -R new-user:new-group /home/users/new-user
Второй инструмент — chgrp
. В отличие от первого, меняет только группу-владельца:
chgrp [группа] [файл или папка]
Как и chown, может работать рекурсивно с помощью ключа -R
.
Смена владельца файла или директории
Для работы непосредственно с правами используется команда chmod
:
chmod [настройки прав] [файл или папка]
При работе с директориями опция -R
позволит изменить права на все вложенные файлы и папки.
Настройки прав в chmod
можно определять двумя способами:
-
Указав категорию (
u
— пользователь-владелец,g
— группа-владелец,o
— другие пользователи,a
— все пользователи), модификатор (+
,-
,=
) и, соответственно, нужные права (r
,w
,x
).Например, представим, что у нас есть файл
example.txt
с максимальным уровнем прав для всех категорий пользователей:Допустим, мы не хотим, чтобы кто-то в принципе мог запускать этот файл на выполнение. В таком случае нам нужно убрать параметр
«x»
из прав всех категорий пользователей сразу. Это можно сделать так:chmod a-x example.txt
Представим, что потом мы решили вернуть владельцу права на запуск файла. То есть нам нужно добавить параметр
«x»
в категорию пользователя-владельца:chmod u+x example.txt
Если вдруг мы захотим изменить весь набор параметров для отдельной категории разом, это будет выглядеть следующим образом:
chmod u=rwx example.txt
-
Указав права в виде числового значения. Возможно, это не так прозрачно, но зато быстрее. В качестве параметра нам нужно передать это самое цифровое выражение уровня прав:
chmod 777 example.txt
В примере мы назначили максимальный уровень доступа всем категориям пользователей.
Соответственно, для изменения уровня прав отдельной категории пользователей нужно изменить только это числовое значение. Например, запретим исполнение файла для всех пользователей:
chmod 666 example.txt
А потом вернём, но только пользователю-владельцу:
chmod 766 example.txt
Бывает, что нам нужно изменить права только на все папки или только на все файлы в определённой директории. Часто с этим можно столкнуться при настройке прав на файлы сайтов. Вот вам пара однострочников на этот случай:
-
Смена прав на
755
для всех папок внутри/var/www/sites/example.com
:find /var/www/sites/example.com/ -type d -exec chmod 755 {} \;
-
Смена прав на
644
для всех файлов внутри/var/www/sites/example.com
:find /var/www/sites/example.com/ -type f -exec chmod 644 {} \;
Изменение атрибутов файлов
Помимо прав доступа и владельца каждый файл может иметь ряд атрибутов, определяемых на уровне файловой системы. Атрибуты показывают, какие операции могут или не могут проводиться с файлом в принципе, независимо от того, кто им владеет.
Посмотреть атрибуты файлов в текущей директории можно с помощью команды lsattr
.
Если запустить её без аргументов, она выведет атрибуты всех файлов в
текущей директории. Если указать путь к файлу или папке, она перечислит
свойства указанного файла или списка файлов в указанной папке
соответственно:
lsattr example.txt
Первые 20 символов в строке предназначены для отображения атрибутов файла.
Список атрибутов может отличаться в зависимости от файловой системы. Вот список основных:
|
«godmode» — файл становится неуязвим для любых изменений. Его нельзя удалить, переименовать, изменить содержимое, создать символьную ссылку на него. |
|
в файл с таким атрибутом можно только добавлять новые данные.
Старое содержимое изменить или удалить не получится. Это пригодится для
защиты от вредоносных вставок или замен в файлах, куда постоянно
записываются данные — например, в логах. Доступ к изменению старого
содержимого по умолчанию есть только у суперпользователя |
|
активирует безвозвратное удаление файла. В том смысле, что после удаления файл нельзя будет восстановить с носителя — при удалении все использовавшиеся для хранения файла блоки на диске перезаписываются нулями. |
|
активирует «обратимое» удаление файлов. Это значит, что при удалении файла с этим атрибутом его содержимое можно восстановить. |
|
сжатый файл. Все данные, записываемые в файл, автоматически сжимаются, а данные, извлекаемые из файла — возвращаются в исходное состояние. |
|
настраивает для файла исключение при использовании утилиты |
|
показывает, что файл в качестве указателей использует экстенты. |
|
в журналируемых файловых системах ( |
|
указывает, что при работе с файлом система не будет обновлять информацию о времени доступа к нему. |
|
атрибут для директорий. Указывает, что все изменения в папке синхронно записываются на диск, минуя кэш. |
|
указывает, что все изменения в файле с этим атрибутом записываются синхронно на диск, минуя кэш. |
Изменить атрибуты файла позволяет команда chattr
:
chattr [модификатор][изменяемые атрибуты] [целевой файл или папка]
То есть, если нам нужно защитить какой-то важный файл от посягательств, можно использовать такую команду:
chattr +i example.txt
Проверяем — посягательства не работают.
Если же нам нужно вернуть файл в нормальное состояние, нужно выполнить обратную операцию:
chattr -i example.txt
Для просмотра более подробной информации о файловых атрибутах, их ограничениях и правилах применения используйте команду:
man chattr