[ Содержание ]
Программа chmod предназначена для изменения прав доступа к файлам.
chmod [параметры] права файл...
Внимание! | В Linux нет права на изменение права. Поэтому хозяин файла всегда может изменять права доступа на свои и только свои файлы. Суперпользователь может менять права доступа у любых файлов в системе. |
При вызове программы необходимо всегда указывать права доступа, устанавливаемые на файл. Права доступа можно написать, используя два формата записи: числовой и символьный.
Числовой формат записи прав доступа
Числовой формат записи наиболее распространен, но он труден для понимания тем, кто начинает работу с Linux. Вам обязательно придется его изучить, так как числовой формат используется для указании прав доступа в литературе по Linux.
Права доступа — это биты в inode файла. Биты делятся на три группы, каждую группу представляют в виде десятичного числа.
Возьмем одну группу бит и запишем таблицу преобразования из двоичного в десятичный форматы:
r | w | x | |
0 | 0 | 1 | 1 |
0 | 1 | 0 | 2 |
1 | 0 | 0 | 4 |
Теперь, чтобы определить права доступа, достаточно воспользоваться приведенной таблицей. Например, правам доступа r-- соответствует число 4, правам r-x соответствует число 4+1=5 и т.д.
Для облегчения понимания приведу полную таблицу преобразования:
r | w | x | |
0 | 0 | 0 | 0 |
0 | 0 | 1 | 1 |
0 | 1 | 0 | 2 |
0 | 1 | 1 | 3 |
1 | 0 | 0 | 4 |
1 | 0 | 1 | 5 |
1 | 1 | 0 | 6 |
1 | 1 | 1 | 7 |
Поскольку мы имеем три группы бит, в результате получается три числа. Например:
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 $
[ Содержание ]