1 авг. 2008 г.

chmod: изменение прав доступа

Команда chmod (CHange MODe - изменить режим) имеет весьма специфический синтаксис. Синтаксис в общем случае:
chmod [опции] <изменение режима> <файл|каталог> [файл|каталог...]
но чем она характеризуется, так это тем, что изменение режима может принимать разные формы. Оно может быть указано двумя способами:
  1. в виде восьмеричного числа. Разрешения владельца при этом соответствуют числам в виде 00, где соответствует назначаемому разрешению: 4 на чтение, 2 на запись и 1 на выполнение. Аналогично, разрешения группы владельца принимают вид 0, а разрешения для «остальных» - . Затем, все что вам нужно сделать - так это найти сумму назначаемых разрешений, чтобы получить нужный режим. Так, разрешения rwxr-xr-- соответствуют 400+200+100 (разрешения для владельца, rwx) +40+10 (разрешения для группы, r-x) +4 (разрешения для остальных, r--) = 754; таким образом, разрешения выражаются через свободные члены. Это значит, что предыдущие разрешения безусловно заменяются;
  2. при помощи выражений. При этом разрешения выражаются через последовательность выражений, разделенных запятыми. Отсюда выражение принимает следующий вид: [категория]<+|-|=><разрешения>.


Примеры:
  • chmod -R o-w /shared/docs: рекурсивно удаляет разрешение на запись для остальных у всех файлов и подкаталогов в каталоге /shared/docs/.
  • chmod -R og-w,o-x private/: рекурсивно удаляет разрешение на запись для группы и остальных у всего каталога private/, и удаляет разрешение на выполнение для остальных.
  • chmod -c 644 misc/file*: изменяет разрешения для всех файлов в каталоге misc/, чьи имена начинаются с file на rw-r--r-- (т.е. разрешение на чтение для всех и разрешение на запись только для владельца), и сообщает только о тех файлах, которые были подвержены действию команды.

[Caution]Предостережение
Помните, что ограничение доступа к файлам — это способ защитить систему. Всякий раз, когда вы разрешаете кому-нибудь читать файл, записывать в него или запускать его на исполнение, вы рискуете, что файл будет изменен или удален. Как правило, доступ к файлу следует разрешать только тем пользователям, которым это действительно необходимо.
В следующем примере показано, как разрешить всем пользователям читать файл, вносить в него изменения и сохранять их. Для этого надо изменить права доступа группы «остальные».
Введите в командной строке:
ls -l example1.txt
На экран будет выведена следующая информация:
-rw-rw-r--   1 user user 42 Мар 24 22:07 example1.txt
Теперь введите такую команду:
chmod o+w example1.txt
Команда o+w означает, что вы даете права «остальным» («others», обозначается буквой «о») на запись в файл example1.txt. Чтобы увидеть, к чему привело выполнение указанной команды, опять посмотрим на файл:
-rw-rw-rw-  1 user user 42 Мар 24 22:09 example1.txt
Теперь все могут читать и осуществлять запись в файл.
Чтобы запретить чтение файла example1.txt и запись в него, используйте команду chmod.
chmod go-rw example1.txt
Команда go-rw сообщает системе, что вы хотите запретить чтение файла example1.txt и запись в него группе и «остальным».
В результате права доступа будут выглядеть так:
-rw-------  1 user user 42 Мар 24 22:10 example1.txt
Рассмотренные классы и права являются сокращениями от соответствующих английских слов, поэтому их легко запомнить: все, что нужно помнить, — это несколько символов и букв.
Вот список расшифровок данных сокращений:
Классы
u — пользователь, который является владельцем файла (от английского «user»);
g — группа, к которой принадлежит пользователь (от английского «group»);
o — остальные (не владелец и не группа-владелец, от английского «others»);
a — все (u, g и o, от английского «all»).
Права
r — право на чтение;
w — право на запись;
x — право на исполнение.
Действия
+ — дает право;
- — отбирает право;
= — оставляет только данное право.
Хотите проверить ваши знания? Отберите у всех пользователей все права на файл example1.txt.
chmod a-rwx example1.txt
А сейчас проверьте, можете ли вы прочитать данный файл командой cat example1.txt. Вы должны увидеть следующее:
cat: example1.txt: Permission denied
Отозвав все права, включая ваши собственные, вы заблокировали доступ к файлу. Но так как файл принадлежит вам, всегда можно вернуть права следующей командой:
chmod u+rw example1.txt
Чтобы убедиться что вы можете прочитать данный файл, воспользуйтесь командой cat example1.txt.
Приведем несколько примеров использования команды chmod:
  • g+w — дает группе-владельцу право на запись;
  • o-rwx — отбирает все права у остальных пользователей;
  • u+x — дает владельцу право на выполнение файла;
  • a+rw — позволяет любому читать и записывать в файл;
  • ug+r — позволяет владельцу и группе читать файл;
  • g=rx — позволяет группе читать и исполнять файл (не записывать в него).
Опция -R позволяет изменять права для всего дерева каталогов.
Поскольку каталоги нельзя «исполнять» как приложения, добавление или отмена соответствующего права означает разрешение (или запрет) просмотра каталога.
Например, если вы не позволили остальным пользователям исполнять каталог docs/, не имеет значения, кому дано право на чтение и запись. Никто не получит доступ к содержимому каталога, если не знает точное имя находящегося в нем файла.
Наберите, например:
chmod a-x docs
чтобы отозвать у всех пользователей право на исполнение.
Если теперь вы попытаетесь изменить каталог при помощи команды cd docs, получите отказ:
bash: docs: Permission denied
Верните права себе и своей группе:
chmod ug+x docs
Если вы сейчас проверите результаты своих действий при помощи команды ls -l, вы увидите, что доступ к каталогу docs/ запрещен только остальным пользователям.

1 комментарий:

Unknown комментирует...

спасибо, очень доступно, реально хорошая статья