Команда chmod (change mode) используется в Linux для изменения прав доступа к файлам и каталогам. Она, являясь стандартной, присутствует во всех дистрибутивах Linux.
В связи с тем, что в Linux существуют лишь 3 вида прав (чтение, запись, исполнение), 3 категории пользователей (владелец файла, группа файла, остальные пользователи), а всё, в том числе и устройства, считаются файлами, то команда применима ко всему.
Содержание
Синтаксис
$ chmod [ПАРАМЕТР]... РЕЖИМ[,РЕЖИМ]… ФАЙЛ
Опции
- -c
- как
-v
, но выводить только при выполнении изменений - -f
- не выводить большинство сообщений об ошибках
- -v
- выводить диагностические сообщения по каждому файлу
- -R
- рекурсивно изменять файлы и каталоги
Форматы записи прав доступа
Символьный формат
Типы прав:
- r
- чтение (read)
- w
- запись (write)
- x
- выполнение (execute)
Права могут быть предоставлены следующим категориям пользователей:
- u
- владелец файла
- g
- группа файла
- o
- остальные пользователи
Операторы, определяющие операцию для команды chmod
:
- +
- добавить определённые права
- -
- удалить определённые права
- =
- установить определённые права
Владельца и группу файла в дальнейшем можно поменять с помощью команд chown
и chgrp
.
Разрешение на чтение позволяет пользователю читать содержимое файлов, а в случае каталогов — просматривать перечень имен файлов в каталоге (используя, например, команду ls
).
Разрешение на запись позволяет пользователю писать в файл и изменять его. Для каталогов это дает право создавать в каталоге новые файлы и каталоги, или удалять файлы в этом каталоге.
Разрешение на выполнение позволяет пользователю выполнять файлы (как бинарные программы, так и командные файлы). Разрешение на выполнение применительно к каталогам означает возможность выполнять команды, например, cd
.
Пример установки прав доступа
Рассмотрим пример, иллюстрирующий права доступа к файлам Linux. Для того, чтобы команда ls -l
не выводила на экран длинный листинг, зададим ей в качестве дополнительного параметра имя конкретного файла:
$ ls -l /etc/wvdial.conf
-rw-rw-r-- 1 root dialout 377 May 15 16:20 /etc/wvdial.conf
Третье поле в примере указывает на владельца файла (root
), четвёртое поле указывает на группу, которая владеет этим файлом (dialout
), последнее поле — имя файла (file
).
Первое поле в представленном примере определяет тип файла и права доступа к нему. Это поле представлено цепочкой символов -rw-rw-r--
, которые условно можно разделить на 4 группы.
Первая группа, состоящая из единственного символа, определяет тип файла. Этот символ может принимать следующие значения:
- -
- обычный файл
- d
- каталог
- b
- файл блочного устройства
- c
- файл символьного устройства
- s
- доменное гнездо (socket)
- p
- именованный канал (pipe)
- l
- символическая ссылка (link)
Далее следуют 3 группы по 3 символа, определяющие права доступа к файлу соответственно для владельца файла, для группы пользователей, и для всех остальных пользователей системы. Замена любого из этих символов прочерком будет означать, что пользователь лишается соответствующего права.
В нашем примере права доступа для владельца определены как rw-
, что означает, что владелец (root
) имеет право читать файл (r
), производить запись в этот файл (w
), но он не имеет права на выполнение, так как символ (x
) заменен прочерком (-
).
Из этого же примера следует, что аналогичные права имеют члены группы dialout
, остальные пользователи имеют право лишь на чтение файла (r--
).
Исполняемый файл в Linux может и не иметь никакого расширения, так как все определяется установкой атрибута исполняемый, причем право на исполнение может быть предоставлено не всем.
Права доступа к каталогу
Предоставление прав доступа к файлу также зависит от прав доступа к каталогу, в котором находится файл. Например, если пользователь oleg
хочет ограничить доступ ко всем своим файлам, он может установить права доступа к своему домашнему каталогу /home/oleg
как drwx------
, а не устанавливать отдельные права доступа к каждому его файлу и подкаталогу.
Примеры применения команды chmod
# chmod a+r filename
Даёт всем пользователям право на чтение файла.
# chmod +x filename
Аналогично предыдущему примеру. Если никакие из набора символов a
, u
, g
или o
не указаны, то это эквивалентно указанию символа a
.
# chmod og-x filename
Лишает всех пользователей, кроме собственника, права на исполнение файла.
# chmod u+rwx filename
Разрешает собственнику читать, изменять и исполнять файл.
# chmod o-rwx filename
Запрещает читать, записывать и исполнять файл всем пользователям, кроме собственника файла и пользователей из группы.
Числовой формат
При записи первая обозначает права владельца, вторая – группы, третья – остальных.
Кодируем символ r
цифрой 4, символ w
— 2, символ x
— 1.
Для предоставления пользователям какой-либо набора прав, надо сложить соответствующие цифры. Получив, таким образом, нужные цифровые значения для владельца файла, для группы файла и для всех остальных пользователей, задаем эти три цифры в качестве аргумента команды chmod
(ставим эти цифры после имени команды перед вторым аргументом, который задает имя файла).
Например, если надо дать все права владельцу (4+2+1=7), право на чтение и запись — группе (4+2=6), и не давать никаких прав остальным, то следует дать такую команду:
# chmod 760 filename
Заключение
Команда chmod
в Linux чрезвычайно важна, так как от правильной установки прав на каталоги и файлы завить безопасность вашего ресурса. Знать все её нюансы крайне важно, ибо ошибки могут привести к серьёзным последствиям.