25
декабря
1

Права доступа к файлам



В любой многопользовательской UNIX-системе существует понятие прав доступа на файлы, которые подразумевают под собой действия, которые позволено совершить пользователю не затрагивая интересы других пользователей. Это какой-то набор из чтение-запись-выполнение (r-w-x, read-write-execution) для отдельно взятых владельца-группы-других (u-g-o, user-group-other).

Для каждого файла, вне зависимости от его типа, будь то обычный файл, директория, файл псевдо-устройства и т.д., можно посмотреть его атрибуты командой ls -l, где в первой колонке в виде последовательности с десяти символов можно посмотреть права доступа. Первый символ указывает на тип файла, а каждые следующие три символа — права доступа, соответственно, пользователя-группы-остальных.

ls -l /var/log/messages
-rw-r--r--  1 root  wheel    44K 14 дек 22:54 /var/log/messages

Первый символ «-» означает, что это обычный файл. Может также быть, например:

«d» — директория;
«l» — символьная ссылка;
«c» — символьное устройство;
«s» — сокет.

Далее, как видим, для пользователся (root) установлены права на чтение и запись, а для группы (wheel) и остальных только на чтение. Символы «-» обозначают, что действие, которое должно быть установленно в этой позиции, не разрешено.

В этой статье мы рассмотрим права доступа к файлам, отдельно также будут рассмотрены флаги файлов в Freebsd и атрибуты файлов Linux.

Опции «rwx» для файла означают:

чтение («read»), подразумевается, что можно просматривать содержимого данного файла и копировать файл;
запись («write») — можно изменять/редактировать содержимое файла, но нельзя удалить или переименовать его без соответствующих прав на директорию в которой находится файл;
выполнение («execute») — можно запустить файл, если это скрипт, конечно.

Если рассматривать права на директорию, то подразумевается немного другое:

r — можно просматривать содержимое директории;
w —можно удалять и создавать файлы в данной директории;
x — можно войти в директорию и получить доступ к файлам и поддиректориям для выполнения с ними тех действий, которые для них разрешены (даже если нет права на чтение, достаточно только знать точное название файла).

Кроме символьных обозначений «rwx» существует еще также числовое представление, когда установленый «x» → «1», «w» → «2», «r» → «4», а далее слагается сумма каждых трех цифр, соответственно, для владельца-группы-других. В вышеописанном случае для файла /var/log/messages получается: для владельца «rw-» → 4+2+0=6, группы и остальных «r—» → 4+0+0=4, т.е. для всего файла будут права «644».

Все варианты прав доступа, которые могут быть:

Значение Права доступа Список файлов
каталога
0 (000) Ничего не разрешено — — —
1 (001) Нельзя читать и писать, разрешено исполнять — — x
2 (010) Нельзя читать и исполнять, разрешено писать -w-
3 (011) Нельзя читать, разрешено писать и исполнять -wx
4 (100) Разрешено читать, нельзя писать и исполнять r — —
5 (101) Разрешено читать и исполнять, нельзя писать r-x
6 (110) Разрешено читать и писать, нельзя исполнять rw-
7 (111) Разрешено все rwx

Используя какое-нибудь из обозначений можно менять права доступа на файл, если вы его владелец или привилегированный пользователь, с помощью команды chmod. Можно либо указать в числовой форме, либо в формате {кому}{действие}{права}, где {кому} может быть что-нибудь из «ugoa» (соответственно: user, group, other, all), {действие} — какой-то символ из «+-=» (соответственно: добавление, удаление, точная установка прав), {права} — «rwxts» (соответсвенно: read, write, execute, Sticky-бит, SUID или SGID).

Примеры использования команды chmod, для установки/изменения на filename определенных прав:

владельцу — чтение и запись, группе и остальным — только чтение:

chmod 644 filename  ИЛИ chmod u=rw,go=r filename 

теперь добавить для этого файла eXecute для владельца:

chmod 744 filename ИЛИ chmod u+x filename 

далее убрать для группы и всех остальных возможность просматривать этот файл:

chmod 700 filename ИЛИ chmod go-r filename 

Также можно устанавливать на файлы дополнительные биты:

— Sticky-бит;
— SUID;
— SGID.

Для этого необходимо добавить в команде chmod перед трехзначным числом прав дополнительное число (которое, по умолчанию «0» — обычный файл) либо в другом представлении буквой «t» или «s». Если установлен бит SUID, то при просмотре атрибутов файла в секции прав доступа для пользователя вместо значения «х», будет стоять «s»; если установлен бит SGID — будет поставлен символ «s» в секции прав для группы; если установлен Styky-bit — в последней позиции секции права доступа для других будет установлен символ «t».

ls -lh shell-keys
-rw------- 1 km km 4,5K 17 июн 2010 shell-keys
chmod 2600 shell-keys
ls -lh shell-keys
-rw---S--- 1 km km 4,5K 17 июн 2010 shell-keys
chmod 0600 shell-keys
chmod u+s shell-keys
ls -lh shell-keys
-rwS------ 1 km km 4,5K 17 июн 2010 shell-keys 

sticky bit (бит фиксации) — обычно используется только для каталогов и позволяет ограничить права на запись в него. Если пользователь не является владельцем для этого каталога, но имеет права на запись, то он может удалять только те файлы в каталоге, владельцем которых он является. Полезно для предотвращения удаления файлов других пользователей в общедоступных каталогах, таких как /tmp. Устанавливается цифрой «1» перед трехзначной цифрой прав.

set-user-id (SUID — бит смены идентификатора пользователя),  установленый на файл, приводит к изменению привилегий запущенного процесса на привилегии владельца исполняемого файла. Исполняемые файлы, владельцем которых является root, с установленным флагом set-user-id запускаются с привилегиями root, даже если их запускает обычный пользователь.Устанавливается цифрой «4» перед трехзначной цифрой прав. Яркий пример — программа passwd.

set-group-id (SGID — бит смены идентификатора группы), установленый на каталог, приводит к тому, что файлы, создаваемые в таком каталоге, наследуют идентификатор группы каталога, который может не совпадать с идентификатором группы, к которой принадлежит пользователь, создавший файл. Это может быть полезно для каталогов, в которых хранятся файлы, общедоступные для группы пользователей. Устанавливается цифрой «2» перед трехзначной цифрой прав.

Понравилась статья?
Подписаться на RSS feed
Один комментарий:
  1. Павлик 14 марта, 2012

    Хорошая статейка… начал ее читать, когда пришлось крон ставить

Оставить комментарий