Команда chmod в Linux

Опубликовано admin - пт, 05/13/2022 - 13:08

Команда chmod (change mode) используется в Linux для изменения прав доступа к файлам и каталогам. Она, являясь стандартной, присутствует во всех дистрибутивах Linux.

Команда chmod 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 чрезвычайно важна, так как от правильной установки прав на каталоги и файлы завить безопасность вашего ресурса. Знать все её нюансы крайне важно, ибо ошибки могут привести к серьёзным последствиям. 

Поделиться с друзьями