Ключевые слова:linux, file, access, (найти похожие документы)
From: Lomash Dmitry <lomash@mtuci-ncb.donpac.ru>
Subject: [Linux] Основы управления доступом к файлам.
Автор статьи - Lomash Dmitry <lomash@mtuci-ncb.donpac.ru> 1.12.00
Оригинал доступен на сервере LinuxRSP.Ru (Все об операционной системе Linux на русском языке)
http://www.linuxrsp.ru/
Курс молодого бойца. Основы управления доступом к файлам.
Операционная система Linux - это многопользовательская система,
которая дает огромные возможности манипулирования доступом к данным
для каждого пользователя отдельно. Это позволяет гибко регулировать
отношения между пользователями, объединяя их в группы, что позволит
защитить данные одного пользователя от нежелательного вмешательства
других.
Бессмысленно считать, что файловая система это не самая важная часть
операционной системы, поскольку все данные пользователей хранятся
именно в файлах.
В UNIX-подобных системах файлы также обеспечивают доступ к
периферийным устройствам, дисковым накопителям, принтерам и т.п.
UID, GID
Каждый пользователь в системе имеет свой уникальный идентификационный
номер (user-ID, или UID). Также пользователи могут объединяться в
группы, которые в свою очередь имеют group-ID, или GID. Чтобы узнать
свой UID и GID, т.е. уникальный номер пользователя и номер группы, к
которой Вы принадлежите, необходимо ввести команду id:
[dmitry@localhost dmitry]$id
uid=502 (dmitry) gid=503(users) groups=503(users)
Права доступа к файлам
В свою очередь файлы имеют двух владельцев: пользователя (user owner)
и группу пользователей (group owner). Для каждого файла есть
индивидуальные права доступа, которые разбиты на три группы:
1. Доступ для пользователя-владельца файла (owner).
2. Доступ для группы-владельца файла (group).
3. Доступ для остальных пользователей (others).
Для каждой категории устанавливаются три вида доступа: (x) - право на
запуск файла, (r) - право на чтение файла, (w) - право на изменение
(редактирование) файла.
Для того, чтобы увидеть права доступа к файлам необходимо ввести
команду ls с ключом -l:
[dmitry@localhost dmitry]$ls -l /home/file.tmp
-rwxr-xr-- 1 dmitry users 33 Dec 1 00:38 file.tmp
Для данного примера мы видим, что владелец имеет права на чтение,
запись, и выполнение (первые три буквы rwx), группа пользователей
может лишь читать и выполнять этот файл (следующие три r-x), ну а
остальные пользователи могут только читать данный файл (последние
символы r--).
Изменение прав доступа
Права пользователя могут быть изменены только владельцем файла или
пользователем с правами администратора системы. Для изменения прав
используется команда
chmod [ u | g | o | a ] [+ | - | = ] [r | w | x ] name1 [name2 ...].
В качестве аргументов команда принимает указание классов доступа ('u'
- владелец-пользователь, 'g' - владелец-группа, 'o' - остальные
пользователи, 'a' - все вышеперечисленные группы вместе), права
доступа ('r' - чтение, 'w' - запись, 'x' - выполнение) и операцию,
которую необходимо произвести ('+' - добавить, '-' -убрать, '=' -
присвоить).
Таким образом, чтобы разрешить выполнение файла prog.pl всем
пользователем необходимо выполнить команду:
[dmitry@localhost dmitry]$ chmod a+x prog.pl
Далее, чтобы оставить права записи только для владельца файла
необходимо выполнить:
[dmitry@localhost dmitry]$ chmod go-w prog.pl
Рассмотрим еще несколько примеров:
$ chmod go=w prog.pl установить право на запись для всех пользователей
кроме владельца
$ chmod a+x prog.pl предоставить право на запись для всех
пользователей
$ chmod g+x-w prog.pl Добавить для группы право на выполнения файла,
но снять право на запись
Права доступа можно представить в виде битовой строки, в которой
каждые 3 бита определяют права доступа для соответствующей категории
пользователей, как представлено в таблице:
rwx rwx rwx
421 421 421
user group others
владелец группа остальные
Таким образом, для команды chmod 666 prog.pl имеем:
[dmitry@localhost dmitry]$ chmod 666 prog.pl
[dmitry@localhost dmitry]$ ls -l prog.pl
-rw-rw-rw- 1 dmitry users 78 Nov 20 prog.pl
Команда chmod 644 somefile устанавливает "обычные" права доступа, т.е.
владелец может читать и записывать в файл, а все остальные
пользователи - только читать.
Особенности прав доступа для каталогов
Права доступа для каталогов не столь очевидны. Это в первую очередь
связано с тем, что система трактует операции чтения и записи для
каталогов отлично от остальных файлов. Право чтения каталога позволяет
Вам получить имена (и только имена) файлов, находящихся в данном
каталоге. Чтобы получить дополнительную информацию о файлах каталога
(например, подробный листинг команды ls -l), системы придется
"заглянуть" в метаданные файлов, что требует права на выполнения для
каталога. Право на выполнение также потребуется для каталога, в
который Вы захотите перейти (т.е. сделать его текущим) с помощью
команды cd.
T-бит, SUID и SGID
Наиболее внимательные пользователи быстро замечают, что помимо
стандартных "rwx" значений существуют еще и буквы "s" и "t". В
действительности, битовая маска прав доступа к файлам содержит 4
группы по 3 бита в каждой. Таким образом, команда chmod 755 это всего
лишь краткая запись полной формы команды: chmod 0755.
t-бит обычно используется с каталогами.
Обычно, когда t-бит для каталога не установлен, файл в данном каталоге
может удалить любой пользователь, имеющий доступ на запись к данному
файлу. Устанавливая t-бит на каталог мы меняем это правило таким
образом, что удалить файл из каталога может только владелец этого
каталога или файла.
Установить t-бит можно при помощи команд chmod a+tw somefile или chmod
1777 somefile.
Атрибуты SUID и SGID позволяют изменить права пользователя при запуске
на выполнения файла, имеющего эти атрибуты.
Запускаемая программа получает права доступа к системным ресурсам на
основе прав доступа пользователя, запустившего программу. Установка же
флагов SUID и SGID изменяет это правило таким образом, что назначает
права доступа к системным ресурсам исходя из прав доступа владельца
файла. Т.е. запущенный исполняемый файл, которым владеет
суперпользователь, получает права доступа к системным ресурсам на
уровне суперпользователя (фактически неограниченные). При этом
установка SUID приведет к наследованию прав владельца-пользователя
файла, а установка SGID -владельца-группы.
В завершении хочется отметить, что пользоваться такими мощными
атрибутами как SUID и SGID нужно с крайней осторожностью, особенно
подвергать пристальному вниманию программы и скрипты, владельцем
которых является root (суперпользователь), т.к. это потенциальная
угроза безопасности системы.
Литература.
1. Гвидо Сочер. Файлы - управление доступом.
2. А. Робачевский. Операционная система Unix.
Автор статьи
Lomash Dmitry
1.12.00
$ chmod a+x prog.pl предоставить право на запись для всех пользователей
1) На мой взгляд в этой строке явная ошибка, должно быть a+w...
2) Отличие + и = в статье явно не раскрыто... Складывается ощущение, что это одно и то же...
Статья для меня оказалась ценной тем, что хорошо разжёваны права доступа к каталогам - именно это я и искал.
Но комментарий sunnyd считаю справедливым. Надо бы поправить. Я напоролся и удивлялся, пока не прочёл комментарий. Писал на <lomash@mtuci-ncb.donpac.ru> - адрес мёртвый.
Статья очень полезная, объясняет GID и UID, которые я часто встречал в PHP запросах, но я не смог понять из нее, откуда берется в t-bit tw-запись, если речь шла о s и t, а так же, что делает tw, мне осталось непонятно. Это права t+w?
в таком случае, что значит запись t, дает она удалить файл (каталог) или нет?