Права доступа являются другим не менее важным аспектом использования файловой системы многими пользователями. Благодаря этому, вы можете определять, кто может читать, записывать и выполнять файлы.
Информация о правах доступа хранится в виде четырёх восьмеричных цифр, каждая из которых определяет различный набор прав доступа. Существуют такие права доступа: для пользователя, для группы и для остальных. Четвёртая восьмеричная цифра используется для хранения специальной информации: идентификатора пользователя (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 вы можете использовать буквы. Наборы прав доступа:
Владелец | u |
Группа | g |
Остальные | o |
Всё выше перечисленное | a |
Для получения результатов из приведенных выше примеров нам потребуется воспользоваться несколькими командами:
% 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 пользователя и группы не так уж и плохо, однако используйте их только в общих случаях.