|
Файлы - управление доступомВведение:
Эта статья состоит из
двух частей: Первая
- (Основы
управления доступом) очень коротко описывает
основные концепции управления
доступом к файлам Unix. Вторая - (T-бит, SUID и SGID) раскрывает более
глубокие аспекты, которые
находятся вне привычного
набора флагов
"чтение-запись-выполнение".
Основы управления доступомLinux - это многопользовательская система, в ней каждый пользователь может устанавливать различные виды доступа к своим файлам. Каждый пользователь имеет уникальный идентификатор (user-ID). Кроме этого пользователи могут объединяться в одну или более групп. Права доступа к файлам для группы пользователей устанавливаются независимо от прав отдельных пользователей. Это - хорошая возможность для управление доступом среди отдельных "команд" пользователей. Чтобы узнать свой user-ID и посмотреть, в какие группы вы включены, можно воспользоваться командой id:
Для кадого файла устанавливаются индивидуальные права доступа по категориям "владелец" owner, "группа" group и "прочие" others . В свою очередь для каждой категории могут быть заданы права на чтение (r), запись (w) и "выполнение" (x) файла. Права доступа можно увидеть введя команду ls -l:
Из примера видно, что владельцем файла /usr/bin/id является пользователь root, файл отнесен к группе пользователей root. Строка -rwxr-xr-x показывает текущие права доступа к файлу со стороны отдельных категорий пользователей. Файл доступен по чтению (r), записи (w) и выполнению (x) для владельца. Для категорий "группа" и "прочие" файл доступен по чтению (r) и выполнению (x). Права доступа можно представить в виде битовой строки, в которой каждые 3 бита определяют права доступа для соответствующей категории пользователей. Т.е. запись r-x соответствует битовой строке 101 или 4+1=5 в десятичной записи. В каждой категории бит (r) имеет значение 4, бит (w) - 2, а бит (x) - 1 в десятичной системе счисления.
Для изменения прав
доступа к файлам используется
команда chmod. По
соображениям безопасности
изменение прав могут
производить только root или
владелец файла. Команда chmod
"понимает" как численное,
так и символическое
представление прав доступа.
Символическое представление
выглядит так: [ugoa][+-][rwx].
Каждая буква соответствует
своей категории:
Команда chmod 644 file.txt устанавливает "обычные" права доступа, т.е. владелец может читать и записывать в файл, а все остальные пользователи - только читать. Доступ к каталогу (например по команде cd) часто эквивалентен не только чтению файлов, находящихся в этом каталоге, но и их выполнению. Поэтому "обычными" правами для файлов каталогов (directory) является 755 а не 644:
Команда umask определяет ваши права доступа "по умолчанию". Права "по умолчанию" используются при создании новых файлов, каталогов и т.п. В качестве аргумента команда использует битовые маски прав, которые не должны присваиваться вновь создаваемым файлам. Например команда umask 022 -
это правильный выбор. Маска 022
говорит о том, что все прочие
могут просматривать ваши
каталоги или читать данные из
ваших файлов, но изменить файл
или права доступа можете
только вы. Текущую маску прав
можно узнать, введя команду umask
без аргументов. Вот пример, как можно использовать команды umask и chmod:
Отметим, что для скриптов
необходимо вручную
устанавливать биты
"выполнения". Кроме этого,
файл должен быть доступен по
чтению, чтобы интерпретатор
(shell) мог прочитать команды из
файла. Для двоичных файлов бит
выполнения устанавливается
компилятором. Выполнение нашего скрипта даст следующий результат: hello alice This file ( ./myscript ) has the following permissions: -rwxr-xr-x T-бит, SUID и SGIDПоработав с Linux какое-то время, вы, вероятно, обратите внимание, что кроме обычных "rwx" в правах доступа к некоторым файлам встречаются также буквы "s" и "t":
Что же это такое, и каким битам соответствуют эти "s" и "t"? В действительности, битовая маска прав доступа к файлам содержит 4 группы по 3 бита в каждой. Команда chmod 755 это всего лишь краткая запись полной формы команды: chmod 0755. t-битt-бит (иногда его называют стики-бит ("sticky bit") или "липучка") используется только с каталогами. Как видно из нашего примера, этот бит установлен для каталога /tmp. Обычно (т.е. если t-бит для каталога не установлен) файл из этого каталога может удалить любой пользователь, имеющий к данному каталогу доступ по записи. Т.е. если у вас есть каталог, куда любой пользователь может поместить файл, то любой пользователь может и удалить файлы из этого каталога. t-бит изменяет это правило. Если для кататлога установлен t-бит, то удалить файл из такого каталога может только владелец этого каталога или файла. Установить t-бит можно при помощи команд chmod a+tw или chmod 1777. Например:
S-бит - установка для пользователяВсе процессы в Linux выполняются с некоторым идентификатором пользователя (user-ID). Это позволяет управлять доступом процесса к ресурсам системы, файлам и т.п. Но для каждого процесса можно установить два user-ID: фактический и эффективный. Правами доступа к файлам заведует именно эффективный user-ID. Сохраните следующий скрипт idinfo и сделайте его выполнимым (chmod 755 idinfo):
Выполнив скрипт можно узнать текущие значения эффективного, фактического и группового user-ID (например для пользователя Alice): effective user-ID: alice real user-ID: alice group ID: users Когда этот скрипт запустит Текс, то он увидит что-то подобное. Вывод этого скрипта зависит только от того, кто его запускает и никак не связан с тем, кто является владельцем файла. По соображениям безопасности s-бит применим только для бинарных файлов, но не для скриптов (за исключением скриптов на языке Perl). Поэтому создадим простую С-программу, которая будет вызывать наш скрипт:
Скомпилируем
программу:
Запускаем. Ничего не случилось? А теперь запустим эту программу от имени другого пользователя!. Файлом suidtest владеет Алиса и, на первый взгляд, файл с установленным s-битом ведет себя также, как и обычный файл (т.е. с битом "x"). Однако при выполнении такого файла происходит подмена фактического user-ID (т.е. user-ID пользователя, запустившего программу) на эффективный user-ID, или user-ID владельца файла! Если несчастный Текс попробует запустить эту программу, то он увидит:
Как мы видим, это очень мощное
средство, особенно если s-бит
установлен для программ,
владельцем которых является
root. Любой пользователь,
запустив такую программу,
получит права
суперпользователя и сможет
делать то что раньше было
доступно только root'у.! Когда владельцем SUID-программы является root то можно устанавливать и фактический и эффективный user-ID используя функцию setreuid(). Прием с подстановкой user-ID часто используется для того, чтобы дать обычным пользователям доступ к некоторым функциям администратора системы. Например, если вы имеет права root, то можете модифицировать нашу программу suidtest.c чтобы разрешить любому пользователю запускать скрипты ppp-on/ppp-off на вашей машине. S-бит установленный для группыИсполнимые файлы у которых s-бит установлен для группы запускаются с эффективным group-ID владельца файла. Процесс подстановки эффективного group-ID вместо фактического group-ID очень похож на тот, что был описан выше. Когда групповой s-бит устанавливается для каталога, то каждый файл, создаваемый в этом каталоге будет отнесен к группе, к которой относится и сам каталог (но не пользователь, создающий этот файл). Например, Алиса включена в две группы:
Обычно, все файлы, которые создает Алиса, относятся к группе users. Но если каталог отнесен к группе disk, то и все файлы, которые Алиса создаст в этом каталоге, будут отнесены к группе disk и получат соответствующий group-ID.
Это хорошая возможность для
управления файлами в
каталогах, к которым имеют
доступ члены некоторой команды
пользователей. Можно быть
уверенным, что group-ID, для всех
файлов этого каталога будет
установлен правильно и все
члены команды будут обладать
равными правами по доступу к
файлам (На уровне
группы. Прим. перев.). Это
особенно актуально если для
файлов пользователей
устанавливается маска "по
умолчанию" umask 027, т.е.
для не-членов группы файлы
полностью недоступны. Перевод на русский язык А. Васильев © Guido Socher 1999 |
||||||||||||||||||||||||||||||||||
With any suggestions or questions please feel free to contact us |