Chmod параметры. Команды Linux: CHMOD. Расшифровка "символьной формы" прав доступа на каталоги и файлы в Linux

Команда chmod (change mode – сменить режим) предназначена для изменения прав доступа к файлам и каталогам в Unix-подобных операционных системах.

Синтаксис команды выглядит следующим образом:

chmod [ключи] установка_прав имя_файла

Ключи необязательны. Устанавливать права можно двумя способами: с помощью буквенного обозначения прав (rwx) и с помощью числового в восьмеричной системе счисления.

Изменение прав с помощью символьной нотации

При установке прав с помощью символов в первом аргументе (установка_прав) программы chmod используются три группы символов.

В первой группе указывается, кому будет предоставляться или запрещаться доступ: владельцу (u), группе (g), остальным (o) или всем (a). Можно указать как одну, так сразу несколько категорий.

Вторая группа обозначает запрещение, разрешение или назначение права и всегда состоит из одного символа: -, + или =.

В третьей группе перечисляется изменяемые права: чтение (r), запись (w), исполнение (x). Можно указывать сразу несколько прав.

На скрине в первом примере группе добавляется право на запись, что выражается как g+w. Во втором примере группе и остальным назначается право r--. В третьем случае остальным запрещается читать файл. Отметим, что один и тот же результат можно получить разными способами: как через назначение, так добавлением или удалением права.

Если требуется назначить разным группам пользователей разные права, то такое возможно путем перечисления выражений установка_прав через запятую. При этом пробелы перед и после запятой не ставятся. Также можно перечислить несколько файлов, которым устанавливаются права или задать шаблон. Пример:

chmod o-r,a-w month.txt text.txt

Установка прав с помощью чисел

Способ использования команды chmod, когда предоставляемые права выражаются одной восьмеричной цифрой для каждой категории пользователей, несколько проще с точки зрения записи. Однако надо помнить, что обозначают цифры:

7 – разрешены чтение, запись, исполнение
6 – разрешены чтение и запись
5 – разрешены чтение и исполнение
4 – разрешено только чтение
0 – ничего не разрешено

В первом аргументе chmod указываются три цифры: первая обозначает права владельца, вторая – группы, третья – остальных.

В первом примере файлу назначаются права на чтение и запись для владельца, а для группы и остальных – только на чтение. Во втором примере всем даются права на чтение и запись.

Установка прав для каталогов

В случае каталогов права на чтение, запись и исполнение имеют особый смысл, о чем было сказано . Кроме того, часто требуется рекурсивно назначить права для вложенных в каталог объектов. Для этого используется ключ -R.

В примере мы устанавливаем для каталога и вложенных в него объектов права 754. По отношению к каталогам это означает, что владелец может делать все, группа – просматривать содержимое каталога, остальные – только узнавать список объектов каталога. Обратите внимание на использование ключа -d команды ls. Он позволяет получить сведения о самом каталоге, а не его содержимом.

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

В примере команда chmod применяется в числовой нотации. При этом используется дополнительная цифра 1, которая обозначает установку t-бита. В буквенной нотации достаточно просто написать +t без указания категории пользователей. В выдаче команды ls мы видим символ t вместо икса в тройке прав всех остальных. Это не значит, что бит t заменяет бит x. Это особенность вывода информации. Буква t говорит, что право на исполнение есть. Если бы его не было, использовалась бы заглавная буква.

НАЗВАНИЕ
chmod - изменение режима доступа к файлам

СИНТАКСИС

Chmod режим файл...

ОПИСАНИЕ
Права доступа к указанным файлам (среди которых могут быть каталоги) изменяются в соответствии с указанным режимом. Режим может быть задан в абсолютном или символьном виде.

Абсолютный вид - восьмеричное число, являющееся поразрядным ИЛИ следующих режимов: 04000 При выполнении переустановить действующий идентификатор пользователя. 020#0 При выполнении переустановить действующий идентификатор группы, если # есть 7, 5, 3 или 1; учитывать блокировку доступа, если # есть 6, 4, 2 или 0. 01000 Бит навязчивости [см. man chmod(2)]. 00400 Доступен для чтения владельцем. 00200 Доступен для записи владельцем. 00100 Доступен для выполнения (в случае каталога - для просмотра) владельцем. 00040 Доступен для чтения членами группы. 00020 Доступен для записи членами группы. 00010 Доступен для выполнения (просмотра) членами группы. 00004 Доступен для чтения прочими пользователями. 00002 Доступен для записи прочими пользователями. 00001 Доступен для выполнения (просмотра) прочими пользователями.

Использование символьного вида основано на однобуквенных обозначениях, которые определяют класс доступа и права доступа для членов данного класса. Права доступа к файлу зависят от идентификатора пользователя и идентификатора группы, в которую он входит. Режим в целом описывается в терминах трех последовательностей, по три буквы в каждой:

Владелец Группа Прочие (u) (g) (o) rwx rwx rwx

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

Для задания режима доступа в символьном виде используется следующий синтаксис:

[кому] операция права

Часть [кому] есть комбинация букв u, g и o (владелец, члены группы и прочие пользователи соответственно). Если часть кому опущена или указано a, то это эквивалентно ugo.

Операция может быть: + (добавить право), - (лишить права), = (в пределах данного класса присвоить права абсолютно, то есть добавить указанные права и отнять неуказанные).

Права - любая осмысленная комбинация следующих букв:

Опустить часть права можно только если операция есть = (для лишения всех прав).

Если надо сделать более одного указания об изменении прав, то при использовании символьного вида в правах не должно быть пробелов, а указания должны разделяться запятыми. Например, команда

Chmod u+w,go+x f1

добавит для владельца право писать в файл f1, а для членов группы и прочих пользователей - право выполнять файл. Права устанавливаются в указанном порядке. Право s можно добавлять только для пользователя и группы, право t - только для пользователя.

Учет блокировки доступа (l) к файлу и его частям означает возможность монопольного захвата сегментов файла на время их обработки. Нельзя, однако, разрешить выполнение файла для членов группы и одновременно учитывать блокировку файла. Нельзя также разрешить переустановить при выполнении действующий идентификатор группы и учитывать блокировку файла. Таким образом, следующие команды являются некорректными:

Chmod g+x,+l f2 chmod g+s,+l f3 Попытка их выполнения вызовет соответствующую диагностику.

Изменить режим доступа к файлу может только его владелец или суперпользователь. Бит навязчивости может установить только суперпользователь. Чтобы добавить право переустановки идентификатора группы, надо быть членом этой группы; кроме того, для членов группы должно быть установлено право выполнения.

Для просмотра прав доступа и контроля при их изменении используется команда с флагом -l. Права переустановки идентификаторов пользователя и группы отмечаются буквой s на месте соответствующей буквы x: малой s, если соответствующая категория пользователей имеет право x, и большой S - если не имеет; право t отмечается на месте последней буквы x: малой t, если прочие пользователи имеют право выполнять файл, и большой T - если не имеют. Право l отмечается на месте права x для членов группы.

ПРИМЕРЫ

  1. Чтобы установить права, позволяющие владельцу читать и писать в файл, а членам группы и прочим пользователям только читать, надо сложить 0400, 0200, 0040 и 0004. Таким образом, команду можно записать двумя способами: chmod 644 f1 chmod u=rw,go=r f1
  2. Позволить всем выполнять файл f2: chmod +x f2
  3. Учитывать блокировку доступа к файлу f3: chmod +l f3
  4. Дать всем права на чтение запись и выполнение, а также на переустановку идентификатора группы при выполнении файла f4: chmod =rwx,g+s f4 chmod 2777 f4

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

Для начала следует разобраться с основными понятиями такими как: кто такой владелец файла в Linux, каким образом к файлу получают доступ другие пользователи, а не только сам владелец и т.д.
В Unix-подобных системах приложение запускается с правами пользователя, вызвавшего указанное приложение. Это обеспечивает дополнительную безопасность, так как процесс с правами пользователя не сможет получить доступ на запись к важным системным файлам, например / etc/ passwd , который принадлежит суперпользователю root . Звучит просто, но существует некоторые особенности, которые нужно обязательно знать и учитывать.

Владелец, Группа и Все остальные

Владелец

Владелец файла или директории в Linux – это пользователь, который их создал. Командой chown можно поменять владельца для файла или директории.

Права на чтение, запись и исполнение устанавливаются с помощью числовых кодов 0400, 0200 и 0100 соответственно. Их можно комбинировать. Например, код 0700 позволяет читать, записывать и изменять файлы владельцем.

Группа

Группа — это несколько пользователей Linux, которые могут использовать (при достаточных правах доступа) файлы и папке на уровне с их владельцем. Изменить группу пользователей ассоциированных с файлом или директорией можно командой chgrp .

Права на чтение, запись и исполнение устанавливаются с помощью числовых кодов 0040, 0020 и 0010 соответственно. Их можно комбинировать. Например, код 0070 позволяет читать, записывать и изменять файлы ассоциированной с файлом группой пользователей.

Все остальные

Это собирательное название для тех, кто не является владельцем файла или не относится к группе пользователей, которая может работать с этим файлом или директорией. Хорошая аналогия – это «весь мир», «каждый» или «любой».

Права на чтение, запись и исполнение устанавливаются с помощью числовых кодов 0004, 0002 и 0001 соответственно. Их можно комбинировать. Например, код 0007 позволяет читать, записывать и изменять файлы любому желающему.

Права на чтение, запись и выполнение

Чтение

Позволяет файлу быть прочитанным определенной группой пользователей.
Определяется как «r» в выводе команды ls

Запись

Позволяет изменять файлы или директории.
Определяется как «w» в выводе команды ls

Выполнение

Позволяет запускать бинарные файлы. Кроме этого, проверяет является ли папка доступной для поиска. Например, если у директории выставлены права 0600, то Вы не сможете воспользоваться командой cd , чтобы войти в эту папку или просмотреть ее содержимое командой ls
Определяется как «x» в выводе команды ls

Ну а теперь можно переходить к практике.

Определение и контроль прав доступа в Linux командой ls

С помощью команды ls можно узнать какие права доступа выставлены на файлы в данной или указанной директории:

gruyere@ meltingpot / test_perms $ ls -l
total 0
-rw-r--r-- 1 gruyere staff 0 27 Feb 19 :43 bar
drwxr-xr-x 2 gruyere staff 68 27 Feb 19 :45 baz
-rw-r--r-- 1 gruyere staff 0 27 Feb 19 :43 foo

Как видно из примера выше, команда ls показывает символьный код прав доступа на файлы и директории. В 3 и 4-ой колонке также указывается, кто является владельцем этих файлов или директорий и к какой группе пользователей они принадлежат.

chmod

chmod (ch ange mod e) – это широко используемая команда для изменения прав доступа к файлам и папкам в Linux. Она позволяет устанавливать права на доступ как пользователю, так и группе пользователей и для всех остальных.

Кроме этого, серверные язык программирования (вроде php или Python) предоставляют некую копию этой команды в том смысле, что у них схожа нотация установки прав.

Абсолютная и символьная нотация

chmod поддерживает 2 типа синтаксиса для изменения прав доступа:

  • Абсолютная нотация – восьмеричное число, указывающее на то, какие биты доступа активировать(ны), например 0777
  • Символьная нотация – сочетание букв и цифр устанавливающих бит доступа.

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

Символьная нотация используется для добавления или удаления уже определенных прав. Существуют специальные сайты для перевода абсолютной нотации в символьную и наоборот, они позволяют лучше понять как работают все эти права доступа и команда chmod . Вот один из них.

Каждый файл или папка в Linux имеют свои права доступа.

Есть 3 типа прав:
чтение(r),запись(w),выполнение(x)

Права определяются для 3-х типов пользователей:
владельца(u), группы(g), всех других (o)

Итак права каждого файла, это 9 бит информации (3 типа прав * 3 типа пользователей), соответственно каждый бит может быть установлен (=1) доступ разрешен, или сброшен(=0) доступ запрещен.

При назначении прав принято использовать восьмеричную(octal) систему счисления.

Текстовое представление прав(10 символов):
- rwxr- - r - -
0123456789

Символ в позиции 0:
"-" - обычный файл, "d" - папка, "l" - ссылка

Символы в позиции 1-3:
"rwx" - права владельца

Символы в позиции 4-6:
"r - -" - права для группы

Символы в позиции 7-9:
"r - -" - права для всех остальных

Таблица для определения прав:

Как видно из таблицы, права легко вычисляются
простым суммированием. 1=выполнение, 2=запись, 4=чтение.
например требуется выполнение(1) и чтение(4), получаем 1+4=5

Пример 644:
- владелец(u) чтение и запись
- группа(g) только чтение
- другие(o) только чтение

Пример 755:
- владелец(u) все права
- группа(g) чтение и выполнение
- другие(o) чтение и выполнение

В языках программирования например таких как C,
к правам добавляют 0 в начале каждого числа, что означает, что число восьмеричное, т.е. пишут 0644 вместо 644. При изменении прав с коммандной строки как правило этого не требуется.

Четырехзначное представление прав(4755), дополнительные права
биты SUID, SGID, sticky:

  • SUID или setuid: изменить "User ID" во время выполнения
  • SGID или setgid: изменить "Group ID" во время выполнения
  • sticky бит: запрещает удаление для всех пользователей кроме владельца. Ранее бит означал "держаться" в памяти после завершения процесса
Таблица. Числовое представление дополнительных прав:

Текстовое представление дополнительных бит:
дополнительные биты обозначаются следующими символами:
"S","s" - SUID, SGID
"T","t" - sticky бит
позиция этих бит, совпадает с позициями (3,6,9) прав выполнения "x"
впри этом, если прав на выполнение нет используется "верхний регистр" т.е. большие символы. Если права на выполнение установлены используются "нижний регистр" т.е. маленькие символы.

примеры:

Установлен SUID:
- r w s - - - - - - установлены биты SUID и выполнение для владельца
- r - S - - - - - - установлен бит SUID, не установлен бит выполнения

Установлен SGID:
- r w x r w s - - - установлены биты SGID и выполнение для группы
- r w x r - S - - - установлен бит SGID, не уст. выполнение для группы

Установлен sticky бит:
- r w x r w x r w t установлены биты sticky и выполнение для других
- r w x r w x r - T установлен sticky бит, но не уст. выполнение для других

отличия действия прав, при установке на файлы и папки:

права файлы папки
чтение чтение содержимого получение списка файлов
запись запись содержимого изменение списка файлов
(создание,удаление,переименование)
выполнение файл можно выполнить пользователь или процесс, может сделать папку "текущей/рабочей"
SUID Установить "User ID" при выполнении Перекрыть идентификатор пользователя при создании файла/папки (использовать идентификатор владельца корневой папки)
SGID Установить "Group ID" при выполнении Перекрыть идентификатор группы при создании файла/папки (использовать идентификатор группы корневой папки)
sticky запретить удаление всем, кроме владельца

команда изменеия прав chmod:
chmod [-R] права файл/папка

"-R" применить права рекурсивно ко всем файлам и подпапкам

Примеры:
chmod -R 755 folder/
chmod 644 file
и т.д.

Есть возможность менять права не целиком, а лишь добавлять или отменять права только определенным группам пользователей
используя символы вместо восьмеричных чисел.
"u" - пользователь/владелец
"g" - группа пользователей
"o" - остальные пользователи
"a" - все группы пользователей

Формат прав [[+-=], ...

Примеры:
chmod -R a+x folder/ выполнение для всех групп рекурсивно
chmod a+rx file чтение и выполнение для всех
chmod u+rx,g-rx file добавить чтение и выполнение для владельца, и
отозвать права для группы
chmod a+r,o= file добавить чтение для всех типов групп и отозвать
все права у всех других пользователей

команда изменения владельца chown:

Chown [-R] владелец:группа файл/папка

Примеры:
chown -R 0:0 folder/ установить владельца/группу = root рекурсивно
chown myuser:mygroup file установить myuser/mygroup для файла

Изменить права доступа к файлу

Синтаксис:

chmod [-fv] [-R [-H | -L | -P]] mode file ... chmod [-fv] [-R [-H | -L | -P]] [-a | +a | =a] ACE file ... chmod [-fhv] [-R [-H | -L | -P]] [ACL_Option ] file ...

Параметры:

-R Рекурсия. Используется для папок. Меняет права не только для указанного объекта, но для всех вложенных в него
-R -H Следовать за символьными ссылками в командной строке. По умолчанию символьные ссылки не обрабатываются
-R -L Все символьные ссылки будут обработаны
-R -P Дерево ссылок обрабатываться не будет. Параметр по умолчанию.
-v Многословный. Показывает все файлы, которые были изменены
-v -v очень многословный режим. Будет выведено старые и новые права в восьмеричном (числовой) и буквенном режиме отображения
-f не отображать диагностические сообщения в случае невозможности изменения прав доступа к файлу
ACL_Option (ACL - списки контроля доступа для групп пользователей) ACL_manipulation_options

Права доступа:

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

Управление с помощью цифрового указания прав доступа:

Для управления правами используется три бита

  • первый - право на чтение
  • второй -право на запись
  • третий -право на выполнение
Побитно Число Буквенный код описание права
000 0 нет прав
001 1 право только на исполнение
010 2 право только на запись
011 3 право на запись и исполнение
100 4 право только на чтение
101 5 право на чтение и исполнение
110 6 право на чтение и запись без исполнения
111 7 все права

Такие права на файл устанавливаются для трех видов доступа:

  • для владельца
  • для группы
  • для остальных

В итоге команда выглядит следующим образом:

$ chmod 444 file -право только на чтение для всех

$ chmod 755 file -владелец имеет все права (7), остальные пользователи только чтение и запуск (5)

$ chmod 066 file -владелец не имеет никаких прав на файл (0), все остальные право на чтение и запись без выполнения

Управление с помощью буквенного указания прав доступа:

Формат указания прав символьным кодом

[кто...][[+-=][права...]...][,...]

кто - это комбинация символов "ugoa" указывающая на пользователей чьи права на доступ к файлу или папке будут изменены

  • u пользователь собственник
  • g группа пользователей
  • o остальные пользователи
  • a (all) для всех, аналогично ugo