
8. FreeBSD - Средства безопасности.ppt
- Количество слайдов: 72
Free. BSD Средства безопасности
База данных login-классов • База данных login-классов является расширением учетной записи. • База данных "учетных записей" содержит только основную информацию, необходимую для регистрации пользователя в системе и создания для него "среды обитания". • Со временем возникают новые потребности, которые требуют дополнительных данных, связанных с пользователем.
Файл master. passwd
Файл login. conf • База данных login-классов находится в файле /etc/login. conf • Для ускорения доступа к данным система обращается к файлу базы данных /etc/login. conf. db. • Для создания /etc/login. conf. db из /etc/login. conf, используется команда: • # cap_mkdb /etc/login. conf
Формат login. conf • Каждая запись состоит из полей, разделенных двоеточием. • Первое поле каждой записи является ее уникальным именем-идентификатором и представляет собой имя "login class'а", по которому программы выбирают информацию из базы данных. • Каждое поле обычно пишется на отдельной строке, а для указания "переноса" используется обратный слэш ("") в конце строки.
Пример
Каждое поле содержит запись типа имя = значение (например, : cputime=infinity) или логическую переменную (например, : requirehome@)
• Для большей гибкости в login. conf предусмотрено специальное имя tc, которое означает - "а продолжение возьмем оттуда". • Его значением должно быть имя записи, которая и берется в качестве продолжения.
Пример
Описание полей • man login. conf
Ограничения ресурсов (limits) • man getrlimit cputime - общее "процессорное время", которое может использовать отдельный процесс filesize - максимальный размер файла, который может создать пользователь datasize - максимальный размер памяти, который программа может запросить под данные (сюда не входит сам код программы, ее стэк и т. п. ) stacksize - максимальный размер стека каждой программы. memoryuse - максимальный размер физической памяти (ОЗУ), занимаемой процессом. memorylocked - максимальный размер памяти, которую процесс может попросить "закрепить" (to lock) в физической памяти. maxproc - максимальное количество процессов, которые может запустить пользователь. openfiles - максимальное количество файлов, которые может открыть (одновременно) каждый процесс.
Обозначения единиц измерения • • По умолчанию указывается "размер в байтах". Для более крупных величин: b - блоки по 512 байт. Например - sbsize=10 b k - килобайты. Например - datasize=100 k. m - мегабайты. Например - stacksize=10 m. g - гигабайты. Например - coredumpsize=3 g. t - терабайты. Например - filesize=1 t.
• Для обозначения времени используются единицы измерения • s - секунды. • m - минуты. • h - часы. • d - дни. • w - недели. • y - годы. • Например - 9600 s, 160 m, 2 h 40 m.
Переменные окружения • copyright - файл, который содержит COPYRIGHT текст. • manpath – пути в которых программа man будет искать свои страницы • nologin - имя файла, который будет использоваться вместо файла nologin. • path - Значение переменной $PATH - список путей, в которых система будет искать исполняемые файлы • priority - начальное значение приоритета, запускаемых пользователем программ. • requirehome - логическое значение, которое говорит о том, что для входа пользователя в систему необходимо, чтобы в его учетной карточке в качестве home directory была прописана существующая и доступная ему директория.
• shell - Shell, который надо запустить для пользователя. Хотя shell указывается и в учетной карточке, но shell, указанный в login. conf, имеет больший приоритет. • term - Значение переменной $TERM - тип терминала. • timezone - Значение переменной $TZ. • welcome - имя файла, который будет использоваться вместо /etc/motd (приветствие, которое распечатывается при входе в систему).
Параметры, влияющие на аутентификацию • minpasswordlen - минимальная длина пароля. • passwd_format - метод зашифровки пароля (md 5 или des). • mixpasswordcase - логическая переменная, которая указывает программе passwd, что надо требовать от пользователя пароль, в котором есть и прописные, и строчные буквы. • host. allow - список имен хостов, с которых вход в систему разрешен. • host. deny - список хостов, с которых вход запрещен. • times. allow - список интервалов времени, в течении которых пользователю разрешен вход в систему. • times. deny - задает интервалы, в течении которых доступ запрещен. • ttys. allow - список терминалов, вход с которых разрешен. • ttys. deny - список терминалов, вход с которых запрещен.
Параметры и ограничения, связанные с учетом времени, проведенного юзером в системе • accounted - логическая переменная, которая включает режим ограничения акаунта пользователя по времени для всех пользователей класса. • autodelete - интервал времени, после которого учетная карточка автоматически удаляется. • daytime - максимальное время, которое юзер может провести в системе, в течении одного дня (точнее - суток). • expireperiod - период, в течении которого лимит времени считается исчерпанным. • graceexpire - дополнительное время, в течении которого юзер может войти в систему, даже если его лимит исчерпан. • gracetime - максимальное время, которое юзер может провести в системе, когда его лимит исчерпан.
• host. accounted - список хостов, при заходе с которых включается режим ограничения акаунта по времени. • host. exempt - список хостов, при заходе с которых, время учитывать не нужно. • idletime - если в течении этого времени польбездействует, то его сессия заканчивается • monthtime - максимальное (суммарное) время, которое юзер может провести в системе в течении месяца. • passwordtime - время (его устанавливает в учетной карточке программа passwd при смене пароля) в течении которого пароль считается действующим.
• refreshtime - полный лимит времени, который дается юзеру при обновлении лимитов. • refreshperiod - период времени после которого лимит времени обновляется. • sessiontime - максимальное время для юзера за одну сессию. • sessionlimit - максимальное количество одновременно существующих сессий для всех юзеров из данного класса.
• ttys. accounted - список терминалов, при заходе с которых, надо учитывать время. • ttys. exempt - список терминалов, при заходе с которых, учет времени не ведется. • warnexpire - время, когда надо предупредить юзера, что его лимит времени подходит к концу. • warnpassword - время, когда надо предупредить юзера о том, что срок действия его пароля скоро закончится (и пора менять пароль). • warntime - время, когда надо предупредить пользователя, что подходит к концу время суток, когда он может входить в систему (и находиться там). • weektime - максимальное (суммарное) время, которое юзер может провести в системе в течении недели.
Специальные классы • Несколько классов в login. conf имеют специальное значение и могут быть не связаны ни с какими реальными или фиктивными пользователями.
• default – в этой записи вы может указать значения по умолчанию для любых полей. Использоваться эта запись будет в том случае, если вы для какого-нибудь юзера вообще не укажете ни какого класса.
• root – эта запись будет использоваться для юзера root (и для программ, которые выполняются с привилегиями root).
• daemon – это "самая особенная" запись. Ее использует не login, а программа init, которая при старте системы должна запустить другие программы - демоны. Вот для этих daemon'ов используется класс не default, а daemon.
Списки контроля доступа файловой системы (ACL)
Списки контроля доступа файловой системы (ACL) • Списки контроля доступа расширяют стандартную модель прав UNIX. • Эта возможность позволяет администратору получить преимущество от использования более интеллектуальной модели безопасности.
• Для включения поддержки ACL в файловой системе UFS строка options UFS_ACL должна быть добавлена в файл настройки ядра
Включение ACL • Вариант 1 • ACL включаются во время монтирования флагом acls, который добавляется к /etc/fstab.
Включение ACL • Вариант 2 (установка флага ACL в заголовке файловой системы) • Перейдя в однопользовательский режим: • # /sbin/umount /usr • # /sbin/tunefs -a enable /dev/ad 0 s 1 f • # /sbin/mount /usr
Просмотр сведений ACL • # ls –l • • • drwx------ 2 robert 512 Dec 27 11: 54 private drwxrwx---+ 2 robert 512 Dec 23 10: 57 directory 1 drwxrwx---+ 2 robert 512 Dec 22 10: 20 directory 2 drwxrwx---+ 2 robert 512 Dec 27 11: 57 directory 3 drwxr-xr-x 2 robert 512 Nov 10 11: 54 public_html
Использование ACL • ACL файловой системы можно просмотреть с помощью утилиты getfacl. • Пример: # getfacl test #file: test #owner: 1001 #group: 1001 user: : rw- group: : r– other: : r--
• Для изменения ACL, используется утилита setfacl. • Опции: – b - удаляет все ACL, кроме стандартных полномочий пользователя, группы и остальных – m - модифицирует ACL указанным элементом (или несколькими элементами, разделенными запятой). – x - удаляет указанный ACL
• Примеры • # setfacl -b acl-test • • • # setfacl -m user: nobody: rw-, group: wheel: rw- acl-test # setfacl –m u: nobody: rw-, g: wheel: rw # setfacl -x u: nobody: , g: wheel: rw- Установка традиционных полномочий # setfacl -m user: : rw- эквивалентно # chmod u=rw
Флаги файлов • Права доступа файловой системы UNIX - это стандарт для различных версий UNIX. • Система BSD расширяет схему прав, вводя флаги файлов. Вместе с правами доступа эти флаги усиливают защиту системы.
Флаги файлов • Системные флаги может установить только суперпользователь • Пользовательские флаги может установить только владелец файла или суперпользователь
Флаги файлов • Просмотр флагов: # ls -lo • Установка флага: #chflags <флаг> <имя файла> • Снатие флага: #chflags no<флаг> <имя файла>
Системный флаг sappnd • sappnd –системный флаг «только добавление» . • В файл с этим флагом можно добавлять записи, но удалять или редактировать этот файл нельзя. • Этот флаг нельзя изменить, когда система работает на уровне безопасности 1 и выше.
Системный флаг schg • schg - системный флаг «неизменяемости» (иммунитета) • Файлы с флагом schg нельзя изменять вообще: редактировать, перемещать, заменять. • Этот флаг нельзя изменить, когда система работает на уровне безопасности 1 и выше.
Системный флаг sunlnk • sunlnk - системный флаг "запрет на удаление". • Файл можно редактировать или изменять, но нельзя удалить.
Пользовательские флаги • uappnd -пользовательский флаг "только добавление". В файл с флагом uappnd можно добавлять записи, однако этот файл нельзя удалять или редактировать. Владелец файла и root могут удалить этот флаг в любое время. • uchg - пользовательский флаг "неизменяемости". Флаг "неизменяемости" защищает пользователя от изменения файла. • • uunlnk - пользовательский флаг "запрет на удаление". Файл с установленным флагом uunlink владелец удалить не может, хотя root может его аннулировать, и этот флаг может быть снят.
Уровни безопасности Free. BSD • Уровень защиты является механизмом обеспечения безопасности, реализованным в ядре. • Когда уровень защиты больше нуля, ядро ограничивает выполнение некоторых операций, даже администратору запрещается их выполнять. • Механизм уровня защиты может, кроме всего прочего, ограничивать возможности по – – снятию некоторых флагов с файлов, таких, как schg, записи в память ядра через устройства /dev/mem и /dev/kmem, загрузке модулей ядра и изменению правил сетевого экрана. • Для выяснения состояния уровня защиты в работающей системе выполните команду: # sysctl kern. securelevel
• -1 — полностью небезопасный уровень • это уровень по умолчанию. • Фактически он означает, что механизм securelevel вообще не включён.
• 0 — небезопасный уровень • используется во время загрузки и/или нахождения системы в однопользовательском режиме • чтение файлов устройств и запись в них осуществляется согласно выставленным разрешениям • любые системные флаги файлов могут быть сброшены • Со всеми устройствами можно производить операции записи и чтения в подлежащим их разрешениям
• 1 — безопасный уровень • режим по умолчанию для многопользовательской системы • уровень безопасности не может быть понижен • запрещена запись в устройства /dev/mem, /dev/kmem. • устройства сырых дисков (такие как /dev/ad 0 и т. п. ) в смонтированных файловых системах доступны только для чтения • системные файловые флаги immutable и append-only не могут быть сброшены (но не пользовательские, т. е. флаг schg и sappnd снять нельзя, а uchg и uappnd можно). • модули ядра не могут быть загружены или выгружены
• 2 уровень: очень безопасный уровень – идентичен уровню 1, кроме: • дисковые устройства всегда доступны только на чтение, не зависимо от того, смонтированы они или нет • Нельзя за раз изменять время больше чем на 1 сек
• 3 — наивысший уровень безопасности – идентичен уровню 2, кроме: – Нельзя изменять правила фильтрации пакетов
Текущий уровень • # sysctl kern. securelevel
Установка уровня безопасности • В файле rc. conf прописать: • kern_securelevel="1" • kern_securelevel_enable="YES"
Повышение уровня • Повышение securelevel: # sysctl kern. securelevel=X
Понижение уровня • Понижение уровня производится из однопользовательского режима
Подключаемые Модули Аутентификации Pluggable Authentication Modules (PAM)
Подключаемые Модули Аутентификации • Библиотека PAM является обобщённым API для служб, связанных с аутентификацией, которые позволяют системному администратору добавлять новые методы аутентификации простой установкой новых модулей PAM, и изменять политику аутентификации посредством редактирования конфигурационных файлов.
Определения • аппликант (applicant) – Пользователь или объект, запрашивающие аутентификацию. • арбитратор (arbitrator) – Пользователь или объект, имеющий привилегии, достаточные для проверки полномочий аппликанта и права подтвердить или отклонить запрос. • учётная запись (account) – Набор полномочий, которые аппликант запрашивает от арбитратора. • цепочка (chain) – Последовательность модулей, которые будут вызваны в ответ на запрос PAM. В цепочку включена информация о последовательности вызовов модулей, аргументах, которые нужно им передать, и о том, как интерпретировать результаты. • клиент (client) • – Приложение, отвечающее за инициирование запроса на аутентификацию от имени аппликанта и получающее от него необходимую для аутентификации информацию. сервер (server) – • Приложение, выступающее от имени арбитратора для общения с клиентом, запрашивания аутентификационной информации, проверки полномочий аппликанта и подтверждающее или отклоняющее запрос. сервис (service) – Класс серверов, предоставляющих похожую или связанную функциональность, и требующую подобную аутентификацию. Политики PAM задаются на основе сервисов, так что ко всем серверам, объявляющим одно и тоже имя сервиса, будет применяться одна и та же политика.
• подсистема (facility) – Одна из четырех основных групп функциональности, которые дает PAM: аутентификация, управление учетными записями, управление сеансом и обновление ключом аутентификации. • модуль (module) – • политика (policy) – • Контекст, в котором сервис оказывается аппликанту сервером. Одна из четырех подсистем PAM, управление сеансом, касается исключительно настройке и очистке этого контекста. ключ (token) – • Полный набор конфигурационных деклараций, описывающих, как обрабатывать запросы PAM к определенной услуге. Политика обычно состоит из четырех цепочек, по одной для каждой подсистемы. сеанс (session) – • Набор из одной или большего количества связанных функций, реализующих определенную подсистему аутентификации, собранный в один двоичный файл, идентифицируемый по имени. Блок информации, связанный с учётной записью, например, пароль или ключевая фраза, которую аппликант должен предоставить для своей идентификации. транзакция (transaction) – Последовательность запросов от одного и того же аппликанта к одному и тому же экземпляру того же самого сервера, начиная с аутентификации и установления сеанса и заканчивая закрытием сеанса.
Подсистемы и примитивы • API для PAM предоставляет шесть различных примитивов для аутентификации, сгруппированных в четыре подсистемы.
Подсистема auth • Аутентификация. • Эта подсистема реализует аутентификацию аппликанта и выяснение полномочий учётной записи. • Она предоставляет два примитива: – Функция pam_authenticate(3) аутентифицирует аппликанта, обычно запрашивая аутентификационный ключ и сравнивая его со значением, хранящимся в базе данных или получаемым от сервера аутентификации. – Функция pam_setcred(3) устанавливает полномочия учётной записи, такие, как идентификатор пользователя, членство в группах и ограничения на использование ресурсов.
Подсистема account • Управление учётной записью. • Обрабатывает вопросы доступности учетной записи, не связанные с аутентификацией, такие, как ограничения в доступе на основе времени суток или загрузки сервера. • Предоставляет единственный примитив: – Функция pam_acct_mgmt(3) проверяет, доступна ли запрашиваемая учётная запись.
Подсистема session • Управление сеансом. • Отрабатывает задачи, связанные с установлением и закрытием сеанса, такие, как учет входов пользователей. • Предоставляет два примитива: – Функция pam_open_session(3) выполняет действия, связанные с установлением сеанса: добавление записей в базы данных utmp и wtmp, запуск агента SSH и так далее. – Функция pam_close_session(3) выполняет действия, связанные с закрытием сеанса: добавление записей в базы данных utmp и wtmp, завершение работы агента SSH и так далее.
Подсистема password • Управление паролем. • Используется для изменения ключа аутентификации, связанного с учетной записью, по причине истечения его срока действия или желания пользователя изменить его. • Предоставляет единственный примитив: – Функция pam_chauthtok(3) изменяет ключ аутентификации, опционально проверяя, что он труден для подбора, не использовался ранее и так далее.
Модули • Модуль PAM представляет собой самодостаточный кусок программного кода, который реализует примитивы одной или большего количества подсистем одного конкретного механизма; к возможным механизмам для подсистемы аутентификации, к примеру, относятся базы данных паролей UNIX®, системы NIS, LDAP или Radius. • Во Free. BSD каждый механизм реализуется в отдельном модуле с именем pam_mechanism. so (например, pam_unix. so для механизма UNIX. ) • В других реализациях иногда отдельные модули используются для разных подсистем, и в их имя включается, кроме названия механизма, и имя подсистемы. К примеру, в Solaris™ имеется модуль pam_dial_auth. so. 1, который часто используется для аутентификации пользователей, работающих по коммутируемым каналам связи.
Цепочки и политики • Когда сервер инициирует PAM-транзакцию, библиотека PAM пытается загрузить политику для службы, указанной при вызове функции pam_start(3). • Политика определяет, как должны обрабатываться запросы на аутентификацию, и задаётся в конфигурационном файле. • Это составляет другую основополагающую концепцию PAM: возможность администратору настраивать политику безопасности системы (в самом широком её понимании) простым редактированием текстового файла. • Политика состоит из четырёх цепочек, по одной на каждый из методов PAM. Каждое звено представляет собой последовательность конфигурационных утверждений, задающих вызываемый модуль, некоторые (необязательные) параметры для передачи в модуль, и управляющий флаг, описывающий, как интерпретировать возвращаемый из модуля код.
• • Существуют четыре различных управляющих флага: binding – • required – • Если модуль возвращает положительный ответ, выполняется оставшаяся часть цепочки, запрос удовлетворяется, если никакой другой модуль не отработает отрицательно. Если же модуль отрабатывает отрицательно, то отработка цепочки немедленно прекращается, а запрос отвергается. sufficient – – • Если модуль возвратил положительный ответ, выполняется оставшаяся часть цепочки, запрос удовлетворяется, если никакой другой модуль не отработает отрицательно. Если же модуль возвратит отрицательный ответ, остаток цепочки тоже отрабатывается, но запрос отвергается. requisite – • Если модуль отработал успешно, и ни один из предыдущих модулей в цепочке не сработал отрицательно, то цепочка прерывается, а запрос подтверждается. Если же модуль отработает неудачно, то выполняется оставшаяся часть цепочки, однако запрос отвергается. Если модуль возвратит положительный ответ, и ни один из предыдущих модулей в цепочке не отработал отрицательно, то отработка цепочки немедленно прекращается, а запрос удовлетворяется. Если модуль отработал отрицательно, то результат игнорируется и цепочка отрабатывается дальше. Так как семантика этого флага может оказаться запутанной, особенно при его использовании с последним модулем в цепочке, рекомендуется вместо него использовать управляющий флаг binding, если реализация его поддерживает. optional – Модуль отрабатывается, но результат выполнения игнорируется. Если все модули в цепочке помечены как optional, то удовлетворяться будут все запросы.
Настройка PAM
Каталог /etc/pam. d • Каждая политика содержится в отдельном файле с именем, соответствующем сервису, к которому она применяется. Эти файлы размещаются в каталоге /etc/pam. d/.
Каталог /etc/pam. d
Файлы политик PAM • Каждая строка файла описывает один шаг в цепочке. • Пример: – auth required pam_nologin. so no_warn • Поля следуют в таком порядке: имя подсистемы, управляющий флаг, имя модуля и параметры модуля.
Пример файла политики
Модули PAM во Free. BSD • • pam_deny - на любой запрос возвращает результат PAM_AUTH_ERR. Полезен для быстрого отключения сервиса (добавьте его на верх каждой цепочки) или завершения цепочек модулей sufficient. pam_echo - передаёт свои параметры в функцию взаимодействия как сообщение PAM_TEXT_INFO. В основном полезна для отладки, но также может использоваться для вывода сообщений. pam_exec - воспринимает первый переданный ему параметр как имя программы для выполнения, а остальные аргументы передаются этой программе в качестве параметров командной строки. Одним из возможных применений является его использование для запуска в момент регистрации в системе программы монтирования домашнего каталога пользователя. pam_group - принимает или отвергает аппликантов в зависимости от их членства в определённой файловой группе (обычно wheel для su). Может использоваться для отключения определённых групп пользователей от некоторого сервиса.
Модули PAM во Free. BSD • • • pam_guest - позволяет осуществлять гостевые входы с использованием фиксированных имён входа в систему. На пароль могут накладываться различные ограничения, однако действием по умолчанию является ввод любого пароля при использовании имени, соответствующего гостевому входу. pam_nologin - отвергает любые входы не пользователем root, если существует файл /var/run/nologin. Обычно этот файл создаётся утилитой shutdown(8), когда до запланированного завершения работы системы остаётся менее пяти минут. pam_passwdqc – позволяет проконтролировать сложность пароля pam_permit - на любой запрос он отвечает PAM_SUCCESS. Он полезен в качестве замены пустого места для сервисов, когда одна или большее количество цепочек в противном случае останутся пустыми. pam_rootok - возвращает положительный результат в том и только в том случае, если реальный id пользователя процесса, его вызвавшего (предполагается, что его запускает аппликант) равен 0. Это полезно для несетевых сервисов, таких как su(1) или passwd(1), к которым пользователь root должен иметь автоматический доступ.
Модули PAM во Free. BSD • pam_self - возвращает положительный результат тогда и только тогда, когда имена аппликанта соответствуют целевой учётной записи. Больше всего это пригодится в несетевых сервисах, таких как su(1), в которых идентификация аппликанта может быть с лёгкостью проверена. • pam_unix - реализует традиционную аутентификацию UNIX на основе паролей, использующую функцию getpwnam(3) для получения пароля целевой учётной записи и сравнивающую её с тем, что представил аппликант. Он также предоставляет средства управления учётными записями (отслеживая время действия учётной записи и пароля) и смены паролей.
8. FreeBSD - Средства безопасности.ppt