chmod (от англ. change mode) — команда для изменения прав доступа к файлам и каталогам, используемая в Unix-подобных операционных системах. Входит в стандарт POSIX, в Coreutils.
Синтаксис:
- chmod [options] mode[,mode] file1 [file2 ...]
Опции:
- -R рекурсивное изменение прав доступа для каталогов и их содержимого
- -f не выдавать сообщения об ошибке для файлов, чьи права не могут быть изменены.
- -v подробно описывать действие или отсутствие действия для каждого файла.
Команда никогда не изменяет права на символьные ссылки; однако для каждой символьной ссылки, заданной в командной строке, изменяет права доступа связанного с ней файла. Команда игнорирует символьные ссылки, встречающиеся во время рекурсивной обработки каталогов.
Аргумент команды chmod, задающий разрешения, может быть записан в двух форматах: в числовом и в символьном.
Числовой формат
Права записываются одной строкой сразу для трёх типов пользователей:
- владельца файла (u);
- других пользователей, входящих в группу владельца (g);
- всех прочих пользователей (o);
В числовом виде файлу или каталогу устанавливаются абсолютные права, в то же время в символьном виде можно установить отдельные права для разных типов пользователей.
Пример: в числовом виде, установить права rwxr-xr-x:
chmod 755 filename
Пример — значение права «755»
|
владелец |
группа |
остальные
|
восьмеричное значение |
7 |
5 |
5
|
символьная запись |
rwx |
r-x |
r-x
|
обозначение типа пользователя |
u |
g |
o
|
Таким образом, права «755» записываются в символьном виде как «rwxr-xr-x». При этом для понимания сути задания прав в Unix-системах полезно знать представление чисел в двоичной системе счисления.
Три варианта записи прав пользователя
двоичная |
восьмеричная |
символьная |
права на файл |
права на каталог
|
000 |
0 |
--- |
нет |
нет
|
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 для каталога не имеет смысла[1].
sticky bit или restricted deletion flag (t-бит) используется только с каталогами. Когда t-бит для каталога не установлен, файл в данном каталоге может удалить (переименовать) любой пользователь, имеющий доступ на запись к данному каталогу. Устанавливая t-бит на каталог, мы меняем это правило таким образом, что удалить (переименовать) файл может только владелец этого файла. Следуя приведённой выше кодировке, t-бит имеет вес 1000.
Примечание: Право на запись (w) даёт пользователю возможность записывать или изменять файл, а право на запись для каталога — возможность создавать новые файлы или удалять файлы из этого каталога. Если на каталоге стоит возможность записи (w), то файл внутри этого каталога можно будет удалить, даже если право на запись для него не установлено. (В соответствии с концепцией файловой системы POSIX).
Популярные значения
- 400 (-r--------)
- Владелец имеет право чтения; никто другой не имеет права выполнять никакие действия
- 440 (-r--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)
- Каждый пользователь может читать, редактировать и запускать на выполнение
- 2555 (-r-xr-sr-x)
- Каждый пользователь имеет право читать и запускать на выполнение с правами группы (user group) владельца файла
- 4555 (-r-sr-xr-x)
- Каждый пользователь имеет право читать и запускать на выполнение с правами владельца файла
Символьный формат
В символьном виде использование команды позволяет более гибко добавлять, устанавливать или убирать права на файлы или каталоги:
- $ chmod [references][operator][modes] file ...
References определяют пользователей, которым будут меняться права. References определяются одной или несколькими буквами:
Reference
|
Class
|
Описание
|
u
|
user
|
Владелец файла
|
g
|
group
|
Пользователи, входящие в группу владельца файла
|
o
|
others
|
Остальные пользователи
|
a
|
all
|
Все пользователи (или ugo)
|
Operator определяет операцию, которую будет выполнять chmod:
Operator
|
Описание
|
+
|
добавить определённые права
|
-
|
удалить определённые права
|
=
|
установить определённые права
|
Modes определяет, какие именно права будут установлены, добавлены или удалены:
Mode
|
Name
|
Описание
|
r
|
read
|
чтение файла или содержимого каталога
|
w
|
write
|
запись в файл или в каталог
|
x
|
execute
|
выполнение файла или чтение содержимого каталога
|
X
|
special execute
|
выполнение, если файл является каталогом или уже имеет право на выполнение для какого-нибудь пользователя
|
s
|
setuid/gid
|
установленные атрибуты SUID или SGID позволяют запускать файл на выполнение с правами владельца файла или группы соответственно
|
t
|
sticky
|
устанавливая t-бит на каталог, мы меняем это правило таким образом, что удалить файл может только владелец этого файла
|
Примеры
Установить права «rwxr-xr-x» (755) для файла:
- chmod u=rwx,g=rx,o=rx filename
Установить права на выполнение для владельца файла, удалить права на выполнение у группы, удалить права на запись и выполнение у остальных пользователей:
chmod u+x,g-x,o-wx filename
Установить правила на выполнение, если файл является каталогом или уже имеет право на выполнение для уже опредёленного пользователя
chmod +x filename
Установить рекурсивно права на чтение для всех пользователей:
- chmod -R a+r directory
Рекурсивно удалить атрибуты SUID и SGID:
- chmod -R u-s,g-s directory
Особенности
Значениями по умолчанию являются:
- для файлов: 644 (-rw-r--r--)
- для каталогов: 755 (drwxr-xr-x)
Значения разные для файлов и каталогов потому, что флаг «выполнения» по-разному действует на файлы и каталоги. Для исполняемых файлов «выполнение» означает их запуск, для каталогов — право читать файл (если есть на него право чтения) и его атрибуты файла при известном имени (без права на чтение, получить имя файлов в каталоге нельзя).
Следующая команда выполнит рекурсивное применение правил для всех файлов в каталоге «/home/test», а также для всех файлов во всех подкаталогах:
# find /home/test -type f -exec chmod 644 {} \;
Следующая команда выполнит рекурсивное применение правил для всех каталогов в каталоге «/home/test», а также для всех каталогов во всех подкаталогах:
# find /home/test -type d -exec chmod 755 {} \;
Того же результата можно добиться и без использования find (обратите внимание на заглавную X):
# chmod -R go=rX,u=rwX /home/test
Примечания
- ↑ Скотт Граннеман «Linux карманный справочник», Издательский дом «Вильямс», 2007
Ссылки
Команды Unix |
---|
|
|
---|
Файловые утилиты | |
---|
Текстовые утилиты | |
---|
Shell-утилиты | |
---|
другие утилиты | |
---|
|