Необходимо всему этому зоопарку ограничить доступ к файлам

В некоторых случаях полезно, чтобы программа, запущенная пользователем, имела больше прав, чем обычно имеет этот пользователь.

Например, пользователь меняет свой пароль. Вызывает программу passwd, которая вносит изменения в файл паролей, правами на запись в который обладает пользователь root.

Таким образом:

· каждый процесс имеет идентификатор ID того пользователя, который его запустил;

· автоматически запущенные процессы тоже имеют ID. Чей именно ID получают эти программы, обычно определяется теми программами, которые их запускают (cron, inetd и т. п.).

Если процесс может изменять свой ID, то различают “реальный ID” и эффективный ID (еще есть сохраненный ID).

1) Реальный ID – это ID пользователя, который запустил процесс.

2) Эффективный ID – это новый ID, который задача получила во время выполнения.

Права на доступ к файлу или каталогу определяются по “Эффективному” ID.

Категории пользователей

Существуют 3 категории пользователей:

· Владелец (хозяин) файла.

· Группа, из которой пользователи имеют доступ к файлу.

· Все остальные (прочие) пользователи.

Основные биты доступа (r,w,x)

Для файлов:

r– разрешено чтение из файла;

w– разрешена запись в файл;

Примечание. Бит w еще не дает право удалить сам файл или изменить его название (это определяется правами на каталог).

x– разрешено выполнение файла (исполнимого файла или скрипта).

Для каталогов:

r – можно читать оглавление, но r еще не дает возможность зайти в каталог или читать/изменить/запускать файлы.

x– разрешается войти в каталог.

Примечание. На этот уровень все равно не удастся попасть, т.к. система проверяет полный путь до конечного каталога и разрешение доступа для каждого из компонентов пути.

w – можно изменять оглавление каталога, т.е. создавать новые файлы, менять название файлов и удалять файлы.

Дополнительные биты доступа (suid, sgid, sticky)

а) Бит SUID – “set uid”

Если этот бит установлен для исполняемого файла, то при выполнении эта программа автоматически меняет эффективный UID на идентификатор того пользователя, который является владельцем этого файла, т.е. независимо от того, кто запускает эту программу, она имеет права хозяина этого файла (например, программа passwd, владельцем которой является root).

Индикаторы доступа для бита SUID имеют вид:

*/*s*/…* (sвместо w для владельца или если установлен и бит ‘x’ для владельца);

*/*S*/…* (если бит ‘x’ для владельца не установлен).

б) Бит SGID – set group ID

Здесь меняется не идентификатор пользователя, а идентификатор группы.

Идентификаторы доступа имеют вид:

*/***/*s*/*** (если установлен бит ‘x’ для группы)

или

*/***/*S*/*** (если не установлен…)

В FreeBSD этот бит для каталогов не оказывает никакого действия. В других реализациях Unix его установка приводит к тому, что создаваемые файлы “наследуют” группу от каталога.

в) Бит STICKY – “липкий”

Выглядит так:

*/***/***/**t (если для “всех остальных” установлен бит ‘x’)

или

…/**T/ (если бит ‘x’ не установлен)

Для каталогов:

Удалить файл из такого каталога может только владелец (обычно это можно делать, если установлен бит ‘w’).

Обычно такой бит применяют к каталогам общего пользования (/tmp).

Для исполняемых файлов:

Исполняемый файл после завершения работы должен остаться в памяти (в swap’e).

Это полезно для часто используемых файлов общего пользования.

Интересные сочетания битов

Для файлов:

а) -w- в файл (например, это некоторый почтовый ящик) можно записывать, но пользователи не могут посмотреть, что туда записали другие.

б) -x- – запустить задачу можно; нельзя скопировать, и залезть в нее отладчиком.

Для каталогов:

Обычно устанавливают:

--- - никаких прав;

r-x -посещение, но нельзя изменять файлы;

rwx -полный доступ.

а) r-- - можно смотреть содержимое командой ls (но только в сокращенном варианте), но нельзя войти командой cd.

б) -x- можно сделать «полусекретный» каталог (посмотреть, что там нельзя, но если знать имя файла – можно его взять).

в) rwx---r-x - все, кто входит в группу, лишены доступа: своего рода “черный список”.

Права доступа по умолчанию

Владелецфайла определяется “эффективным ID” программы, которая его создает.

Группа – наследуется от каталога.

Права доступа для вновь создаваемых файлов задаются с помощью команды umask, которая определяет какие права доступа не надо задавать.