Команда chmod права доступа в Linux
В модели безопасности Unix, пользователь может владеть файлами и каталогами. Когда пользователь владеет файлом или каталогом, он контролирует доступ к нему.
Для всех файлов атрибуты означают:
- Разрешение на чтение содержимого файла, обозначается буквой
r
- Разрешение на редактирование и запись содержимого файла, обозначается буквой
w
- Разрешение на исполнение или запуск скрипта, обозначается буквой
x
Для папок атрибуты означают:
- Разрешение на чтение позволяет пользователю получить список содержимого папки, обозначается буквой
r
- Разрешение на запись позволяет пользователю создавать и удалять файлы в этой папке, обозначается буквой
w
- Разрешение на исполнение разрешает пройти сквозь папку, обозначается буквой
x
В свойствах каждого файла и директории разрешения устанавливаются отдельно для:
- Владельца файла, набор прав для владельца файла, пользователя, который его создал или сейчас установлен его владельцем. Обычно владелец имеет все права, чтение, запись и выполнение
- Группы владельцев файла, любая группа пользователей, существующая в системе и привязанная к файлу. Но это может быть только одна группа и обычно это группа владельца, хотя для файла можно назначить и другую группу
- Всех остальных, все пользователи, кроме владельца и пользователей, входящих в группу файла
Значения имеют не только права доступа к файлу, а также его владелец и группа.
Специальные права доступа к файлам в Linux
Для того, чтобы позволить обычным пользователям выполнять программы от имени суперпользователя без знания его пароля была придумана такая вещь, как SUID
и SGID
биты. Рассмотрим эти полномочия подробнее.
SUID
если этот бит установлен, то при выполнении программы,id
пользователя, от которого она запущена заменяется наid
владельца файла. Фактически, это позволяет обычным пользователям запускать программы от имени суперпользователяSGID
- этот флаг работает аналогичным образом, только разница в том, что пользователь считается членом группы, с которой связан файл. ЕслиSGID
флаг установлен на каталог, все файлы, созданные в нем, будут связаны с группой каталога, а не пользователя. Такое поведение используется для организации общих папокSticky-bit
этот бит тоже используется для создания общих папок. Если он установлен, то пользователи могут только создавать, читать и выполнять файлы, но не могут удалять файлы, принадлежащие другим пользователям
Числовой формат
SUID
имеет числовое значение4
SGID
имеет числовое значение2
sticky bit
имеет числовое значение1
Если хотите применить эти разрешения, вам нужно добавить четырехзначный аргумент в chmod
, первая цифра которого относится к специальным разрешениям. Добавим разрешение SGID
на каталог и установим rwx
для пользователя и rx
для группы и других:
chmod 2755 /somedir
Буквенное обозначение
SUID
имеет буквенное значениеu+s
SGID
имеет буквенное значениеg+s
sticky bit
имеет чбуквенное значение+t
В таблице обобщено все, что важно знать об управлении специальными разрешениями:
Права | Числовой формат | Буквенный режим | Применение к файлам | Применение к каталогам |
SUID | 4 | u+s | Пользователь выполняет файл разрешениями владельца файла | Нет смысла применять |
SGID | 2 | g+s | Пользователь выполняет файл с разрешениями владельца группы | Файлы, созданные в каталоге, получают одного и того же владельца группы |
sticky bit | 1 | +t | Нет смысла применять | Запрещает пользователям удалять файлы от других пользователей |
Команда ls посмотреть владельца и права доступа к файлам/папкам
Для максимально подробной информации обо всех флагах, в том числе специальных, нужно использовать команду ls
с параметром -l
:
ls -l файл
Пример вывода:
тип файла, если первый символ -, это обычный файл. Если первый символ d, это каталог
|cледующие 3 символа показывают разрешения для владельца
|| следующие 3 символа показывают разрешения для группы
|| | последние 3 символа показывают разрешения для всех остальных
|| | | владелец
|| | | | группа
|| | | | |
-rw-rw-r-- 1 vadik vadik 664 дек 13 14:19 index.html
Каждый пользователь может принадлежать к одной или нескольким группам. У пользователя одна группа является основной. Основная группа имеет следующее значение: создаваемый пользователем файл в качестве владельца будет иметь текущего пользователя, а в качестве группы получит главную группу текущего пользователя. Другого практического значения выделения главной группы нет — пользователь будет иметь доступ к ресурсам всех групп, в которые он входит.
Команда chmod изменение прав доступа к файлам/папкам
Команда chmod
имеет типичный для команд вид.
Синтаксис
chmod опции права файл
Опции
-c
выводить информацию обо всех изменениях-f
не выводить сообщения об ошибках-v
выводить максимум информации-R
включить поддержку рекурсии--preserve-root
не выполнять рекурсивные операции для корня "/"--reference
взять маску прав из указанного файла--version
вывести версию утилиты
Буквенное обозначение
Права доступа в linux бывают четырех основных видов:
r
чтениеw
записьx
выполнениеs
выполнение от имени суперпользователя, дляSUID
иSGID
Есть три категории пользователей, для которых можно установить права:
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
Примеры
Предоставим всем пользователям полный доступ к файлу:
chmod ugo+rwx test5
chmod 777 test5
Заберем все права у группы и остальных пользователей:
chmod go-rwx test5
chmod 700 test5
Дадим группе право на чтение и выполнение:
chmod g+rx test5
chmod 050 test5
Остальным пользователям только чтение:
chmod o+r test5
chmod 500 test5
Для файла установим SUID
:
chmod u+s test6
chmod 4755 test6
Для файла установим SGID
:
chmod g+s test7
chmod 2755 test7
Какие права следует выставлять
Обычно корректными правами для папок являются 755
, а для файлов 644
, возможны исключения о которых должен знать разработчик сайта. Также информацию по используемым атрибутам доступа можно найти в документации или на тематических форумах используемой CMS.