В 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
Права изменены. В таблице ниже приведены все возможные восемь комбинаций трехбитового кода.
Как говорилось выше, таким способом задаются явные права для каждой группы кодов. То есть при каждом назначении, вам обязательно надо указывать число для каждой тройки. В случае использования мнемонического, можно добавлять права "точечно". Для этого можно объединять множество исполнителей ( 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 и как сменить владельца файла, а так же группу. Поэтому не стесняемся - подписываемся. Вам просто кнопкой жамкнуть, а мне приятно. Обещаю в ленту сильно не спамить 😊.