Linux. Изменение прав доступа. Команда chmod.

383 прочитали
В Linux права доступа на чтение, запись и выполнение можно с легкостью менять. Правда стоит учитывать, что сделать это могут только либо суперюзер, либо владелец файла.

В Linux права доступа на чтение, запись и выполнение можно с легкостью менять. Правда стоит учитывать, что сделать это могут только либо суперюзер, либо владелец файла. Для смены прав доступа используется команда chmod. Вот о ней сегодня и поговорим.

Первым аргументом команды chmod является спецификация прав доступа. Тут существует два правила задания кода доступа. Первый - это в виде восьмеричного числа, второй - в виде мнемонического синтаксиса. В первом случае, задавать права можно только с помощью абсолютного значения, во втором случае можно сбрасывать отдельный бит режима.

После указания спецификации прав идет указание файла или файлов, к которым данные изменения необходимо применить.

Чтобы понять как задавать код доступа с помощью восьмеричного числа, давайте вспомним какие биты доступа есть. Это r,w и x - чтение, запись и выполнение соответственно. Теперь эти три символа представим в виде единиц и нулей, где 1 - доступ есть, 0- доступа нет. Тогда файл со следующими правами

rwxrw-r--

можно представить в следующем виде

111110100

Как мы уже знаем из статьи "Linux.Атрибуты файлов." это три группы по три символа, коды доступа для владельца, группы владельца и других пользователей. Рассмотрим поближе разрешение для других пользователей, получается 100. Если перевести это число из двоичной системы в восьмеричную, получим число 4. Соответственно для владельца это будет 7, а для группы 6. Если заменить теперь каждую тройку кодов доступа на полученное число, получим 764. Вот это и есть код доступа, которым можно задать вышеобозначенные права.

Рассмотрим на примере. Имеется следующий файл, с таким правами

$ls -l 1.tmp
-rw-r--r-- 1 user root 0 Jun 26 11:39 1.tmp

Можно увидеть следующие права rw- r-- r--. В восьмеричной записи это будет выглядеть, как 644. Давайте поменяем на 764.

$chmod 764 1.tmp
$ls -l 1.tmp
-rwxrw-r-- 1 user root 0 Jun 26 11:39 1.tmp

Права изменены. В таблице ниже приведены все возможные восемь комбинаций трехбитового кода.

В Linux права доступа на чтение, запись и выполнение можно с легкостью менять. Правда стоит учитывать, что сделать это могут только либо суперюзер, либо владелец файла.-2

Как говорилось выше, таким способом задаются явные права для каждой группы кодов. То есть при каждом назначении, вам обязательно надо указывать число для каждой тройки. В случае использования мнемонического, можно добавлять права "точечно". Для этого можно объединять множество исполнителей ( u-владелец, g - группа, o - остальные, a - распространяется на всех) с оператором ( + - добавить, - - удалить, = - присвоить) и набором прав доступа. Давайте рассмотрим пример с файлом и добавим остальным пользователям право на запись.

$chmod o+w 1.tmp
$ls -l 1.tmp
-rwxrw-rw- 1 user root 0 Jun 26 11:39 1.tmp

Так же можно убрать права на исполнение владельцу файла.

$chmod u-x 1.tmp
$ls -l 1.tmp
-rw-rw-rw- 1 user root 0 Jun 26 11:39 1.tmp

Теперь добавим право на исполнение всем

$chmod a+x 1.tmp
$ls -l 1.tmp
-rwxrwxrwx 1 user root 0 Jun 26 11:39 1.tmp

И уберем право на запись для групп и остальных пользователей

$chmod go-w 1.tmp
$ls l 1.tmp
-rwxr-xr-x 1 user root 0 Jun 26 11:39 1.tmp

Ну, я думаю, вы поняли как это работает.

Еще можно к команде chmod добавить опцию -R, тогда права будут рекурсивно назначены всем файлам указанного каталога. Бывает очень удобно применять команду именно с этой опцией. Так же можно заимствовать права у уже существующего файла с помощью опции --reference. Например,

$chmod --reference=1.tmp 2.tmp

назначит права для 2.tmp такие же как и для 1.tmp.

Заключение

В этой статье узнали как менять права доступа для разных пользователей. Приведенными выше примерами, работа команды chmod не ограничивается. Для полного описания команды можно обратиться к man-странице команды.

Далее познакомимся какие еще дополнительные флаги есть в системе Linux и как сменить владельца файла, а так же группу. Поэтому не стесняемся - подписываемся. Вам просто кнопкой жамкнуть, а мне приятно. Обещаю в ленту сильно не спамить 😊.