Исследование уровня безопасности операционной системы Linux
пакетов, основываясь на содержании заголовка пакета, типе пакета,
определяющего его состояние в соединении (первый пакет установления
соединения, пакет синхронизации, пакет завершения сеанса), IP адресе
компьютера-отправителя и компьютера-получателя, MAC адресе отправителя и
получателя и так далее.
. позволяет осуществлять трансляцию сетевых адресов NAT (Network Address
Translation) и подмену портов NPT (Network Port Translation). Действие
NAT заключается в подмене IP адреса компьютера-отправителя или компьютера-
получателя на указанный. В большинстве случаев эта возможность
используется для организации обмена информацией между двумя сетями,
имеющими разные диапазоны IP адресов. Действие NPT аналогично NAT с тем
различием, что в последнем производится подмена порта приложения вместо
IP адреса.
. позволяет менять специальные поля заголовка пакета, такие как TOS (Type
Of Service), TTL (Time To Live) и так далее, что предоставляет
расширенные возможности для управления процессом маршрутизации.
Вся логическая структура экрана netfilter строится на понятиях цепочек,
таблиц и правил доступа.
Цепочка – определенный набор правил управления доступом. Попадая в
цепочку, пакет проходит все ее правила, начиная с самого первого. Каждое
правило имеет критерий и действие. Если пакет попадает под критерий
правила, то с пакетом производится действие, определенное для этого
правила.
Таблица – это набор цепочек. Таблицы делятся по функциональному
назначению и определяют действия, которые разрешено выполнять в правилах
цепочек этих таблиц.
Netfilter содержит только три таблицы:
mangle – эта таблица используется для внесения изменений в заголовки
пакетов. Примером может служить изменение поля TTL, TOS или MARK. Таблица
имеет пять цепочек: PREROUTING, POSTROUTING, INPUT, OUTPUT и FORWARD.
Цепочка PREROUTING используется для внесения изменений на входе в
брандмауэр, перед принятием решения о маршрутизации. Цепочка POSTROUTING
используется для внесения изменений на выходе из брандмауэра уже после
принятия решения о маршрутизации. Цепочка INPUT используется для внесения
изменений в пакеты перед тем, как они будут переданы локальному приложению
внутри брандмауэра. Цепочка OUTPUT используется для внесения изменений в
пакеты, поступающие от приложений внутри брандмауэра. И, наконец, цепочка
FORWARD используется для внесения изменений в транзитные пакеты после
первого принятия решения о маршрутизации, но перед последним принятием
решения о маршрутизации. Использование таблицы для других целей, нежели
изменения заголовка пакета, является недопустимым.
nat – эта таблица используется для преобразования сетевых адресов,
именуемого также NAT, и подмены портов NPT. Через эту таблицу проходит
только первый пакет из всего потока данных соединения. Преобразование
адресов автоматически применяется ко всем последующим пакетам. Эта таблица
содержит три заранее определенные цепочки. Цепочка PREROUTING используется
для внесения изменений в пакеты на входе в брандмауэр. Цепочка OUTPUT
используется для преобразования адресов в пакетах, созданных приложениями
внутри брандмауэра, перед принятием решения о маршрутизации. И последняя
третья цепочка в этой таблице – POSTROUTING, которая используется для
преобразования пакетов перед отправкой их в сеть. Эта таблица должна
использоваться только для преобразования адресов и портов в пакете.
filter – эта таблица используется главным образом для фильтрации
пакетов. Таблица имеет три встроенных цепочки. Первая – FORWARD,
используемая для фильтрации пакетов, не адресованных серверу, на котором
установлен брандмауэр, то есть идущих транзитом через него. Цепочку INPUT
проходят пакеты, которые предназначены локальным приложениям сервера. И
цепочка OUTPUT используется для фильтрации исходящих пакетов,
сгенерированных приложениями на сервере с брандмауэром.
Структурная схема брандмауэра netfilter показана на рисунке 2.4.2.
Рис. 2.4.2. Структурная организация брандмауэра
Для того, чтобы брандмауэр выполнял те функции, которые на него
возлагаются, для комплексной сетевой защиты необходимо, чтобы все пакеты,
приходящие по сети и уходящие в сеть, проходили через него. Если же это
правило не соблюдается, или соблюдается частично, то все действия,
направленные на создание безопасного сервера с использованием брандмауэра,
будут бесполезны. Если существует хоть малейшая вероятность, что брандмауэр
можно обойти, эта возможность обязательно рано или поздно будет
использована взломщиками. В Linux брандмауэр является частью ядра, а
поскольку все операции при работе с сетью контролирует ядро, гарантию того,
что все сетевые пакеты пройдут через него, можно считать практически
стопроцентной.
Следуя рисунку 2.4.2, рассмотрим, какой путь совершает пакет, прежде
чем достичь места назначения. Попадая на сервер, пакет сначала проходит
цепочки PREROUTING таблиц mangle и nat. Затем, в зависимости от того, кому
адресован пакет, его направление может меняться. Если пакет адресован
локальному процессу сервера, после маршрутизации он попадает в цепочки
INPUT таблиц mangle и filter. Если ему удается успешно пройти эти цепочки,
пакет достигает локального процесса. Ответ локального процесса перед
отправкой проходит сначала цепочку OUTPUT всех трех таблиц, и, если пакет
не был отфильтрован, он попадает в заключительную цепочку POSTROUTING
таблиц mangle и nat. После этого пакет покидает сервер.
Если же пакет адресован другому компьютеру, то есть является
транзитным, то после маршрутизации он попадает в цепочку FORWARD таблиц
mangle и filter, в которой осуществляются все необходимые действия по
управлению доступом для всех транзитных пакетов. Далее, как и пакет
локального процесса, перед отправкой в сеть транзитный пакет проходит через
цепочки POSTROUTING таблиц mangle и nat.
Этих трех таблиц с заранее закрепленным функциональным назначением
вполне достаточно для реализации всех перечисленных ранее возможностей.
Количество таблиц является определенным и не может быть изменено ни при
каких условиях. При настройке брандмауэра в таблицы могут быть добавлены
другие цепочки в дополнение к уже существующим, что позволяет создавать
более гибкую систему управления доступом, нежели просто добавление правил в
заранее определенные цепочки. В отличие от цепочек, созданных
администратором, системные цепочки INPUT, OUTPUT, FORWARD, PREROUTING и
POSTROUTING не могут быть удалены ни при каких условиях.
Для настройки и управления брандмауэром в составе ОС Linux поставляется
программный пакет iptables. Этот пакет помимо файлов документации и
модулей, подгружаемых в ядро и используемых для осуществления фильтрации по
различным критериям, включает следующие исполняемые файлы:
iptables – основная программа пакета, с помощью которой производится
манипулирование правилами в цепочках. Эта программа позволяет совершать с
правилами и пользовательскими цепочками все доступные действия.
iptables-save – программа, которая позволяет сохранять все текущие
правила в одном файле для последующего их восстановления. По умолчанию этим
файлом является /etc/sysconfig/iptables. В файле /etc/sysconfig/iptables
хранится вся конфигурация брандмауэра и из этого файла она считывается при
загрузке системы.
iptables-restore – эта программа позволяет считывать правила и цепочки,
сохраненные ранее программой iptables-save. По умолчанию эта программа
пытается загрузить файл /etc/sysconfig/iptables, если он существует.
Более подробная информация о программном пакете iptables содержится в
файлах документации, а также в соответствующих man-руководствах.
Практическое применение рассмотренной информации приводится в
приложении в примере 6.
2.5. Удаленное управление
Потребность в удаленном управлении возникла с момента появления сети и
систем, которые необходимо было администрировать на расстоянии.
Чтобы лучше представить, в чем заключается удобство от использования
программ удаленного управления, возьмем простой пример. Организация имеет
свой собственный сервер, на котором располагается почтовая система и
почтовые ящики всех сотрудников организации. Организация арендует помещение
на двадцатом этаже высотного здания, в котором помимо нее функционирует еще
десяток-другой таких же организаций. В этом здании имеется
специализированное подвальное помещение с хорошо организованной системой
охлаждения, в котором располагаются коммуникационные средства, системы
связи и сервера. Сервер рассматриваемой организации также располагается в
этом помещении. За работоспособностью сервера следит специальное лицо,
выполняющее функции администратора сети, которое помимо этого выполняет
необходимые изменения в конфигурации предоставляемых сервисов. А теперь
представим, какие действия необходимо совершить администратору, если,
например, какому-то пользователю почтовой системы нужно поменять пароль.
При отсутствии удаленного управления администратор вынужден каждый раз
спускаться с двадцатого этажа в подвальное помещение, открывать локальную
консоль на сервере и, выполнив необходимые действия, возвращаться обратно.
В принципе, ситуация не такая уж безвыходная. А если организация арендует
сервер в другой стране или на другом континенте?
В таких случаях идеальным решением является организация
полнофункционального управления сервером посредством сетевого доступа.
Существует несколько очень распространенных протоколов удаленного
администрирования, позволяющих управлять системой посредством сети. Самым
старым и самым распространенным, но в то же время самым небезопасным,
является протокол Telnet. Это самый первый протокол удаленного
взаимодействия, появившийся на заре развития вычислительных сетей, когда
проблеме безопасности при передаче информации не уделялось практически
никакого внимания. При передаче информации по протоколу Telnet все данные
передаются в открытом незашифрованном виде, в том числе имена и пароли
пользователей. Любой, даже малоопытный в компьютерных делах, пользователь,
имея программу под общим названием network sniffer (с англ. «сетевой
анализатор пакетов»), может получить имя и пароль при передаче их по сети.
Помимо протокола Telnet в UNIX-системах существует целое семейство так
называемых r-программ. К ним относятся rsh, rlogin (начальная буква r
трактуется как remote) и другие, позволяющие производить различные
операции, связанные с удаленным администрированием. Однако уровень
безопасности при использовании r-программ, как и уровень безопасности при
использовании Telnet, также оставляет желать лучшего.
Существует еще один протокол для управления некоторыми параметрами
системы и получения информации о ней. Это протокол SNMP (Simple Network
Management Protocol). Протокол SNMP имеет ограниченный спектр возможностей
и не лишен тех же недостатков в плане безопасности, что и протокол Telnet.
Эти протоколы могут служить хорошим решением для таких локальных сетей,
где требования, предъявляемые к безопасности, являются не очень высокими.
Однако, при передаче данных по такой сети, как Интернет, где пакет, прежде
чем достичь адресата, проходит несколько небезопасных узлов, их
использование может служить потенциальной угрозой безопасности и основной
причиной успешного проникновения в систему.
На сегодняшний день одним из самых распространенных и безопасных
протоколов удаленного администрирования, использующих шифрование при
передаче данных, является протокол SSH (Secure SHell). Рассмотрим
поподробнее, в чем же состоит преимущество протокола SSH перед другими
протоколами удаленного управления.
Протокол SSH появился в 1995 году и с самого начала в основу была
положена идея создания средства организации безопасного доступа к
компьютерам при работе по небезопасным каналам связи, таким как сеть
Интернет. В протоколе SSH для организации безопасного доступа применяется
процедура аутентификации с использованием асимметричного шифрования с
открытым ключом. Это обеспечивает более высокую безопасность, чем при
использовании симметричного шифрования, хотя и порождает дополнительную
вычислительную нагрузку. При последующем обмене данными применяется уже
симметричное шифрование, более экономичное в смысле затрат процессорного
времени. Также SSH поддерживает возможность работы с уже упомянутым
протоколом Telnet, безопасную работу по протоколу графического уровня X11,
благодаря возможности перенаправления соответствующих данных по надежным
SSH-каналам, предоставляет безопасную замену многим r-программам UNIX, с
которыми традиционно связаны проблемы обеспечения безопасности.
Проект стандарта SSH описывает протоколы SSH и состоит из нескольких
документов, которые описывают общую архитектуру протокола, а также
протоколы трех уровней: протокол транспортного уровня, протокол
аутентификации и протокол соединения. Их задача - обеспечивать безопасную
сетевую службу наподобие Telnet поверх небезопасной сети.
Протокол транспортного уровня обеспечивает аутентификацию сервера,
конфиденциальность и целостность. Протокол аутентификации обеспечивает
аутентификацию клиента для сервера. Наконец, протокол соединения SSH
мультиплексирует безопасный шифруемый канал, представляя его в виде
нескольких логических каналов, которые используются для различных целей или
различных видов служб. Помимо этого протокол транспортного уровня
предусматривает возможность сжатия данных, что является бесспорным
преимуществом по сравнению с протоколом Telnet при передаче данных по
низкоскоростному каналу. Протокол транспортного уровня работает поверх
соединения TCP/IP, в свою очередь протокол аутентификации работает поверх
протокола транспортного уровня, а протокол соединения – поверх протокола
аутентификации. В итоге получается жесткая взаимосвязь протоколов,
обеспечивая в сумме наиболее безопасную и эффективную передачу данных.
С целью повышения безопасности в протоколе SSH осуществляется не только
аутентификация клиента для сервера, к которому обращается клиент, но и
аутентификация сервера клиентом - другими словами, происходит
аутентификация обеих сторон. Клиент шлет запрос на обслуживание в первый
раз, когда устанавливается безопасное соединение транспортного уровня SSH.
Второй запрос направляется уже после завершения аутентификации клиента.
В дистрибутивах Linux и в большинстве UNIX-подобных ОС возможность
работы по протоколу SSH предоставляет бесплатный и свободно-
распространяемый программный продукт OpenSSH, в который включены как
серверная программа, так и клиентское приложение. Настройка программ пакета
OpenSSH осуществляется отчасти при установке пакета, некоторая настройка
производится посредством изменения в конфигурационных файлах.
При установке пакета из исходных файлов при запуске программы
конфигурирования configure можно задать целый ряд ключей. В частности,
можно указать, какие методы шифрования сеанса будут использованы при работе
SSH: IDEA, DES, тройной DES, ARCFOUR и BLOWFISH. По умолчанию основным
является алгоритм IDEA, использующий 128-разрядные ключи. Если он исключен
соответствующим ключом, основным алгоритмом становится 3DES - трехкратное
последовательное DES-шифрование c 56-разрядным ключом. Можно выделить также
метод BLOWFISH, который при той же длине ключа (от 32 до 448 разрядов)
работает быстрее IDEA и DES. Можно задать также замену стандартных команд
rlogin и rsh соответствующими одноименными модулями из дистрибутива SSH.
Тогда для соединений будет использоваться протокол SSH, конечно, если
удаленный компьютер его поддерживает. В противном случае после
предупреждения будет осуществлен переход к обычным r-средствам. Все
возможные ключи конфигурационной программы можно узнать из документации,
идущей с дистрибутивом, или запуском программы с ключом –help.
По умолчанию, если путь не был изменен ключом конфигурационной
программы, файлы конфигурации OpenSSH при установке помещаются в каталог
/usr/local/etc/ssh. После установки этот каталог содержит несколько
конфигурационных файлов, основными из которых являются файлы конфигурации
sshd_config и ssh_config серверной и клиентской частей соответственно. Эти
файлы имеют формат
и могут быть использованы для установки таких параметров работы, как,
например, необходимость использования аутентификации сервера на базе имени
компьютера, аутентификации пользователя с помощью пароля, протокол какой
версии SSH (на сегодня существует две основные версии: SSH версии 1.0 и SSH
версии 2.0) необходимо использовать при обмене информацией. Для серверной
программы в конфигурационном файле sshd_config существует возможность
указать, на каком порту демон sshd будет принимать соединения (по умолчанию
для этой цели используется порт с номером 22), а также на какой IP адрес
должны приходить запросы. Все параметры конфигурационных файлов очень
подробно описаны в документации, поставляемой с пакетом OpenSSH.
Практическое применение рассмотренной информации приводится в
приложении в примере 7.
Вывод.
В этой главе работы были рассмотрены основные средства безопасности,
которыми располагает ОС Linux. В первой части главы приводится описание
средств обеспечения локальной безопасности, то есть без учета подключения
компьютера с ОС Linux к сети. Вторая часть ориентирована на проблемы
обеспечения сетевой безопасности. Первая часть освещает основные
возможности файловой системы ext2, приводится описание программ изменения
прав доступа и владельца файла chmod и chown, подробно рассматриваются
атрибуты файлов, программы работы с атрибутами chattr и lsattr. В
дополнение ко всему приводится описание пакета lcap для настройки некоторых
параметров ядра ОС. Далее рассматривается концепция пользовательских
дисковых квот, пакет для работы с пользовательскими квотами quota. В
последнем разделе, посвященном локальной безопасности, приводится
современная технология аутентификации с использованием библиотеки PAM,
рассматриваются ее возможности, приводится перечень модулей, входящих в эту
библиотеку, и их описание. Подробно рассматривается формат конфигурационных
файлов PAM. Во второй части главы рассматривается принцип защиты системы от
сетевого вмешательства посредством межсетевого экрана netfilter,
описывается алгоритм функционирования межсетевого экрана, рассматривается
концепция построения правил фильтрации. Далее приводится общий обзор
протоколов удаленного администрирования и большое внимание уделяется
протоколу ассиметричного шифрования SSH, рассматриваются принципы работы
этого протокола, его назначение и основные характеристики.
3. Средства усиления безопасности в Linux
Помимо стандартных средств организации безопасной работы Linux
существует огромное количество дополнительного системного программного
обеспечения, позволяющего расширить возможности стандартных средств и
добавить новые, более гибкие и приспособленные к специфическим условиям. В
большинстве случаев стандартные средства Linux позволяют добиться
необходимого уровня защиты. Но бывают ситуации, когда к системе
предъявляются повышенные требования, и стандартных средств обеспечения
безопасности может оказаться недостаточно. В таких случаях простым решением
может служить использование дополнительных программных пакетов.
3.1. Linux ACLs
Иногда в процессе работы администратор сервера может столкнуться с
проблемой правильной установки прав доступа. Например, возникла ситуация,
когда на один файл необходимо установить право на чтение трем пользователям
разных групп и право на чтение и выполнение для пользователя четвертой
группы. Решение этой проблемы стандартными средствами является достаточно
сложной задачей. Права доступа в Linux задаются девятью битами, что
предполагает установку прав только для пользователя-владельца, группы-
владельца и всех остальных. Какие-либо дополнительные возможности по
установке прав доступа к файлу в стандартной конфигурации ОС Linux
отсутствуют. В результате для решения задачи может потребоваться внесение
пользователей в общие группы или создание дополнительных групп, что
является не всегда приемлемым и помимо всего прочего создает дополнительные
проблемы управления.
Оптимальным решением в ситуации такого рода может послужить программная
разработка Linux ACLs.
Linux ACLs (Access Control Lists) – это набор заплаток для ядра
операционной системы и приложений для работы с файловой системой и
несколько дополнительных программ, дающих возможность устанавливать права
доступа к файлам не только для пользователя-владельца и группы-владельца
файла, но и для любого пользователя и группы.
Linux ACLs использует расширенные атрибуты для хранения данных о правах
доступа к файлам пользователей и групп. Список расширенного контроля
доступа существует для каждого файла в системе и состоит из шести
компонентов. Первые три являются копией стандартных прав доступа к файлу.
Они содержаться в единственном экземпляре в ACL и есть у каждого файла в
системе:
. ACL_USER_OBJ – режим доступа к файлу пользователя-владельца;
. ACL_GROUP_OBJ – режим доступа к файлу группы-владельца;
. ACL_OTHER – режим доступа к файлу остальных пользователей.
Следующие два компонента устанавливаются для каждого файла в
отдельности и могут присутствовать в ACL в нескольких экземплярах:
. ACL_USER – содержит UID и режим доступа к файлу пользователя, которому
установлены права, отличные от основных. На каждого пользователя со
своими правами на данный файл хранится отдельная запись. Не может
существовать более одной записи на одного и того же пользователя;
. ACL_GROUP – содержит те же самые данные, что и ACL_USER, но для группы
пользователей;
. ACL_MASK – маска действующих прав доступа для расширенного режима.
При установке дополнительных прав доступа присваивается значение и
элементу ACL_MASK.
Каталоги также могут иметь список контроля доступа по умолчанию. В
отличие от основного ACL, он действует на создаваемые внутри данного
каталога файлы и каталоги. При создании файла внутри такого каталога файл
получает ACL, равный ACL по умолчанию этого каталога.
Для использования Linux ACLs необходимо получить на сайте разработчика
пакет Linux ACLs и заплатки к ядру ОС Linux и некоторым программам
системного окружения. Сначала необходимо наложить заплатку на исходные
файлы ядра, чтобы получить поддержку листов доступа, затем собрать ядро с
поддержкой расширенных атрибутов и листов контроля доступа. После сборки
ядра с поддержкой листов доступа нужно наложить заплатки на некоторые
системные программы и пересобрать их. Далее необходимо собрать пакет
приложений ACL, который тоже находится на сайте разработчика. С помощью
приложений этого пакета производится управление расширенными правами
доступа. Весь процесс установки Linux ACLs, начиная наложением заплаток и
заканчивая сборкой пакета ACL, подробно описан в документации программного
пакета.
После включения в системе поддержки Linux ACLs манипулирование
расширенными атрибутами производится с помощью двух программ, входящих в
пакет ACL – getfacl и setfacl. Первая программа позволяет получить
информацию о расширенных правах доступа файла. Вторая производит изменение
этих прав доступа. Синтаксис командных строк этих программ подробно описан
в соответствующих man-руководствах пакета.
3.2. LIDS
LIDS (Linux Intrusion Detection/Defence System) – система обнаружения и
защиты от вторжения. Эта система представляет собой дополнение к ядру
операционной системы Linux, добавляющее дополнительные возможности для
увеличения безопасности операционной системы. LIDS позволяет запретить или
ограничить доступ к файлам, памяти, устройствам, сетевым интерфейсам и
запущенным приложениям привилегированному пользователю, что дает
возможность надежно оградить даже взломанную операционную систему от
дальнейшего вмешательства.
В отличие от других средств защиты операционной системы Linux, эту
систему невозможно отключить, не зная пароля администратора LIDS, который в
зашифрованном виде хранится в специальном файле, видимом только программой
администрирования LIDS. Таким же образом защищены и конфигурационные файлы
LIDS. Помимо этого система имеет одно очень существенное преимущество: зная
пароль администратора LIDS, систему можно отключить только с локальной
консоли компьютера.
Для того, чтобы установить LIDS, необходимо включить поддержку этой
системы в ядре, что требует наложения заплаток на исходные файлы ядра и
включение возможностей LIDS при конфигурировании ядра до его сборки. После
включения в ядре поддержки LIDS станет доступным список параметров LIDS.
Также пакет LIDS включает программы для настройки этой системы.
После установки LIDS в каталоге /etc появится каталог lids, содержащий
следующие конфигурационные файлы:
lids.cap – этот файл предназначен для хранения текущих значений
установок способностей.
lids.net – файл предназначен для настройки отправки электронных
сообщений системой LIDS.
lids.pw – в этом файле записан в зашифрованном виде пароль
администратора. Изменять этот файл можно только с помощью программы lidsadm
пакета LIDS.
lids.conf – этот файл содержит текущие установки правил доступа.
Изменять этот файл может только программа lidsadm.
При установке различных ограничений LIDS использует так называемые
способности.
Способность – это возможность программ совершать какие-либо действия.
Все способности устанавливаются в файле /etc/lids/lids.cap. Этот файл
имеет следующий формат:
[ + | - ] :
“+” включает соответствующую способность, а “–“ выключает ее.
номер – порядковый номер способности.
способность – наименование способности.
Редактирование файла /etc/lids/lids.cap можно производить с помощью
любого текстового редактора. Включение способностей влияет на все программы
без исключения, а выключение влияет на все программы, кроме тех, которым
напрямую указана данная способность с помощью правил доступа lidsadm.
После установки файл /etc/lids/lids.cap содержит включенными следующие
способности:
. CAP_CHOWN – устанавливает способность программ изменять владельца и
группу-владельца файла;
. CAP_DAC_OVERRIDE – разрешает программам, запускаемым привилегированным
пользователем, не принимать во внимание режимы доступа к файлам. При
отключении этой способности пользователь root теряет возможность изменять
файлы, если ему напрямую не заданы права доступа;
. CAP_DAC_READ_SEARCH – определяет то же самое, что и CAP_DAC_OVERRIDE,
только в данном случае ограничение распространяется только на каталоги;
. CAP_FOWNER – разрешает операции с файлами, когда владелец файла должен
совпадать с пользователем, совершающим операцию;
. CAP_FSETID – разрешает установку бит SUID и SGID на файлах, не
принадлежащих пользователю root;
. CAP_KILL – разрешает процессам привилегированного пользователя уничтожать
другие процессы;
. CAP_SETGID, CAP_SETUID – управляет способностью программ
привилегированного пользователя изменять группу и пользователя, под
которыми работает программа;
. CAP_SETPCAP – позволяет программам менять способности;
. CAP_LINUX_IMMUTABLE – управляет способностью снимать расширенные атрибуты
immutable и append с файлов;
. CAP_NET_BIND_SERVICE – разрешает программам, выполняющимся не от имени
пользователя root, использовать сетевой порт ниже 1024;
. CAP_NET_BROADCAST – управляет способностью программ рассылать
широковещательные пакеты;
. CAP_NET_ADMIN – параметр управляет большим количеством различных
способностей: конфигурирование сетевых интерфейсов, изменение правил
брандмауэра, изменение таблиц маршрутизации и других способностей,
связанных с сетевыми настройками Linux;
. CAP_NET_RAW – управляет способностью программ использовать гнезда;
. CAP_IPC_LOCK – управляет способностью процессов привилегированного
пользователя блокировать сегменты разделяемой памяти;
. CAP_IPC_OWNER – управляет доступом программ пользователя root к ресурсам
межпроцессорного взаимодействия процессов, не принадлежащих пользователю
root;
. CAP_SYS_MODULE – управляет способностью загружать модули ядра;
. CAP_SYS_RAWIO – управляет низкоуровневым доступом на чтение/запись к
таким устройствам, как /dev/mem, /dev/kmem, /dev/port, /dev/hd*,
/dev/sd*;
. CAP_SYS_CHROOT – управляет способностью устанавливать корневой каталог
для текущей командной оболочки;
. CAP_SYS_PTRACE – позволяет программам использовать вызов функции
ptrace(), которая позволяет процессу-родителю управлять выполнением
процессов-потомков;
. CAP_SYS_PACCT – управляет способностью конфигурировать учет процессов;
. CAP_SYS_ADMIN – управляет множеством способностей: управление устройством
/dev/random, создание новых устройств, конфигурирование дисковых квот,
настройка работы klogd, установка доменного имени компьютера, сброс кэша,
монтирование и размонтирование дисков, включение и отключение раздела
виртуальной памяти, установка параметров последовательных портов и многое
другое;
. CAP_SYS_BOOT – управляет способностью перезагружать систему;
. CAP_SYS_NICE – управляет способностью изменять приоритет процессов, не
принадлежащих привилегированному пользователю;
. CAP_SYS_RESOURCE – управляет способностью изменять предельные значения
использования ресурсов системы: дисковые квоты, зарезервированное
пространство на разделах с файловой системой ext2, максимальное
количество консольных программ и так далее;
. CAP_SYS_TIME – управляет способностью изменять системное время;
. CAP_SYS_TTY_CONFIG – управляет способностью изменять настройки устройств
tty;
. CAP_HIDDEN – управляет способностью программ становится невидимыми в
списке выполняемых процессов. Не влияет на все программы;
. CAP_INIT_KILL – управляет способностью уничтожать процессы-потомки
процесса init;
Для вступления в действие способностей, необходимо сразу после загрузки
системы и запуска всех сервисов выполнить команду
lidsadm –I
Эта команда обычно записывается в один из файлов сценариев, выполняемых
при загрузке системы.
Помимо способностей система LIDS позволяет задавать правила доступа к
дисковым ресурсам. Все управление LIDS осуществляется с помощью программы
lidsadm. Эта программа способна работать в двух режимах: режиме настройки
правил доступа и режиме ввода команд администрирования. Все установки
правил доступа находятся в файле /etc/lids/lids.conf. Для их просмотра
необходимо запустить программу lidsadm с параметром –L.
[root@app /]# lidsadm –L
LIST
Subject ACCESS TYPE Object
-------------------------------------------------------------
Any File READ /sbin
Any File READ /bin
Any File READ /boot
Any File READ /lib
Any File READ /usr
Any File DENY /etc/shadow
/bin/login READ /etc/shadow
/bin/su READ /etc/shadow
Any File APPEND /var/log
Any File WRITE /var/log/wtmp
…
Правила доступа состоят из трех элементов: субъекта, объекта и цели.
Объектом является любой файл или каталог, на который должны действовать
правила доступа и защита LIDS. Если в качестве объекта указан каталог, то
все файлы в нем и вложенные подкаталоги с их файлами автоматически
становятся объектами.
Субъектом является любая защищенная программа, которой дают доступ к
защищаемому объекту. Поэтому, прежде чем использовать программу в качестве
субъекта, ее саму надо защитить средствами LIDS, применив к ней правила
доступа как к объекту. Если субъект не указан, субъектом является любая
программа.
Целью является тип доступа субъекта к объекту. Существуют следующие
типы доступа:
. READ – доступ на чтение;
. WRITE – доступ на запись;
. DENY – запрет на какой-либо доступ вообще;
. APPEND – открытие только для записи в конец файла;
. IGNORE – игнорирование защиты.
Построение прав доступа подробно описано в соответствующих файлах
документации и man-руководствах.
3.3. AIDE
AIDE (Advanced Intrusion Detection Environment) – расширенное окружение
обнаружения вторжений. Основное назначение программного продукта AIDE –
обнаружения изменения файлов, их атрибутов, прав доступа, пользователей
владельцев, размера, количества ссылок на файл и других параметров, которые
присущи файлу в Linux.
Программный пакет AIDE создает базу данных всех файлов, перечисленных в
основном конфигурационном файле программы aide.conf. В базу помимо
стандартных атрибутов файла записывается также криптографическая
контрольная сумма или хэш каждого файла, вычисленных с использованием
одного или комбинации следующих алгоритмов шифрования: SHA1, MD5, RMD160,
TIGER.
Сразу после установки и настройки необходимых сервисов и программ, но
перед подключением системы к сети, администратор должен создать базу AIDE.
Это база будет содержать информацию о файлах в их первоначальном виде.
Обычно к контролируемым файлам относятся все бинарные файлы, исполняемые
файлы, конфигурационные файлы системы и программ, заголовочные файлы, файлы
исходного кода и другие файлы, изменение которых после установки
практически не производится.
Для создания базы данных программа aide запускается с параметром –init.
[root@gw /]# aide –init
После создания базы ее необходимо переместить в безопасное место, где
привилегированный пользователь root имеет ограниченный доступ или не имеет
доступа вообще. Наилучшим решением будет запись базы на какой-либо съемный
носитель информации, который без особых проблем можно подключить к системе
в любой момент.
Проверка целостности файлов производится вызовом программы aide с
параметром –check.
[root@gw /]# aide –check
Программа выполняет чтение файлов на диске и производит сравнение с
данными из базы данных. Отчет о проведенной проверке тут же выводится на
Страницы: 1, 2, 3, 4
|