[ Содержание ]Программа chmod предназначена для изменения прав доступа к файлам.
chmod [параметры] права файл...
**Внимание!**В Linux нет права на изменение права. Поэтому хозяин файла всегда может изменять права доступа на свои и только свои файлы. Суперпользователь может менять права доступа у любых файлов в системе. При вызове программы необходимо всегда указывать права доступа, устанавливаемые на файл. Права доступа можно написать, используя два формата записи: числовой и символьный.
Числовой формат записи прав доступа
Числовой формат записи наиболее распространен, но он труден для понимания тем, кто начинает работу с Linux. Вам обязательно придется его изучить, так как числовой формат используется для указании прав доступа в литературе по Linux.
Права доступа — это биты в inode файла. Биты делятся на три группы, каждую группу представляют в виде десятичного числа.
Возьмем одну группу бит и запишем таблицу преобразования из двоичного в десятичный форматы:
rwx001101021004
Теперь, чтобы определить права доступа, достаточно воспользоваться приведенной таблицей. Например, правам доступа r-- соответствует число 4, правам r-x соответствует число 4+1=5 и т.д.
Для облегчения понимания приведу полную таблицу преобразования: rwx00000011010201131004101511061117 Поскольку мы имеем три группы бит, в результате получается три числа. Например:
rw-rw---- — 660
rwxr-x--x — 751
rwxrwxrwx — 777
В первом примере первая 6 — это права доступа хозяина файла, вторая 6 — права доступа группы, которой принадлежит файл, а 0 — это права доступа всех остальных пользователей системы.
При вызове программы chmod можно указывать не все три числа. Тогда числа начинают считаться справа. Например:
$ ls -l test
-rw-r--r-- 1 artur users 12 2005-06-06 11:53 test
$ chmod 6 test
$ ls -l test
------rw- 1 artur users 12 2005-06-06 11:53 test
$
установит права rw- для всех остальных пользователей системы. А следующая программа:
$ chmod 66 test
$ ls -l test
----rw-rw- 1 artur users 12 2005-06-06 11:53 test
$
установит права rw- для группы и для всех остальных пользователей системы.
Символьный формат записи прав доступа
Символьный формат прав доступа можно описать при помощи следующего шаблона:
[ugoa][[+-=][rwxst]][,...]
- u — права пользователя.
- g — права группы.
- o — права всех остальных.
- a — права пользователя, группы и всех остальных.
- + — установить бит в единицу.
- – — установить бит в ноль.
- = — установить три бита.
- r — бит r.
- w — бит w.
- x — бит x.
- s — SUID или SGID бит ( о них будет рассказано ниже).
- t — stiky бит ( об этом праве будет рассказано ниже).
В отличии от числового формата записи прав, при помощи символьного можно устанавливать или сбрасывать только один бит, а не все биты. Например, права доступа у файла были следующие: rw-rw----. После выполнения программы:
$ ls -l test
-rw-rw—- 1 artur users 12 2005-06-06 11:53 test
$ chmod o+r file
$ ls -l test
-rw-rw-r-- 1 artur users 12 2005-06-06 11:53 test
$
Права стали такими: rw-rw-r--. Как видно, был изменен всего лишь один бит. Таким же образом можно сбрасывать биты в ноль:
$ chmod g-w test
$ ls -l test
-rw-r--r-- 1 artur users 12 2005-06-06 11:53 test
$
Можно одновременно изменять права для, например, хозяина и группы:
$ chmod ug+x test
$ ls -l test
-rwxr-xr-- 1 artur users 12 2005-06-06 11:53 test*
$
При использовании символа = изменяются сразу три бита. После = описывают, какие биты должны быть установлены в единицу. Неуказанные биты будут сброшены в ноль:
$ chmod o=rw test
$ ls -l test
-rwxr-xrw- 1 artur users 12 2005-06-06 11:53 test*
$
Если не удается записать изменения прав при помощи одной записи, их можно написать несколько. В качестве символа разделителя используют запятую.
$ chmod o-rw,g-r test
$ ls -l test
-rwx--x--- 1 artur users 12 2005-06-06 11:53 test*
$
Копирование прав доступа
В новой версии программы chmod появился параметр --reference. При помощи reference можно указать файл, права доступа которого будут копироваться на другие файлы.
$ ls -l
итого 0
-rw-r--r-- 1 artur users 0 2005-06-07 12:21 newtest
-rwx--x--- 1 artur users 0 2005-06-07 12:20 test*
$ chmod --reference=newtest test
$ ls -l
итого 0
-rw-r--r-- 1 artur users 0 2005-06-07 12:21 newtest
-rw-r--r-- 1 artur users 0 2005-06-07 12:20 test
$
[ Содержание ]
