Права доступа и владельцы в Linux
Пользователи и группы пользователей в рамках системы могут быть описаны в локальных файлах /etc/passwd
и /etc/group
или объявлены на уровне сервера NIS, LDAP или домена Samba. Эти пользователи и группы пользователей могут владеть файлами. На самом деле каждым файлом владеет как пользователь, так и группа пользователей.
Владельцы, участники группы и все остальные
В модели безопасности Unix, пользователь может владеть файлами и каталогами. Когда пользователь владеет файлом или каталогом, он контролирует доступ к нему.
Для всех файлов атрибуты означают:
- Разрешение на чтение содержимого файла, обозначается буквой
r
от английскогоread
- Разрешение на редактирование и запись содержимого файла, обозначается буквой
w
от английскогоwrite
- Разрешение на исполнение или запуск скрипта, обозначается буквой
x
от английскогоeXecute
. На виртуальном хостинге право на исполнение применимо только к папкам и CGI-скриптам. Для обычных файлов (HTML-страницы, картинки, PHP скрипты и т.п.) право на исполнение не будет применяться
Для папок атрибуты означают:
- Разрешение на чтение позволяет пользователю получить список содержимого папки, обозначается буквой
r
от английскогоread
- Разрешение на запись позволяет пользователю создавать и удалять файлы в этой папке, обозначается буквой
w
от английскогоwrite
- Разрешение на исполнение разрешает пройти сквозь папку, обозначается буквой
x
от английскогоeXecute
В свойствах каждого файла и директории разрешения устанавливаются отдельно для:
- Владельца файла
- Группы владельцев файла, которой принадлежит этот файл
- Всех остальных
Каждый файл является собственностью одного владельца, а также группы. Для владельца файла можно установить право чтения, записи и выполнения файла. Для этого же файла для группы можно установить только право чтения. Для всех остальных можно установить полный запрет доступа.
Итак, имеют значения не только права доступа к файлу, а также его владелец и группа.
Посмотреть владельца и права доступа к файлам/папкам
Посмотреть права доступа к файлам в Linux проше с помощью графического редактора mc
.
Для максимально подробной информации обо всех флагах, в том числе специальных, нужно использовать команду ls
с параметром -l
:
ls -l файл
Пример вывода:
user@bash: ls -l /home/karpaff/linuxtutorialwork/chick.png
-rwxr----x 1 harry users 2.7K Jan 4 07:32 /home/karpaff/linuxtutorialwork/chick.png
user@bash:
Первое слово harry
говорит о том, что владельцем является пользователь harry
. Второе слово users
говорит о том, что файл относиться к группе users
. В приведенном выше примере первые 10 символов вывода показывают информацию по файлу:
- Первый символ определяет
тип
файла. Если первый символ-
, то это обычный файл. Если первый символd
, то это каталог. - Следующие 3 символа показывают разрешения для
владельца
. Буква означает наличие разрешения, а прочерк-
— его отсутствие. В нашем примере у владельца есть все разрешения (чтение, запись и выполнение). - Следующие 3 символа показывают разрешения для
группы
. В этом примере у членов группы есть разрешение на чтение, но нет разрешений на запись и выполнение. Обратите внимание, порядок записи разрешений всегда такой: чтение, запись, выполнение. - Последние 3 символа показывают разрешения для всех
остальных
пользователей. В этом примере у них есть только разрешение на выполнение.
Рассмотрим подробнее, что значат условные значения флагов прав:
Цифровая запись
|
Буквенная запись
|
Права
|
---|---|---|
0
|
---
|
Разрешения отсутствуют |
1
|
--x
|
Для файлов запуск скрипта Для папок пройти сквозь папку |
2
|
-w-
|
Для файлов разрешение на редактирование и запись Для папок позволяет создавать и удалять файлы |
3
|
-wx
|
Запуск + изменение |
4
|
r--
|
Для файлов разрешение на чтение содержимого Для папок позволяет получить список содержимого папки |
5
|
r-x
|
Чтение + запуск |
6
|
rw-
|
Чтение + изменение |
7
|
rwx
|
Чтение + изменение + запуск |
Каждый пользователь может принадлежать к одной или нескольким группам. У пользователя одна группа является основной. Основная группа имеет следующее значение: создаваемый пользователем файл в качестве владельца будет иметь текущего пользователя, а в качестве группы получит главную группу текущего пользователя. Другого практического значения выделения главной группы нет — пользователь будет иметь доступ к ресурсам всех групп, в которые он входит.
Изменение прав доступа к файлам/папкам
Команда chmod
имеет типичный для команд linux синтаксис:
chmod опции права файл
Опций команды, которые нам понадобятся во время работы:
Короткий формат опции
|
Длинный формат
|
Описание
|
---|---|---|
-c
|
-
|
Выводить информацию обо всех изменениях |
-f
|
-
|
Не выводить сообщения об ошибках |
-v
|
-
|
Выводить максимум информации |
-
|
--preserve-root
|
Не выполнять рекурсивные операции для корня "/" |
-
|
--reference
|
Взять маску прав из указанного файла |
-R
|
-
|
Включить поддержку рекурсии |
-
|
--version
|
Вывести версию утилиты |
Буквенное обозначение
Права доступа в linux бывают трех основных видов:
r
чтениеw
записьx
выполнениеs
выполнение от имени суперпользователя (дополнительный)
Есть три категории пользователей, для которых можно установить права:
u
владелец файлаg
группа файлаo
все остальные пользователи
Математические операции означают следующее:
+
добавляет к текущим правам доступа новое разрешение-
удаляет из текущих прав доступа определенное разрешение=
устанавливает полностью новые разрешения, предыдущие перезаписываются новыми
В одной команде можно перечислять владельцев и их разрешения через запятую.
При буквенной записи первые три символа определяют права владельца, вторые три определяют права группы, третьи три права всех остальных пользователей:
В качестве действий могут использоваться знаки +
включить или -
отключить. Рассмотрим несколько примеров:
u+x
разрешить выполнение для владельцаugo+x
разрешить выполнение для всехug+w
разрешить запись для владельца и группыo-x
запретить выполнение для остальных пользователейugo+rwx
разрешить все для всех
Числовой формат
0
никаких прав1
только выполнение2
только запись3
выполнение и запись4
только чтение5
чтение и выполнение6
чтение и запись7
чтение запись и выполнение
Если используется цифровая запись, первая цифра определяет права владельца, вторая права группы, третья права всех остальных пользователей:
Числовое обозначение | Буквенное обозначение | Описание |
---|---|---|
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
, к ней будет добавлен параметр –R
, который собственно и указывает на то, что необходимо сменить права не только самой директории, но и на вложенные папки и файлы. Меняем права на директорию /home/qwerty
, а так же на всё содержимое директории:
chmod -R 755 /home/qwerty
chmod -R u+rwx,go+rx /home/qwerty
Какие права следует выставлять
Обычно корректными правами для папок являются 755
, а для файлов 644
, возможны исключения о которых должен знать разработчик сайта. Также информацию по используемым атрибутам доступа можно найти в документации или на тематических форумах используемой CMS.
Изменение владельца для файла/папки
Синтаксис chown
, как и других подобных команд linux очень прост:
chown имя_пользователя опции файл
В поле пользователь надо указать пользователя, которому мы хотим передать файл. Также можно указать через двоеточие группу, например, пользователь:группа. Тогда изменится не только пользователь, но и группа:
chown имя_пользователя:группа опции файл
Основные опции которые могут понадобиться:
Короткий формат опции
|
Длинный формат
|
Описание
|
---|---|---|
-c
|
--changes
|
Подробный вывод всех выполняемых изменений |
-f
|
--silent, --quiet
|
Минимум информации, скрыть сообщения об ошибках |
-
|
--dereference
|
Изменять права для файла к которому ведет символическая ссылка вместо самой ссылки (поведение по умолчанию) |
-h
|
--no-dereference
|
Изменять права символических ссылок и не трогать файлы, к которым они ведут |
-
|
--from
|
Изменять пользователя только для тех файлов, владельцем которых является указанный пользователь и группа |
-R
|
--recursive
|
Рекурсивная обработка всех подкаталогов |
-H
|
-
|
Если передана символическая ссылка на директорию - перейти по ней |
-L
|
-
|
Переходить по всем символическим ссылкам на директории |
-P
|
-
|
Не переходить по символическим ссылкам на директории (по умолчанию) |