Права доступа являются другим не менее важным аспектом использования файловой системы
многими пользователями. Благодаря этому, вы можете определять, кто может читать,
записывать и выполнять файлы.
Информация о правах доступа хранится в виде четырёх восьмеричных цифр, каждая из
которых определяет различный набор прав доступа. Существуют такие права доступа: для
пользователя, для группы и для остальных. Четвёртая восьмеричная цифра используется для
хранения специальной информации: идентификатора пользователя (UID), идентификатора группы
(GID) и sticky-бита. Ниже представлен перечень восьмеричных значених, присваиваемых
различным режимам доступа (им также соответствуют буквенные обозначения, которые могут
быть просмотрены программами типа ls и могут быть изменены
командой chmod):
Таблица 9-1. Права доступа в виде восьмеричных цифр
Тип доступа |
Восьмеричное значение |
Буквенное обозначение |
“sticky”-бит |
1 |
t |
установка ID пользователя |
4 |
s |
установка ID группы |
2 |
s |
чтение |
4 |
r |
запись |
2 |
w |
выполнение |
1 |
x |
Восьмеричные значения суммируются для каждой группы доступа. Например, если вам нужно
чтобы группа имела право на “чтение” и “запись”, вам нужно
использовать цифру “6” в той части информации о правах доступа, которая
соответствует группе.
Права доступа к bash'у по умолчанию:
% ls -l /bin/bash
-rwxr-xr-x 1 root bin 477692 Mar 21 19:57 /bin/bash
|
Для каталога первый дефис заменяется на букву “d”. Затем следуют три
группы прав доступа (владелец, группа и остальные). В примере видно, что владелец имеет
права на чтение, запись и выполнение (rwx). Группа имеет только
права на чтение и выполнение (r-x). И все остальные имеют права
только на чтение и выполнение (r-x).
Каким же образом можно установить права доступа к другому файлу такие же, как у bash'а? Сначала давайте создадим файл для примера:
% touch /tmp/example
% ls -l /tmp/example
-rw-rw-r--- 1 david users 0 Apr 19 11:21 /tmp/example
|
Для изменения прав доступа к файлу example нужно воспользоваться командой chmod(1) (он англ. “change mode”). Просто добавьте
необходимые восьмеричные цифры, чтобы получить требуемые права доступа. Чтобы
пользователь имел права на чтение, запись и выполнение, мы получим цифру 7. Для чтения и записи - 5. Сложите их
вместе (не суммируйте!) и передайте в качестве аргумента в chmod:
% chmod 755 /tmp/example
% ls -l /tmp/example
-rwxr-xr-x 1 david users 0 Apr 19 11:21 /tmp/example
|
Вы могли бы задать вопрос: “Почему бы просто не создать файл уже с такими
правами доступа?” Ответ очень прост. bash содержит
небольшую встроенную команду под названием umask. Она включена в
большинство командных процессоров Unix и управляет правами доступа, которые назначаются
новым создаваемым файлам. Мы рассмотрели немного встроенных команд bash'а в Разд.
8.3.1. Работа umask очень похожа на работу chmod, только в обратном порядке. Вы указываете восьмеричные
значения, которые не должны присутствовать в правах для создаваемых файлов. По умолчанию
значение umask составляет 0022.
% umask
0022
% umask 0077
% touch tempfile
% ls -l tempfile
-rw-------- 1 david users 0 Apr 19 11:21 tempfile
|
Дополнительную информацию смотрите на странице руководства bash.
Чтобы установить специальные права доступа с помощью chmod,
просуммируйте цифры и укажите полученное число в первой колонке. Например, чтобы
установить ID пользователя и ID группы, нужно использовать в первой колонке цифру 6:
% chmod 6755 /tmp/example
% ls -l /tmp/example
-rwsr-sr-x 1 david users 0 Apr 19 11:21 /tmp/example
|
Если вас смущают восьмеричные числа, при работе с chmod вы
можете использовать буквы. Наборы прав доступа:
Для получения результатов из приведенных выше примеров нам потребуется воспользоваться
несколькими командами:
% chmod a+rx /tmp/example
% chmod u+w /tmp/example
% chmod ug+s /tmp/example
|
Некотрые люди предпочитают использовать буквы, а не числа. В любом случае права
доступа будут получены точно такие же.
Работа с восьмеричным форматом зачастую оказывается быстрее, и вы часто будете
встречать его в shell-скриптах. Однако иногда использование букв оказывается более
продуктивным. Например, при использовании восьмеричного формата нет простого способа
изменения прав доступа к файлам и каталогам для группы, на затрагивающего при этом других
групп. А при использовании букв - это простая задача.
% ls -l /tmp/
-rwxr-xr-x 1 alan users 0 Apr 19 11:21 /tmp/example0
-rwxr-x--- 1 alan users 0 Apr 19 11:21 /tmp/example1
----r-xr-x 1 alan users 0 Apr 19 11:21 /tmp/example2
% chmod g-rwx /tmp/example?
-rwx---r-x 1 alan users 0 Apr 19 11:21 /tmp/example0
-rwx------ 1 alan users 0 Apr 19 11:21 /tmp/example1
-------r-x 1 alan users 0 Apr 19 11:21 /tmp/example2
|
Выше мы несколько раз упоминали о правах доступа, связанных установкой ID пользователя
(SIUD, set user ID) и ID группы (SGID, set group ID). Вас могло заинтересовать, что же
это такое. Обычно, когда вы запускаете программу, она работает под вашей учётной записью.
Другими словами она имеет права, которые есть у вас как у пользователя. То же самое
касается и группы. Когда вы запускаете программу, она выполняется с правами вашей текущей
группы. С правами доступа, устанавливающими идентификатор пользователя, вы можете
заставить программу всегда выполняться с правами её владельца (например
“root”'а). Установка идентификатора группы работает точно так же, но только
по отношению к группе.
Будьте осторожны с этими битами. SUID- и SGID-программы могут нанести серьёзный ущерб
безопасности вашей системы. Если вы часто устанавливаете SUID-биты на программы,
владельцем которых является root, тем самым вы позволяете любым
пользователям запускать эти программы с правами root'а.
Поскольку он не имеет никаких ограничений в системе, вы можете представить, насколько это
может быть опасным для безопасности вашей системы. Короче говоря, устанавливать ID
пользователя и группы не так уж и плохо, однако используйте их только в общих
случаях.