7.7.1. Система контроля доступа
7.7.1. Система контроля доступа
Как мы уже знаем, и Linux есть обычные пользователи и суперпользователь. Обычные пользователи практически не имеют никаких прав. Они могут создавать и изменять файлы только из своего домашнего каталога, а к остальным файлам файловой системы они обычно имеют доступ лишь в режиме "только чтения" (да и то не ко всем файлам).
Суперпользователь - это локальный царь и бог: ему подвластна вся система. Иначе говоря, система безоговорочно выполнит любую команду пользователя root, даже если root прикажет системе уничтожить саму себя. Да, система беззащитна перед пользователем root.
Представим, что пароль root вашей системы каким-то образом узнал очень нехороший человек. Каким именно образом злоумышленник завладел паролем, нас не интересует, для нас важны последствия: злоумышленник получил полный контроль над системой! Все остальное зависит только от него: он может удалить или изменить любые файлы, скопировать любую информацию и т.д.
Но обычные пользователи, несмотря на практически полное отсутствие прав доступа, тоже не совсем безопасны. Да, у обычных пользователей нет доступа к большинству файлов, но не к большинству программ. Обычный пользователь может, например, запустить компилятор gcc, если он установлен. Если пользователь имеет навыки программирования, то он запросто может написать программу, которая узурпирует большую часть процессорного времени или других системных ресурсов (это одна из самых распространенных атак на отказ - DoS-атак), Система не ограничивает использование программ обычными пользователями (конфигураторы являются системными утилитами, поэтому они не в счет).
Для обеспечения необходимой безопасности нам нужна некоторая дополнительная система контроля доступа, которая не даст пользователю root разнести все в пух и прах (умышленно или случайно) и не запретит обычным пользователям захватывать слишком большую часть системных ресурсов.
Система контроля доступа позволяет устанавливать права доступа к файлам не только для отдельных пользователей, но и для отдельных процессов. Например, FTP-серверу ProFTPD не нужен доступ ко всем файлам из каталога /etc. Ему нужен доступ только к каталогу, содержащему его конфигурационные файлы - /etc/proftpd. Контроль доступа к файлам, если установлена система контроля доступа, осуществляется в два этапа.
1. Проверка прав доступа на уровне файловой системы. Если файловая система запрещает доступ к файлу, то дальнейшая проверка не проводится.
2. Проверка прав доступа на уровне SELinux. Если файловая система разрешила доступ к файлу, проводится дополнительная проверка на уровне SELinux.
SELinux (Security-Enhanced Linux - Linux с улучшенной безопасностью) - система принудительного контроля доступа. SELinux считается одной из самых совершенных (понятно, при правильной настройке) систем контроля доступа, обеспечивающих максимальную безопасность. Сейчас она входит в состав ядра Linux и поставляется в составе многих дистрибутивов, Но по-прежнему есть и такие дистрибутивы, в которых SELinux не используется.
Системе SELinux можно доверять только потому, что она была разработана агентством национальной безопасности США, а затем уже была передана миру OpenSource. Такая организация, как NSA, не могла сделать небезопасную систему.
Нужно отметить, что SELinux по-настоящему нужна на сервере или компьютере, содержащем важную информацию. На домашнем компьютере она не нужна, поэтому ее можно смело отключить. В данной главе мы не будем подробно рассматривать все возможности SELinux, поскольку книга рассчитана на рядового пользователя, а не системного администратора, Обычному же пользователю будет достаточно информации, приведенной в этом разделе.