Unix/chmod

Материал из Энциклопедия о программировании
Перейти к: навигация, поиск

chmod (от англ. change mode - изменить режим) — консольная программа для изменения прав доступа к файлам и директориям.

Название происходит от одноимённой программы ОС Unix chmod, которая, собственно, изменяет права доступа к файлам, директориям и символическим ссылкам.

Использование

Права записываются одной строкой сразу для трёх типов пользователей:

  • владельца файла;
  • других пользователей, входящих в группу владельца;
  • всех прочих пользователей.

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

Пример — значение права «755»
владелец группа остальные
восьмеричное значение 7 5 5
символьная запись rwx r-x r-x
обозначение типа пользователя u g o

Обозначения типов пользователей

  • u - user (пользователь)
  • g - group (группа)
  • o - other (другие)

Таким образом, права «755» записываются в символьном виде как «rwxr-xr-xr». При этом для понимания сути задания прав в Unix-системах полезно знать представление чисел в двоичной системе счисления.

Три варианта записи прав пользователя
двоичная восьмеричная символьная права на файл права на директорию
000 0 --- нет нет
001 1 --x выполнение чтение файлов и их свойств
010 2 -w- запись нет
011 3 -wx запись и выполнение всё, кроме чтения списка файлов
100 4 r-- чтение чтение имён файлов
101 5 r-x чтение и выполнение доступ на чтение
110 6 rw- чтение и запись чтение имён файлов
111 7 rwx все права все права

Часть разрешений имеет смысл только в сочетании с другими. Из первых четырёх пунктов (не дающих права на чтение файла) для файлов обычно используется только «---», то есть полный запрет доступа к файлу данному типу пользователей. Для директорий из всего списка обычно применяются только 0, 5 и 7 — запрет, чтение и полный доступ.

Суммировав эти коды для трёх типов пользователей, можно получить числовую или символьную запись. Например, chmod 444 {имяфайла}: 400+40+4=444 — все имеют право только на чтение (идентично «r--r--r--»).

Помимо стандартных разрешений 'rwx', команда chmod осуществляет также управление битами SGID, SUID и T. Установленные атрибуты SUID или SGID позволяют запускать файл на выполнение с правами владельца файла или группы соответственно.

Для SUID вес — 4000, а для SGID — 2000. Данные атрибуты имеют смысл при установленном соответствующем бите исполнения и обозначаются при символьной записи буквой «s»: «rwsrwxrwx» и «rwxrwsrwx» соответственно.

Пример: chmod 4555 {имяфайла} — все имеют право на чтение и выполнение, но запускаться файл на исполнение будет с правами владельца.

Установка SGID для директории приведёт к установке принадлежности каждого нового создаваемого файла к той же группе, к которой принадлежит сама директория, а не к основной группе владельца, как это происходит по умолчанию. SUID для директории не имеет смысла[1].

t-бит используется только с директориями. Когда t-бит для директории не установлен, файл в данной директории может удалить любой пользователь, имеющий доступ на запись к данному файлу. Устанавливая t-бит на директорию, мы меняем это правило таким образом, что удалить файл может только владелец этого файла. Следуя приведённой выше кодировке, t-бит имеет вес 1000.

Примечание: Право на запись (w) даёт пользователю возможность записывать или изменять файл, а право на запись для каталога — возможность создавать новые файлы или удалять файлы из этого каталога. Если на каталоге стоит возможность записи (w), то файл внутри этого каталога можно будет удалить, даже если право на запись для него не установлено. (В соответствии с концепцией файловой системы POSIX).

Расшифровки букв прав доступа

  • r — read (читать, читать название)
  • w — write (писать, изменять название)
  • x — run (выполнять, получить доступ к содержимому файла, возможность пройти до inode по жёсткой ссылке)
  • s — set, set UID, set GUID, SUID, SGID (установить). При запуске (получению доступа к содержимому файла) программа будет работать с правами группы или пользователя в области которых (в строке атрибутов прав доступа) стоит флаг s, а не с правами того кто её непосредственно запускает. Для каталогов SUID bit в атрибутах доступа не несёт никакого значения, а SGID bit говорит о том, что любой файл создаваемый кем угодно в этом каталоге должен принадлежать группе к которой принадлежит родительский каталог.
  • t — sticky bit. Атрибут указывает на то, что после завершения работы программы (получения её содержимого) не выгружать её образ из оперативной памяти для быстродействия. Для каталогов sticky bit говорит о том, что владельцем файла является только его создатель, при этом никто другой не имеет права доступа к чужому файлу.

Поскольку под атрибуты прав доступа файлов выделено всего 9 байт а прав 12, то атрибуты s и t перекрывают атрибут x поэтому определять его наличие надо по регистру атрибута стоящего на его месте. Если буквы S и T в верхнем регистре (большие), то под ними атрибута исполнения (x) нет и на наоборот если эти атрибуты s и t в нижнем регистре, то под ними ещё и атрибут исполнения x.

Популярные значения

400 (-r--------)
Владелец имеет право чтения; никто другой не имеет права выполнять никакие действия
644 (-rw-r--r--)
Все пользователи имеют право чтения; владелец может редактировать
660 (-rw-rw----)
Владелец и группа могут читать и редактировать; остальные не имеют права выполнять никаких действий
664 (-rw-rw-r--)
Все пользователи имеют право чтения; владелец и группа могут редактировать
666 (-rw-rw-rw-)
Все пользователи могут читать и редактировать
700 (-rwx------)
Владелец может читать, записывать и запускать на выполнение; никто другой не имеет права выполнять никакие действия
744 (-rwxr--r--)
Каждый пользователь может читать, владелец имеет право редактировать и запускать на выполнение
755 (-rwxr-xr-x)
Каждый пользователь имеет право читать и запускать на выполнение; владелец может редактировать
777 (-rwxrwxrwx)
Каждый пользователь может читать, редактировать и запускать на выполнение
1555 (-r-xr-xr-t)
Каждый пользователь имеет право читать и запускать на выполнение; удалить файл может только владелец этого файла
2555 (-r-xr-sr-x)
Каждый пользователь имеет право читать и запускать на выполнение с правами группы(user group) владельца файла
4555 (-r-sr-xr-x)
Каждый пользователь имеет право читать и запускать на выполнение с правами владельца файла

Особенности

Значениями по умолчанию являются:

  • для файлов: 644 (-rw-r--r--)
  • для директорий: 755 (drwxr-xr-x)

Значения разные для файлов и директорий потому, что флаг «выполнения» по-разному действует на файлы и директории. Для обычных файлов «выполнение» означает открытие файлов, для исполняемых файлов — их запуск, а для каталогов — просмотр содержимого.

Например, можно сделать из командной строки:

Следующая команда выполнит рекурсивное применение правил для всех файлов в директории «/home/test», а также для всех файлов во всех поддиректориях:

# find /home/test -type f -exec chmod 644 {} \;

Следующая команда выполнит рекурсивное применение правил для всех директорий в директории «/home/test», а также для всех директорий во всех поддиректориях:

# find /home/test -type d -exec chmod 755 {} \;

Того же результата можно добиться и без использования find (обратите внимание на заглавную X):

# chmod -R go=rX,u=rwX /home/test

См. также

Примечания

  1. Скотт Граннеман «Linux карманный справочник», Издательский дом «Вильямс», 2007