Права доступа и владельцы в 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 :
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 символа показывают разрешения для всех остальных пользователей. В этом примере у них есть только разрешение на выполнение.
Рассмотрим подробнее, что значат условные значения флагов прав:
Каждый пользователь может принадлежать к одной или нескольким группам. У пользователя одна группа является основной. Основная группа имеет следующее значение: создаваемый пользователем файл в качестве владельца будет иметь текущего пользователя, а в качестве группы получит главную группу текущего пользователя. Другого практического значения выделения главной группы нет — пользователь будет иметь доступ к ресурсам всех групп, в которые он входит.
Изменение прав доступа к файлам/папкам
Команда chmod имеет типичный для команд linux синтаксис:
Опций команды, которые нам понадобятся во время работы:
Короткий формат опции | Длинный формат | Описание |
---|---|---|
-c | — | Выводить информацию обо всех изменениях |
-f | — | Не выводить сообщения об ошибках |
-v | — | Выводить максимум информации |
— | —preserve-root | Не выполнять рекурсивные операции для корня «/» |
— | —reference | Взять маску прав из указанного файла |
-R | — | Включить поддержку рекурсии |
— | —version | Вывести версию утилиты |
Буквенное обозначение
Права доступа в linux бывают трех основных видов:
- r чтение
- w запись
- x выполнение
- s выполнение от имени суперпользователя (дополнительный)
Есть три категории пользователей, для которых можно установить права:
Математические операции означают следующее:
- + добавляет к текущим правам доступа новое разрешение
- — удаляет из текущих прав доступа определенное разрешение
- = устанавливает полностью новые разрешения, предыдущие перезаписываются новыми
В одной команде можно перечислять владельцев и их разрешения через запятую.
При буквенной записи первые три символа определяют права владельца, вторые три определяют права группы, третьи три права всех остальных пользователей:
В качестве действий могут использоваться знаки + включить или — отключить. Рассмотрим несколько примеров:
- 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 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 | — | Не переходить по символическим ссылкам на директории (по умолчанию) |