LXF99:Аутентификация
(→Эксперименты c PAM) |
|||
(не показана 1 промежуточная версия 1 участника) | |||
Строка 1: | Строка 1: | ||
− | ===Эксперименты c PAM=== | + | [[Категория:Учебники]] |
+ | === Эксперименты c PAM === | ||
Вы можете и не подозревать о существовании аутентификации, потому что она «просто работает». А вот как она работает? '''Д-р Крис Браун''' расскажет. | Вы можете и не подозревать о существовании аутентификации, потому что она «просто работает». А вот как она работает? '''Д-р Крис Браун''' расскажет. | ||
− | PAM (Pluggable Authentication Modules | + | PAM (Pluggable Authentication Modules — подключаемые модули аутентификации) — один из тех темных закоулков Linux, куда большинство пользователей заглянуть не решается. Я даже готов побиться об заклад, что большинство пользователей не знают, что это такое. Однако PAM — в сердце каждой программы, так или иначе связанной с аутентификацией. Добро пожаловать на экскурсию по PAM! Заходите в нашу научную лабораторию, выполните наши экспе рименты (горелка Бунзена не потребуется!), и вы увидите, что PAM предоставляет тонкий контроль над политикой безопасности. |
В [[LXF83:Hardcore Linux|LXF83]] была статья Грэма Моррисона, в которой он провел обзор PAM и продемонстрировал ее гибкость, показав, как с ее помощью расширить аутентификацию пользователя в Linux, используя цифровой ключ, записанный на USB-брелок. В этом месяце мы пойдем дальше и рассмотрим более существенное повышение безопасности системы с помощью PAM. Те из вас, кто настриг [[LXF83:Hardcore Linux|LXF83]] на мелкие кусочки и использовал их как подстилку в клетке своего хомячка, и те, кто просто не покупал этот номер, не переживайте: в первом разделе мы проведем небольшой обзор PAM, а в детали углубимся во втором. | В [[LXF83:Hardcore Linux|LXF83]] была статья Грэма Моррисона, в которой он провел обзор PAM и продемонстрировал ее гибкость, показав, как с ее помощью расширить аутентификацию пользователя в Linux, используя цифровой ключ, записанный на USB-брелок. В этом месяце мы пойдем дальше и рассмотрим более существенное повышение безопасности системы с помощью PAM. Те из вас, кто настриг [[LXF83:Hardcore Linux|LXF83]] на мелкие кусочки и использовал их как подстилку в клетке своего хомячка, и те, кто просто не покупал этот номер, не переживайте: в первом разделе мы проведем небольшой обзор PAM, а в детали углубимся во втором. | ||
− | ====Часть 1: Знакомимся с PAM==== | + | ==== Часть 1: Знакомимся с PAM ==== |
− | [[Изображение: | + | [[Изображение:LXF99 PAM1.jpg|Рис. 1. Архитектура PAM и взаимосвязь ее частей.]] |
− | PAM | + | PAM — это каркас, помогающий приложениям выполнять то, что я называю «действиями, связанными с аутентификацией». PAM состоит из библиотеки (''libpam'') и набора модулей PAM, которые находятся в папке '''/lib/security''' и представляют собой динамически загружаемые библиотеки (.so). Каждый модуль служит для решения определенной задачи, и приложения, связанные с PAM, обычно используют стек из нескольких модулей. Общая архитектура показана на рис. 1. PAM определяет четыре типа действий, относящихся к аутентификации: |
− | * '''auth''' | + | * '''auth''' — наиболее очевидное действие: вы удостоверяете свою личность, предоставляя некоторый набор реквизитов. Обычно это имя пользователя и пароль, но возможны и другие варианты: например, физический ключ (как в [[LXF83:Hardcore Linux|LXF83]]), а то и биометрические методы, вроде отпечатков пальцев или сканирования сетчатки глаза. |
− | * '''account''' | + | * '''account''' — действия, определяющие, можно ли вам зайти в систему (теперь, когда мы уже знаем, кто вы). К этой категории можно отнести, например, модуль PAM, ограничивающий вход пользователей в систему в зависимости от времени суток. |
− | * '''session''' | + | * '''session''' — действия по выделению ресурсов, которые могут потребоваться пользователю во время сессии, например, монтирование домашнего каталога пользователя, установка лимитов на использование ресурсов системы, вывод ежедневного сообщения и т. д. |
− | * '''password''' | + | * '''password''' — действия по обновлению реквизитов пользователя (обычно пароля). |
Для краткости в дальнейшем я буду называть эти действия «задачами PAM». | Для краткости в дальнейшем я буду называть эти действия «задачами PAM». | ||
− | =====Какие программы используют PAM?===== | + | ===== Какие программы используют PAM? ===== |
Да любые, которым нужно аутентифицировать пользователей, управлять их входом в систему, выделять им ресурсы или обновлять реквизиты: использование PAM значительно облегает им жизнь. Очевидные примеры: | Да любые, которым нужно аутентифицировать пользователей, управлять их входом в систему, выделять им ресурсы или обновлять реквизиты: использование PAM значительно облегает им жизнь. Очевидные примеры: | ||
− | * ''login'' | + | * ''login'' — программа входа в текстовый терминал. |
− | * ''gdm'' | + | * ''gdm'' — вход в графический рабочий стол. |
− | * ''su'' | + | * ''su'' — запуск оболочки от имени нового пользователя. |
− | * ''passwd'' | + | * ''passwd'' — задание нового пароля. |
− | [[Изображение: | + | [[Изображение:LXF99 PAM2.jpg|Рис. 2: Синтаксис файла конфигурации PAM.]] |
Преимущество PAM в том, что «действия, связанные с аутентификацией», не привязаны к приложению, которое их использует. Благодаря этому гораздо проще менять политику безопасности или добавлять новые механизмы аутентификации: достаточно просто перенастроить PAM. Раньше для этого могло потребоваться изменение исходного кода самих приложений. Стек модулей, с помощью которых каждое приложение с аутентификацией через PAM выполняет одно из четырех соответствующих действий, определяется в файле конфигурации приложения, расположенном в каталоге '''/etc/pam.d'''. Имя файла соответствует имени приложения: например, файл '''/etc/pam.d/sshd''' содержит настройки PAM для программы ''sshd''. На рис. 2 показана одна из строк такого файла. Эта строка добавляет к стеку '''auth''' модуль '''pam_unix.so'''. При необходимости приложение может сформировать все четыре стека (по одному для каждого из типов действий PAM), однако для большинства приложений достаточно двух. | Преимущество PAM в том, что «действия, связанные с аутентификацией», не привязаны к приложению, которое их использует. Благодаря этому гораздо проще менять политику безопасности или добавлять новые механизмы аутентификации: достаточно просто перенастроить PAM. Раньше для этого могло потребоваться изменение исходного кода самих приложений. Стек модулей, с помощью которых каждое приложение с аутентификацией через PAM выполняет одно из четырех соответствующих действий, определяется в файле конфигурации приложения, расположенном в каталоге '''/etc/pam.d'''. Имя файла соответствует имени приложения: например, файл '''/etc/pam.d/sshd''' содержит настройки PAM для программы ''sshd''. На рис. 2 показана одна из строк такого файла. Эта строка добавляет к стеку '''auth''' модуль '''pam_unix.so'''. При необходимости приложение может сформировать все четыре стека (по одному для каждого из типов действий PAM), однако для большинства приложений достаточно двух. | ||
Строка 40: | Строка 41: | ||
Итак, основная идея такова: когда приложению надо выполнить одно из действий PAM, оно обращается к библиотеке PAM. Затем библиотека по очереди вызывает все модули в этом стеке. Каждый модуль «делает свое дело» и возвращает библиотеке положительный или отрицательный результат. Библиотека объединяет результаты модулей в результат для стека в целом, который возвращается приложению. Способ объединения определяется управляющим флажком модуля, прописанным во втором поле строки в файле настроек. Возможные значения флажка: | Итак, основная идея такова: когда приложению надо выполнить одно из действий PAM, оно обращается к библиотеке PAM. Затем библиотека по очереди вызывает все модули в этом стеке. Каждый модуль «делает свое дело» и возвращает библиотеке положительный или отрицательный результат. Библиотека объединяет результаты модулей в результат для стека в целом, который возвращается приложению. Способ объединения определяется управляющим флажком модуля, прописанным во втором поле строки в файле настроек. Возможные значения флажка: | ||
* '''requisite''' Если модуль завершается с ошибкой, PAM немедленно возвращает приложению ошибку, другие модули стека не вызываются. | * '''requisite''' Если модуль завершается с ошибкой, PAM немедленно возвращает приложению ошибку, другие модули стека не вызываются. | ||
− | * '''required''' Если модуль завершается с ошибкой, PAM возвращает ошибку приложению, но продолжает вызывать остальные модули стека. (Кто не в силах запомнить разницу между '''requisite''' и '''required''', вступайте в спецклуб! Я уже в | + | * '''required''' Если модуль завершается с ошибкой, PAM возвращает ошибку приложению, но продолжает вызывать остальные модули стека. (Кто не в силах запомнить разницу между '''requisite''' и '''required''', вступайте в спецклуб! Я уже в нем…) |
* '''sufficient''' Если модуль завершается успешно, PAM возвращает приложению результат «выполнен», и остальные модули стека не вызываются. (Конечно, предполагается, что никакой модуль с флажком '''required''' выше в стеке не отказал.) | * '''sufficient''' Если модуль завершается успешно, PAM возвращает приложению результат «выполнен», и остальные модули стека не вызываются. (Конечно, предполагается, что никакой модуль с флажком '''required''' выше в стеке не отказал.) | ||
− | * '''optional''' Результат работы модуля (выполнен/ошибка) игнорируется. Обычно это означает, что модуль вызывается для выполнения некой операции, не имеющей отношения к принятию решения «пропустить/отказать» для всего стека. Например, модуль '''pam_keyinit''' | + | * '''optional''' Результат работы модуля (выполнен/ошибка) игнорируется. Обычно это означает, что модуль вызывается для выполнения некой операции, не имеющей отношения к принятию решения «пропустить/отказать» для всего стека. Например, модуль '''pam_keyinit''' — «необязательный» модуль для ''sshd'', он создает новый «ключ сессии» для нового пользователя. |
{{Врезка | {{Врезка | ||
Строка 60: | Строка 61: | ||
(Последние версии PAM поддерживают получение более подробного результата выполнения модуля, чем просто «выполнен/ошибка», и более сложный синтаксис для задания способа объединения отдельных результатов. Подробности можно найти на man-странице '''pam.conf''', если она есть. Однако и этого простейшего отчета вполне достаточно.) В качестве управляющего флажка также может использоваться ключевое слово '''include'''. Эта ситуация немного отличается от других. Она предписывает PAM подключить некоторый предопределенный стек модулей (в терминах программирования это можно назвать вызовом подпрограммы). Это позволяет «вынести за скобку» наиболее общие действия PAM (например, общие стеки модулей), в отдельный файл. Например, в RHEL5 вы заметите, что во многих файлах конфигурации PAM подключен стек, определенный в файле '''system-auth'''. В Ubuntu 7.04 имеются четыре файла для аналогичной цели: '''common-auth, common-account, common-session''' и '''common-passwd'''. В Red Hat также есть своего рода «метамодуль» '''pam_stack''', который выполняет стек модулей, определенных в отдельном файле. | (Последние версии PAM поддерживают получение более подробного результата выполнения модуля, чем просто «выполнен/ошибка», и более сложный синтаксис для задания способа объединения отдельных результатов. Подробности можно найти на man-странице '''pam.conf''', если она есть. Однако и этого простейшего отчета вполне достаточно.) В качестве управляющего флажка также может использоваться ключевое слово '''include'''. Эта ситуация немного отличается от других. Она предписывает PAM подключить некоторый предопределенный стек модулей (в терминах программирования это можно назвать вызовом подпрограммы). Это позволяет «вынести за скобку» наиболее общие действия PAM (например, общие стеки модулей), в отдельный файл. Например, в RHEL5 вы заметите, что во многих файлах конфигурации PAM подключен стек, определенный в файле '''system-auth'''. В Ubuntu 7.04 имеются четыре файла для аналогичной цели: '''common-auth, common-account, common-session''' и '''common-passwd'''. В Red Hat также есть своего рода «метамодуль» '''pam_stack''', который выполняет стек модулей, определенных в отдельном файле. | ||
− | Теперь, получив представление о том, как модули PAM связаны друг с другом, вы, возможно, захотите взглянуть на большую таблицу в конце этой статьи, где описаны модули, используемые чаще всего. Учтите, что некоторых модулей может не быть в вашем дистрибутиве, и, наоборот, вам могут попасться модули, которых нет в этой таблице. Поскольку Linux | + | Теперь, получив представление о том, как модули PAM связаны друг с другом, вы, возможно, захотите взглянуть на большую таблицу в конце этой статьи, где описаны модули, используемые чаще всего. Учтите, что некоторых модулей может не быть в вашем дистрибутиве, и, наоборот, вам могут попасться модули, которых нет в этой таблице. Поскольку Linux — открытая система и прочее, ребята понаписали всяких-разных модулей PAM. Некоторые ссылки можно найти на странице http://www.kernel.org/pub/linux/libs/pam/modules.html. |
Ниже приведены шесть экспериментов с изменением настроек PAM. Ни один из них сам по себе особенно не впечатляет, но я надеюсь, что они придадут вам достаточно уверенности в себе и понимания работы PAM, чтобы начать свои собственные эксперименты. | Ниже приведены шесть экспериментов с изменением настроек PAM. Ни один из них сам по себе особенно не впечатляет, но я надеюсь, что они придадут вам достаточно уверенности в себе и понимания работы PAM, чтобы начать свои собственные эксперименты. | ||
Строка 66: | Строка 67: | ||
{{Врезка | {{Врезка | ||
|Заголовок=Документация PAM | |Заголовок=Документация PAM | ||
− | |Содержание=Возможно, вам придется немного покопаться, чтобы найти документацию на PAM, потому что в разных дистрибутивах она хранится в разных местах. Например, в RHEL5 man-страницы для модулей PAM входят в основной пакет PAM; в Ubuntu документация находится в каталоге '''/usr/share/doc/libpam-doc''' и является частью пакета ''libpam-doc'', который нужно устанавливать отдельно. Если вы найдете файл под названием Linux-PAM System | + | |Содержание=Возможно, вам придется немного покопаться, чтобы найти документацию на PAM, потому что в разных дистрибутивах она хранится в разных местах. Например, в RHEL5 man-страницы для модулей PAM входят в основной пакет PAM; в Ubuntu документация находится в каталоге '''/usr/share/doc/libpam-doc''' и является частью пакета ''libpam-doc'', который нужно устанавливать отдельно. Если вы найдете файл под названием Linux-PAM System Administrators' Guide, это отличное начало. Если локальной копии нет, ее можно скачать на странице http://kernel.org/pub/linux/libs/pam/Linux-PAM-html/Linux-PAM_SAG.html. |
|Ширина=500px}} | |Ширина=500px}} | ||
− | ====Часть 2: Экспериментируем с PAM==== | + | ==== Часть 2: Экспериментируем с PAM ==== |
− | =====Позволим всем пользователям переключаться в root без пароля через su. ===== | + | ===== Позволим всем пользователям переключаться в root без пароля через su. ===== |
'''Что делать:''' Замените все строки файла '''/etc/pam.d/su''', относящиеся к стеку '''auth''', единственной строкой: | '''Что делать:''' Замените все строки файла '''/etc/pam.d/su''', относящиеся к стеку '''auth''', единственной строкой: | ||
Строка 81: | Строка 82: | ||
<code> | <code> | ||
− | $ su -c | + | $ su -c "date 09201155" |
</code> | </code> | ||
чтобы установить системное время (действие, требующее привилегий администратора). | чтобы установить системное время (действие, требующее привилегий администратора). | ||
− | =====Запретим всем пользователям использовать su===== | + | ===== Запретим всем пользователям использовать su ===== |
'''Что делать:''' Оставьте в файле '''/etc/pam.d/su''' только одну строку, относящуюся к стеку '''auth''': | '''Что делать:''' Оставьте в файле '''/etc/pam.d/su''' только одну строку, относящуюся к стеку '''auth''': | ||
Строка 96: | Строка 97: | ||
'''Как проверить:''' Зайдите в систему как обычный пользователь и убедитесь, что переключения в режим администратора не происходит: у вас даже не спрашивают пароль. Конечно, можно запретить su, и сняв права на выполнение файла самой программы. Хотя отключение ''su'' на первый взгляд повышает безопасность системы, на деле вы вынуждаете администратора всегда заходить в систему как root, вместо кратковременного переключения в '''root''' для действий с высшими привилегиями. | '''Как проверить:''' Зайдите в систему как обычный пользователь и убедитесь, что переключения в режим администратора не происходит: у вас даже не спрашивают пароль. Конечно, можно запретить su, и сняв права на выполнение файла самой программы. Хотя отключение ''su'' на первый взгляд повышает безопасность системы, на деле вы вынуждаете администратора всегда заходить в систему как root, вместо кратковременного переключения в '''root''' для действий с высшими привилегиями. | ||
− | =====Разрешим su только пользователям из некоторой группы===== | + | ===== Разрешим su только пользователям из некоторой группы ===== |
− | '''Что делать:''' Для начала нам нужен хотя бы один пользователь в этой группе | + | '''Что делать:''' Для начала нам нужен хотя бы один пользователь в этой группе — назовем ее, например, '''wheel'''. Чтобы добавить пользователя '''chris''' в группу '''wheel''', выполните следующую команду от имени администратора: |
<code> | <code> | ||
Строка 112: | Строка 113: | ||
</code> | </code> | ||
− | '''Как проверить:''' Зайдите в систему как '''chris''' (или как любой другой пользователь из группы '''wheel''') и попробуйте использовать ''su''. Будет запрошен пароль администратора, после чего должен открыться сеанс администратора. Теперь попробуйте зайти в систему под другим пользователем | + | '''Как проверить:''' Зайдите в систему как '''chris''' (или как любой другой пользователь из группы '''wheel''') и попробуйте использовать ''su''. Будет запрошен пароль администратора, после чего должен открыться сеанс администратора. Теперь попробуйте зайти в систему под другим пользователем — не членом группы '''wheel''', и сделать то же самое. Снова будет запрошен пароль администратора, но переключиться в сеанс '''root''' не удастся. Можете попробовать изменить управляющий флажок для модуля '''pam_wheel''' в '''requisite''' — для этого измените строку в файле '''/etc/pam.d/su''': |
<code> | <code> | ||
Строка 120: | Строка 121: | ||
'''Вопрос на засыпку:''' какое произойдет изменение? Проверьте себя. Ну что, начали понимать, как настройки PAM формируют политику безопасности? | '''Вопрос на засыпку:''' какое произойдет изменение? Проверьте себя. Ну что, начали понимать, как настройки PAM формируют политику безопасности? | ||
− | =====Запретим вход в систему как root===== | + | ===== Запретим вход в систему как root ===== |
Идея здесь в том, чтобы пользователи не могли войти в систему как администраторы: то есть зайти в систему придется как обычному пользователю, а затем переключиться в режим '''root''' с помощью ''su''. (Предварительно убедитесь, что есть хотя бы один пользователь, имеющий на это право, не то вы заблокируете компьютер.) Нам нужно запретить вход как на виртуальные терминалы, так и на графический рабочий стол. | Идея здесь в том, чтобы пользователи не могли войти в систему как администраторы: то есть зайти в систему придется как обычному пользователю, а затем переключиться в режим '''root''' с помощью ''su''. (Предварительно убедитесь, что есть хотя бы один пользователь, имеющий на это право, не то вы заблокируете компьютер.) Нам нужно запретить вход как на виртуальные терминалы, так и на графический рабочий стол. | ||
Строка 134: | Строка 135: | ||
<code> | <code> | ||
# cp /etc/securetty /etc/securetty.saved | # cp /etc/securetty /etc/securetty.saved | ||
− | # echo | + | # echo "" > /etc/securetty |
</code> | </code> | ||
− | (Обратите внимание, что пустой файл '''/etc/securetty''' и отсутствие этого файла | + | (Обратите внимание, что пустой файл '''/etc/securetty''' и отсутствие этого файла — совсем не одно и то же. В первом случае запрещается вход под '''root''' на все терминалы, а во втором, наоборот, разрешается.) Далее, чтобы запретить вход от имени root в графический рабочий стол, добавьте ту же самую строку в стек auth в файле '''/etc/pam.d/gdm'''. |
− | '''Как проверить:''' Попытайтесь зайти в систему как '''root''' (с правильным паролем) | + | '''Как проверить:''' Попытайтесь зайти в систему как '''root''' (с правильным паролем) — и через виртуальный терминал, и через графический рабочий стол. Обе попытки должны потерпеть неудачу. Убедитесь, что вы можете зайти в систему как обычный пользователь. Обратите внимание, что если прибавить к этому '''Эксперимент 3''', безопасность системы существенно повысится, потому что для получения доступа администратора придется сначала зайти в систему как пользователь из группы '''wheel''', а затем открыть сеанс администратора через ''su''. Даже пронюхав пароль администратора, взломщик не получит его привилегий. |
− | =====Используем сложные пароли===== | + | ===== Используем сложные пароли ===== |
В этом эксперименте мы используем модуль '''pam_passwdqc''' стека '''password''', чтобы заставить пользователей назначать сложные пароли. (Это сработает только в том случае, когда пользователь задает или изменяет свой пароль, и не позволит выявить «слабости» уже действующих паролей.) | В этом эксперименте мы используем модуль '''pam_passwdqc''' стека '''password''', чтобы заставить пользователей назначать сложные пароли. (Это сработает только в том случае, когда пользователь задает или изменяет свой пароль, и не позволит выявить «слабости» уже действующих паролей.) | ||
− | [[Изображение: | + | [[Изображение:LXF99 PAM3.jpg|Рис. 3: Параметры модуля pam_passwdqc.]] |
'''Приемлем ли пароль?''' | '''Приемлем ли пароль?''' | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
− | ! Пароль | + | ! Пароль |
! Длина | ! Длина | ||
! Tипов символов | ! Tипов символов | ||
Строка 196: | Строка 197: | ||
|} | |} | ||
− | '''Что делать:''' В Red Hat для проверки длины паролей уже используется модуль '''pam_cracklib''', вызываемый из файла system-auth. Нам просто нужно заменить строку '''pam_cracklib''' следующей строкой: | + | '''Что делать:''' В Red Hat для проверки длины паролей уже используется модуль '''pam_cracklib''', вызываемый из файла system-auth. Нам просто нужно заменить строку '''pam_cracklib''' следующей строкой: |
<code> | <code> | ||
Строка 203: | Строка 204: | ||
</code> | </code> | ||
− | Рис. 3 иллюстрирует параметры модуля '''pam_passwdqc'''. Качество пароля определяется его длиной, и в зависимости от количества типов символов, используемых в пароле, можно задать разные значения минимальной длину пароля. Существуют четыре типа символов: буквы нижнего и верхнего регистров, цифры и остальные символы. Заглавная буква в первом символе и цифра в последнем символе не в счет. | + | Рис. 3 иллюстрирует параметры модуля '''pam_passwdqc'''. Качество пароля определяется его длиной, и в зависимости от количества типов символов, используемых в пароле, можно задать разные значения минимальной длину пароля. Существуют четыре типа символов: буквы нижнего и верхнего регистров, цифры и остальные символы. Заглавная буква в первом символе и цифра в последнем символе не в счет. |
'''Как проверить:''' Попробуйте изменить свой пароль. Задавайте разные строки и в каждом случае подсчитывайте общее число символов и число типов символов, предполагая, что пароль должен быть приемлемым. Несколько примеров приведены во врезке «Допустим ли пароль?». | '''Как проверить:''' Попробуйте изменить свой пароль. Задавайте разные строки и в каждом случае подсчитывайте общее число символов и число типов символов, предполагая, что пароль должен быть приемлемым. Несколько примеров приведены во врезке «Допустим ли пароль?». | ||
− | =====Запретим обычным пользователям выключать систему===== | + | ===== Запретим обычным пользователям выключать систему ===== |
− | Во многих системах обычным пользователям (не администраторам) дозволено выключать или перезагружать систему с помощью команд ''halt, shutdown и reboot'' | + | Во многих системах обычным пользователям (не администраторам) дозволено выключать или перезагружать систему с помощью команд ''halt, shutdown и reboot'' — для рабочей машины предприятия, пожалуй, не лучшая идея. В данном эксперименте мы изменим конфигурацию PAM для этих команд, чтобы один лишь '''root''' мог выключать компьютер. |
− | '''Что делать:''' Откройте файл настроек PAM для команды ''halt'' ('''/etc/pam.d/halt'''). В моем Red Hat стек '''auth''' для команды ''halt'' выглядит так: | + | '''Что делать:''' Откройте файл настроек PAM для команды ''halt'' ('''/etc/pam.d/halt'''). В моем Red Hat стек '''auth''' для команды ''halt'' выглядит так: |
<code> | <code> | ||
auth sufficient pam_rootok.so | auth sufficient pam_rootok.so | ||
Строка 224: | Строка 225: | ||
'''Как проверить:''' Зайдите в систему как обычный пользователь и попробуйте остановить систему командой ''halt''. У вас больше не должно этого получаться. Для полноты решения внесите те же изменения в файлы настроек для команд ''shutdown'' и ''reboot''. | '''Как проверить:''' Зайдите в систему как обычный пользователь и попробуйте остановить систему командой ''halt''. У вас больше не должно этого получаться. Для полноты решения внесите те же изменения в файлы настроек для команд ''shutdown'' и ''reboot''. | ||
− | ''''Д-р Крис Браун''' | + | ''''Д-р Крис Браун''' — автор книги ''SUSE Linux: A Complete Guide to Novell’s Community Distribution (Издательство «O’Reilly», 2006)''. Некоторые главы можно найти на странице http://www.oreilly.com/catalog/suselinux/. '''LXF''' |
− | ====Часто используемые модули РАМ==== | + | ==== Часто используемые модули РАМ ==== |
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
Строка 235: | Строка 236: | ||
| pam_unix | | pam_unix | ||
| auth, session, password | | auth, session, password | ||
− | | Выполняет аутентификацию в традиционном стиле Unix, используя хэши паролей, которые хранятся в '''/etc/shadow'''. | + | | Выполняет аутентификацию в традиционном стиле Unix, используя хэши паролей, которые хранятся в '''/etc/shadow'''. Включен в файлы настроек PAM многих приложений, непосредственно или с помощью директивы '''include'''. |
|- | |- | ||
| pam_limits | | pam_limits | ||
− | | session | + | | session |
− | | Устанавливает ограничения на системные ресурсы, отпускаемые на время пользовательского сеанса. По умолчанию эти | + | | Устанавливает ограничения на системные ресурсы, отпускаемые на время пользовательского сеанса. По умолчанию эти ограничения берутся из файла '''/etc/security/limits.conf'''; здесь можно задать «жесткие» и «мягкие» границы для таких параметров, как максимальное число процессов, максимальный размер файла, процессорное время и т. д.) |
|- | |- | ||
− | | pam_rootok | + | | pam_rootok |
| auth | | auth | ||
− | | Завершается успешно, если вы | + | | Завершается успешно, если вы — администратор системы, и возвращает ошибку в противном случае. Обычно используется в сочетании с другими модулями аутентификации для реализации правила «Если вы администратор, можете продолжить и выполнить действие, если нет — необходима авторизация». Стек для этой политики может выглядеть так: |
<code> | <code> | ||
auth sufficient pam_rootok.so | auth sufficient pam_rootok.so | ||
Строка 251: | Строка 252: | ||
| pam_cracklib | | pam_cracklib | ||
| password | | password | ||
− | | | + | | Проверяет качество пароля, затем еще раз проверяет пароль по системному словарю и ряду правил «плохого подбора пароля». Этот модуль обычно используется в стеке password, чтобы проверить качество пароля перед передачей его следующему модулю стека (обычно '''pam_unix'''), который обновляет пароль. |
|- | |- | ||
| pam_passwdqc | | pam_passwdqc | ||
| password | | password | ||
− | | Альтернативный модуль для проверки качества пароля, который поддерживает словосочетания (pass phrases) и может | + | | Альтернативный модуль для проверки качества пароля, который поддерживает словосочетания (pass phrases) и может генерировать случайные пароли. Как и '''pam_cracklib''', этот модуль обычно используется в стеке '''password''' для проверки качества пароля перед его обновлением. Подробный пример приведен в '''эксперименте 5'''. |
|- | |- | ||
− | | pam_permit | + | | pam_permit |
| auth, account, session, password | | auth, account, session, password | ||
| Всегда говорит «да» и возвращает успешный результат выполнения. | | Всегда говорит «да» и возвращает успешный результат выполнения. | ||
Строка 269: | Строка 270: | ||
| Просто отправляет сообщение (включая имя сервиса, терминал, имя пользователя и удаленный хост) службе журнала '''syslogd'''. Может быть использован, например, ближе к нижней части стека PAM для записи в журнал информации о неудавшихся попытках аутентификации как раз перед тем, как модуль '''pam_deny''' отклонит их. | | Просто отправляет сообщение (включая имя сервиса, терминал, имя пользователя и удаленный хост) службе журнала '''syslogd'''. Может быть использован, например, ближе к нижней части стека PAM для записи в журнал информации о неудавшихся попытках аутентификации как раз перед тем, как модуль '''pam_deny''' отклонит их. | ||
|- | |- | ||
− | | pam_motd | + | | pam_motd |
| session | | session | ||
| Выводит «приветствие дня» (по умолчанию это файл '''/etc/motd'''), обычно после успешного входа в систему. | | Выводит «приветствие дня» (по умолчанию это файл '''/etc/motd'''), обычно после успешного входа в систему. | ||
Строка 275: | Строка 276: | ||
| pam_securetty | | pam_securetty | ||
| aurg | | aurg | ||
− | | Нет, это не опечатка в слове | + | | Нет, это не опечатка в слове «security». Модуль pam_securetty разрешает вход в систему от имени root только с «безопасных терминалов» («secure terminals»), перечисленных в файле '''/etc/securetty'''. (Запомните, tty на языке Linux означает «терминальное устройство»). Модуль никак не влияет на вход в систему для остальных пользователей. Этот способ управления доступом имел больше смысла в те дни, когда Unix работал на многопользовательских мини-компьютерах с 20 терминалами, включенными в порты RS-232; файл '''securetty''' мог использоваться для ограничения входа от имени '''root''' терминалом, запертым в офисе системного администратора. Однако он способен послужить и для полного запрета входа в систему под пользователем root… К этой идее мы еще вернемся в тексте. |
|- | |- | ||
| pam_wheel | | pam_wheel | ||
| auth, account | | auth, account | ||
− | | Используется программами типа ''su''. Этот модуль разрешает администраторский доступ только пользователям, включенным в группу '''wheel'''. (Историческая справка: Использование названия | + | | Используется программами типа ''su''. Этот модуль разрешает администраторский доступ только пользователям, включенным в группу '''wheel'''. (Историческая справка: Использование названия «wheel» для группы привилегированных пользователей уходит корнями в давние времена. Оно точно было в ранних версиях Unix, и пришло, если верить файлу жаргона (http://www.catb.org/jargon/index.html, из ОС Twenex, распространенной в шестидесятых годах. Но я понятия не имею, почему ее называют «wheel».) |
|- | |- | ||
| pam_winbind | | pam_winbind | ||
| auth | | auth | ||
− | | Аутентифицирует пользователей в соответствии с учетными данными домена Windows путем взаимодействия с демоном winbind (который, в свою очередь, взаимодействует с контроллером домена Windows). Это важный компонент | + | | Аутентифицирует пользователей в соответствии с учетными данными домена Windows путем взаимодействия с демоном winbind (который, в свою очередь, взаимодействует с контроллером домена Windows). Это важный компонент для ситуаций, когда вы добавляете Linux в существующую инфраструктуру на базе Windows и хотите поддерживать между этими системами общую базу данных учетных записей пользователей. |
|- | |- | ||
| pam_nologin | | pam_nologin | ||
| auth, account | | auth, account | ||
− | | | + | | Запрещает пользователям (кроме root) вход в систему, если существует файл '''/etc/nologin'''. В некоторых дистрибутивах этот файл создается программой ''shutdown'', чтобы запретить вход в систему во время ее остановки. |
|} | |} |
Текущая версия на 10:27, 17 ноября 2008
|
|
|
[править] Эксперименты c PAM
Вы можете и не подозревать о существовании аутентификации, потому что она «просто работает». А вот как она работает? Д-р Крис Браун расскажет.
PAM (Pluggable Authentication Modules — подключаемые модули аутентификации) — один из тех темных закоулков Linux, куда большинство пользователей заглянуть не решается. Я даже готов побиться об заклад, что большинство пользователей не знают, что это такое. Однако PAM — в сердце каждой программы, так или иначе связанной с аутентификацией. Добро пожаловать на экскурсию по PAM! Заходите в нашу научную лабораторию, выполните наши экспе рименты (горелка Бунзена не потребуется!), и вы увидите, что PAM предоставляет тонкий контроль над политикой безопасности.
В LXF83 была статья Грэма Моррисона, в которой он провел обзор PAM и продемонстрировал ее гибкость, показав, как с ее помощью расширить аутентификацию пользователя в Linux, используя цифровой ключ, записанный на USB-брелок. В этом месяце мы пойдем дальше и рассмотрим более существенное повышение безопасности системы с помощью PAM. Те из вас, кто настриг LXF83 на мелкие кусочки и использовал их как подстилку в клетке своего хомячка, и те, кто просто не покупал этот номер, не переживайте: в первом разделе мы проведем небольшой обзор PAM, а в детали углубимся во втором.
[править] Часть 1: Знакомимся с PAM
PAM — это каркас, помогающий приложениям выполнять то, что я называю «действиями, связанными с аутентификацией». PAM состоит из библиотеки (libpam) и набора модулей PAM, которые находятся в папке /lib/security и представляют собой динамически загружаемые библиотеки (.so). Каждый модуль служит для решения определенной задачи, и приложения, связанные с PAM, обычно используют стек из нескольких модулей. Общая архитектура показана на рис. 1. PAM определяет четыре типа действий, относящихся к аутентификации:
- auth — наиболее очевидное действие: вы удостоверяете свою личность, предоставляя некоторый набор реквизитов. Обычно это имя пользователя и пароль, но возможны и другие варианты: например, физический ключ (как в LXF83), а то и биометрические методы, вроде отпечатков пальцев или сканирования сетчатки глаза.
- account — действия, определяющие, можно ли вам зайти в систему (теперь, когда мы уже знаем, кто вы). К этой категории можно отнести, например, модуль PAM, ограничивающий вход пользователей в систему в зависимости от времени суток.
- session — действия по выделению ресурсов, которые могут потребоваться пользователю во время сессии, например, монтирование домашнего каталога пользователя, установка лимитов на использование ресурсов системы, вывод ежедневного сообщения и т. д.
- password — действия по обновлению реквизитов пользователя (обычно пароля).
Для краткости в дальнейшем я буду называть эти действия «задачами PAM».
[править] Какие программы используют PAM?
Да любые, которым нужно аутентифицировать пользователей, управлять их входом в систему, выделять им ресурсы или обновлять реквизиты: использование PAM значительно облегает им жизнь. Очевидные примеры:
- login — программа входа в текстовый терминал.
- gdm — вход в графический рабочий стол.
- su — запуск оболочки от имени нового пользователя.
- passwd — задание нового пароля.
Преимущество PAM в том, что «действия, связанные с аутентификацией», не привязаны к приложению, которое их использует. Благодаря этому гораздо проще менять политику безопасности или добавлять новые механизмы аутентификации: достаточно просто перенастроить PAM. Раньше для этого могло потребоваться изменение исходного кода самих приложений. Стек модулей, с помощью которых каждое приложение с аутентификацией через PAM выполняет одно из четырех соответствующих действий, определяется в файле конфигурации приложения, расположенном в каталоге /etc/pam.d. Имя файла соответствует имени приложения: например, файл /etc/pam.d/sshd содержит настройки PAM для программы sshd. На рис. 2 показана одна из строк такого файла. Эта строка добавляет к стеку auth модуль pam_unix.so. При необходимости приложение может сформировать все четыре стека (по одному для каждого из типов действий PAM), однако для большинства приложений достаточно двух.
- Метамодернизм в позднем творчестве В.Г. Сорокина
- ЛитРПГ - последняя отрыжка постмодерна
- "Ричард III и семиотика"
- 3D-визуализация обложки Ridero создаем обложку книги при работе над самиздатом.
- Архитектура метамодерна - говоря о современном искусстве, невозможно не поговорить об архитектуре. В данной статье будет отмечено несколько интересных принципов, характерных для построек "новой волны", столь притягательных и скандальных.
- Литература
- Метамодерн
- Рокер-Прометей против изначального зла в «Песне про советскую милицию» Вени Дркина, Автор: Нина Ищенко, к.ф.н, член Союза Писателей ЛНР - перепубликация из журнала "Топос".
- Как избавиться от комаров? Лучшие типы ловушек.
- Что делать если роблокс вылетает на windows
- Что делать, если ребенок смотрит порно?
- Почему собака прыгает на людей при встрече?
- Какое масло лить в Задний дифференциал (мост) Visco diff 38434AA050
- О чем может рассказать хвост вашей кошки?
- Верветки
- Отчетность бюджетных учреждений при закупках по Закону № 223-ФЗ
- Срок исковой давности как правильно рассчитать
- Дмитрий Патрушев минсельхоз будет ли преемником Путина
- Кто такой Владислав Поздняков? Что такое "Мужское Государство" и почему его признали экстремистским в России?
- Как правильно выбрать машинное масло в Димитровграде?
- Как стать богатым и знаменитым в России?
- Почему фильм "Пипец" (Kick-Ass) стал популярен по всему миру?
- Как стать мудрецом?
- Как правильно установить FreeBSD
- Как стать таким как Путин?
- Где лучше жить - в Димитровграде или в Ульяновске?
- Почему город Димитровград так называется?
- Что такое метамодерн?
- ВАЖНО! Временное ограничение движения автотранспортных средств в Димитровграде
- Тарифы на электроэнергию для майнеров предложено повысить
Итак, основная идея такова: когда приложению надо выполнить одно из действий PAM, оно обращается к библиотеке PAM. Затем библиотека по очереди вызывает все модули в этом стеке. Каждый модуль «делает свое дело» и возвращает библиотеке положительный или отрицательный результат. Библиотека объединяет результаты модулей в результат для стека в целом, который возвращается приложению. Способ объединения определяется управляющим флажком модуля, прописанным во втором поле строки в файле настроек. Возможные значения флажка:
- requisite Если модуль завершается с ошибкой, PAM немедленно возвращает приложению ошибку, другие модули стека не вызываются.
- required Если модуль завершается с ошибкой, PAM возвращает ошибку приложению, но продолжает вызывать остальные модули стека. (Кто не в силах запомнить разницу между requisite и required, вступайте в спецклуб! Я уже в нем…)
- sufficient Если модуль завершается успешно, PAM возвращает приложению результат «выполнен», и остальные модули стека не вызываются. (Конечно, предполагается, что никакой модуль с флажком required выше в стеке не отказал.)
- optional Результат работы модуля (выполнен/ошибка) игнорируется. Обычно это означает, что модуль вызывается для выполнения некой операции, не имеющей отношения к принятию решения «пропустить/отказать» для всего стека. Например, модуль pam_keyinit — «необязательный» модуль для sshd, он создает новый «ключ сессии» для нового пользователя.
- Метамодернизм в позднем творчестве В.Г. Сорокина
- ЛитРПГ - последняя отрыжка постмодерна
- "Ричард III и семиотика"
- 3D-визуализация обложки Ridero создаем обложку книги при работе над самиздатом.
- Архитектура метамодерна - говоря о современном искусстве, невозможно не поговорить об архитектуре. В данной статье будет отмечено несколько интересных принципов, характерных для построек "новой волны", столь притягательных и скандальных.
- Литература
- Метамодерн
- Рокер-Прометей против изначального зла в «Песне про советскую милицию» Вени Дркина, Автор: Нина Ищенко, к.ф.н, член Союза Писателей ЛНР - перепубликация из журнала "Топос".
- Как избавиться от комаров? Лучшие типы ловушек.
- Что делать если роблокс вылетает на windows
- Что делать, если ребенок смотрит порно?
- Почему собака прыгает на людей при встрече?
- Какое масло лить в Задний дифференциал (мост) Visco diff 38434AA050
- О чем может рассказать хвост вашей кошки?
- Верветки
- Отчетность бюджетных учреждений при закупках по Закону № 223-ФЗ
- Срок исковой давности как правильно рассчитать
- Дмитрий Патрушев минсельхоз будет ли преемником Путина
- Кто такой Владислав Поздняков? Что такое "Мужское Государство" и почему его признали экстремистским в России?
- Как правильно выбрать машинное масло в Димитровграде?
- Как стать богатым и знаменитым в России?
- Почему фильм "Пипец" (Kick-Ass) стал популярен по всему миру?
- Как стать мудрецом?
- Как правильно установить FreeBSD
- Как стать таким как Путин?
- Где лучше жить - в Димитровграде или в Ульяновске?
- Почему город Димитровград так называется?
- Что такое метамодерн?
- ВАЖНО! Временное ограничение движения автотранспортных средств в Димитровграде
- Тарифы на электроэнергию для майнеров предложено повысить
(Последние версии PAM поддерживают получение более подробного результата выполнения модуля, чем просто «выполнен/ошибка», и более сложный синтаксис для задания способа объединения отдельных результатов. Подробности можно найти на man-странице pam.conf, если она есть. Однако и этого простейшего отчета вполне достаточно.) В качестве управляющего флажка также может использоваться ключевое слово include. Эта ситуация немного отличается от других. Она предписывает PAM подключить некоторый предопределенный стек модулей (в терминах программирования это можно назвать вызовом подпрограммы). Это позволяет «вынести за скобку» наиболее общие действия PAM (например, общие стеки модулей), в отдельный файл. Например, в RHEL5 вы заметите, что во многих файлах конфигурации PAM подключен стек, определенный в файле system-auth. В Ubuntu 7.04 имеются четыре файла для аналогичной цели: common-auth, common-account, common-session и common-passwd. В Red Hat также есть своего рода «метамодуль» pam_stack, который выполняет стек модулей, определенных в отдельном файле.
Теперь, получив представление о том, как модули PAM связаны друг с другом, вы, возможно, захотите взглянуть на большую таблицу в конце этой статьи, где описаны модули, используемые чаще всего. Учтите, что некоторых модулей может не быть в вашем дистрибутиве, и, наоборот, вам могут попасться модули, которых нет в этой таблице. Поскольку Linux — открытая система и прочее, ребята понаписали всяких-разных модулей PAM. Некоторые ссылки можно найти на странице http://www.kernel.org/pub/linux/libs/pam/modules.html.
Ниже приведены шесть экспериментов с изменением настроек PAM. Ни один из них сам по себе особенно не впечатляет, но я надеюсь, что они придадут вам достаточно уверенности в себе и понимания работы PAM, чтобы начать свои собственные эксперименты.
- Метамодернизм в позднем творчестве В.Г. Сорокина
- ЛитРПГ - последняя отрыжка постмодерна
- "Ричард III и семиотика"
- 3D-визуализация обложки Ridero создаем обложку книги при работе над самиздатом.
- Архитектура метамодерна - говоря о современном искусстве, невозможно не поговорить об архитектуре. В данной статье будет отмечено несколько интересных принципов, характерных для построек "новой волны", столь притягательных и скандальных.
- Литература
- Метамодерн
- Рокер-Прометей против изначального зла в «Песне про советскую милицию» Вени Дркина, Автор: Нина Ищенко, к.ф.н, член Союза Писателей ЛНР - перепубликация из журнала "Топос".
- Как избавиться от комаров? Лучшие типы ловушек.
- Что делать если роблокс вылетает на windows
- Что делать, если ребенок смотрит порно?
- Почему собака прыгает на людей при встрече?
- Какое масло лить в Задний дифференциал (мост) Visco diff 38434AA050
- О чем может рассказать хвост вашей кошки?
- Верветки
- Отчетность бюджетных учреждений при закупках по Закону № 223-ФЗ
- Срок исковой давности как правильно рассчитать
- Дмитрий Патрушев минсельхоз будет ли преемником Путина
- Кто такой Владислав Поздняков? Что такое "Мужское Государство" и почему его признали экстремистским в России?
- Как правильно выбрать машинное масло в Димитровграде?
- Как стать богатым и знаменитым в России?
- Почему фильм "Пипец" (Kick-Ass) стал популярен по всему миру?
- Как стать мудрецом?
- Как правильно установить FreeBSD
- Как стать таким как Путин?
- Где лучше жить - в Димитровграде или в Ульяновске?
- Почему город Димитровград так называется?
- Что такое метамодерн?
- ВАЖНО! Временное ограничение движения автотранспортных средств в Димитровграде
- Тарифы на электроэнергию для майнеров предложено повысить
[править] Часть 2: Экспериментируем с PAM
[править] Позволим всем пользователям переключаться в root без пароля через su.
Что делать: Замените все строки файла /etc/pam.d/su, относящиеся к стеку auth, единственной строкой:
auth sufficient pam_permit.so
Как проверить: Зайдите в систему как обычный пользователь и проверьте, что можете переключиться в root с помощью su без ввода пароля. Это может показаться рисковым, но все же менее опасно, чем разрешить пользователям сразу заходить в систему с привилегиями администратора. Например, вы можете зайти в систему как обычный пользователь, а затем выполнить команду
$ su -c "date 09201155"
чтобы установить системное время (действие, требующее привилегий администратора).
[править] Запретим всем пользователям использовать su
Что делать: Оставьте в файле /etc/pam.d/su только одну строку, относящуюся к стеку auth:
auth requisite pam_deny.so
Как проверить: Зайдите в систему как обычный пользователь и убедитесь, что переключения в режим администратора не происходит: у вас даже не спрашивают пароль. Конечно, можно запретить su, и сняв права на выполнение файла самой программы. Хотя отключение su на первый взгляд повышает безопасность системы, на деле вы вынуждаете администратора всегда заходить в систему как root, вместо кратковременного переключения в root для действий с высшими привилегиями.
[править] Разрешим su только пользователям из некоторой группы
Что делать: Для начала нам нужен хотя бы один пользователь в этой группе — назовем ее, например, wheel. Чтобы добавить пользователя chris в группу wheel, выполните следующую команду от имени администратора:
# usermod -G wheel chris
Теперь отредактируйте файл /etc/pam.d/su, чтобы стек auth выглядел следующим образом:
auth sufficient pam_rootok.so auth required pam_wheel use_uid auth include system-auth
Как проверить: Зайдите в систему как chris (или как любой другой пользователь из группы wheel) и попробуйте использовать su. Будет запрошен пароль администратора, после чего должен открыться сеанс администратора. Теперь попробуйте зайти в систему под другим пользователем — не членом группы wheel, и сделать то же самое. Снова будет запрошен пароль администратора, но переключиться в сеанс root не удастся. Можете попробовать изменить управляющий флажок для модуля pam_wheel в requisite — для этого измените строку в файле /etc/pam.d/su:
auth requisite pam_wheel use_uid
Вопрос на засыпку: какое произойдет изменение? Проверьте себя. Ну что, начали понимать, как настройки PAM формируют политику безопасности?
[править] Запретим вход в систему как root
Идея здесь в том, чтобы пользователи не могли войти в систему как администраторы: то есть зайти в систему придется как обычному пользователю, а затем переключиться в режим root с помощью su. (Предварительно убедитесь, что есть хотя бы один пользователь, имеющий на это право, не то вы заблокируете компьютер.) Нам нужно запретить вход как на виртуальные терминалы, так и на графический рабочий стол.
Что делать: Чтобы запретить вход на виртуальные терминалы, добавьте в файл /etc/pam/d/login строку
auth required pam_securetty.so
на верхушку стека auth (может быть, она уже есть там). Как мы уже видели, этот модуль запрещает вход в систему от имени root на терминалах, которых нет в списке /etc/securetty. Теперь мы можем очистить этот список с помощью пары команд:
# cp /etc/securetty /etc/securetty.saved # echo "" > /etc/securetty
(Обратите внимание, что пустой файл /etc/securetty и отсутствие этого файла — совсем не одно и то же. В первом случае запрещается вход под root на все терминалы, а во втором, наоборот, разрешается.) Далее, чтобы запретить вход от имени root в графический рабочий стол, добавьте ту же самую строку в стек auth в файле /etc/pam.d/gdm.
Как проверить: Попытайтесь зайти в систему как root (с правильным паролем) — и через виртуальный терминал, и через графический рабочий стол. Обе попытки должны потерпеть неудачу. Убедитесь, что вы можете зайти в систему как обычный пользователь. Обратите внимание, что если прибавить к этому Эксперимент 3, безопасность системы существенно повысится, потому что для получения доступа администратора придется сначала зайти в систему как пользователь из группы wheel, а затем открыть сеанс администратора через su. Даже пронюхав пароль администратора, взломщик не получит его привилегий.
[править] Используем сложные пароли
В этом эксперименте мы используем модуль pam_passwdqc стека password, чтобы заставить пользователей назначать сложные пароли. (Это сработает только в том случае, когда пользователь задает или изменяет свой пароль, и не позволит выявить «слабости» уже действующих паролей.)
Приемлем ли пароль?
Пароль | Длина | Tипов символов | ОК? |
---|---|---|---|
monpiastoria | 12 | 1 | Да |
LinuxFormat | 11 | 2 | Да |
beld*Grob | 9 | 3 | Да |
4Me+You | 7 | 4 | Да |
splodgerat | 10 | 1 | Нет |
Four+five | 9 | 2 | Нет † |
gosH!!2 | 7 | 3 | Нет * |
x4Z! | 4 | 4 | Нет |
Что делать: В Red Hat для проверки длины паролей уже используется модуль pam_cracklib, вызываемый из файла system-auth. Нам просто нужно заменить строку pam_cracklib следующей строкой:
password requisite pam_passwdqc.so min=12,10,10,8,6 retry=3
Рис. 3 иллюстрирует параметры модуля pam_passwdqc. Качество пароля определяется его длиной, и в зависимости от количества типов символов, используемых в пароле, можно задать разные значения минимальной длину пароля. Существуют четыре типа символов: буквы нижнего и верхнего регистров, цифры и остальные символы. Заглавная буква в первом символе и цифра в последнем символе не в счет.
Как проверить: Попробуйте изменить свой пароль. Задавайте разные строки и в каждом случае подсчитывайте общее число символов и число типов символов, предполагая, что пароль должен быть приемлемым. Несколько примеров приведены во врезке «Допустим ли пароль?».
[править] Запретим обычным пользователям выключать систему
Во многих системах обычным пользователям (не администраторам) дозволено выключать или перезагружать систему с помощью команд halt, shutdown и reboot — для рабочей машины предприятия, пожалуй, не лучшая идея. В данном эксперименте мы изменим конфигурацию PAM для этих команд, чтобы один лишь root мог выключать компьютер.
Что делать: Откройте файл настроек PAM для команды halt (/etc/pam.d/halt). В моем Red Hat стек auth для команды halt выглядит так:
auth sufficient pam_rootok.so auth required pam_console.so
Измените его следующим образом:
auth sufficient pam_rootok.so auth required pam_deny.so
Как проверить: Зайдите в систему как обычный пользователь и попробуйте остановить систему командой halt. У вас больше не должно этого получаться. Для полноты решения внесите те же изменения в файлы настроек для команд shutdown и reboot.
'Д-р Крис Браун — автор книги SUSE Linux: A Complete Guide to Novell’s Community Distribution (Издательство «O’Reilly», 2006). Некоторые главы можно найти на странице http://www.oreilly.com/catalog/suselinux/. LXF
[править] Часто используемые модули РАМ
Модуль | Действие | Описание |
---|---|---|
pam_unix | auth, session, password | Выполняет аутентификацию в традиционном стиле Unix, используя хэши паролей, которые хранятся в /etc/shadow. Включен в файлы настроек PAM многих приложений, непосредственно или с помощью директивы include. |
pam_limits | session | Устанавливает ограничения на системные ресурсы, отпускаемые на время пользовательского сеанса. По умолчанию эти ограничения берутся из файла /etc/security/limits.conf; здесь можно задать «жесткие» и «мягкие» границы для таких параметров, как максимальное число процессов, максимальный размер файла, процессорное время и т. д.) |
pam_rootok | auth | Завершается успешно, если вы — администратор системы, и возвращает ошибку в противном случае. Обычно используется в сочетании с другими модулями аутентификации для реализации правила «Если вы администратор, можете продолжить и выполнить действие, если нет — необходима авторизация». Стек для этой политики может выглядеть так:
auth sufficient pam_rootok.so auth required pam_unix.so
|
pam_cracklib | password | Проверяет качество пароля, затем еще раз проверяет пароль по системному словарю и ряду правил «плохого подбора пароля». Этот модуль обычно используется в стеке password, чтобы проверить качество пароля перед передачей его следующему модулю стека (обычно pam_unix), который обновляет пароль. |
pam_passwdqc | password | Альтернативный модуль для проверки качества пароля, который поддерживает словосочетания (pass phrases) и может генерировать случайные пароли. Как и pam_cracklib, этот модуль обычно используется в стеке password для проверки качества пароля перед его обновлением. Подробный пример приведен в эксперименте 5. |
pam_permit | auth, account, session, password | Всегда говорит «да» и возвращает успешный результат выполнения. |
pam_deny | auth, account, session, password | Всегда говорит «нет» и возвращает ошибку. Обычно он используется только в самом низу стека для гарантированного статуса «ошибка». |
pam_warn | auth, account, session, password | Просто отправляет сообщение (включая имя сервиса, терминал, имя пользователя и удаленный хост) службе журнала syslogd. Может быть использован, например, ближе к нижней части стека PAM для записи в журнал информации о неудавшихся попытках аутентификации как раз перед тем, как модуль pam_deny отклонит их. |
pam_motd | session | Выводит «приветствие дня» (по умолчанию это файл /etc/motd), обычно после успешного входа в систему. |
pam_securetty | aurg | Нет, это не опечатка в слове «security». Модуль pam_securetty разрешает вход в систему от имени root только с «безопасных терминалов» («secure terminals»), перечисленных в файле /etc/securetty. (Запомните, tty на языке Linux означает «терминальное устройство»). Модуль никак не влияет на вход в систему для остальных пользователей. Этот способ управления доступом имел больше смысла в те дни, когда Unix работал на многопользовательских мини-компьютерах с 20 терминалами, включенными в порты RS-232; файл securetty мог использоваться для ограничения входа от имени root терминалом, запертым в офисе системного администратора. Однако он способен послужить и для полного запрета входа в систему под пользователем root… К этой идее мы еще вернемся в тексте. |
pam_wheel | auth, account | Используется программами типа su. Этот модуль разрешает администраторский доступ только пользователям, включенным в группу wheel. (Историческая справка: Использование названия «wheel» для группы привилегированных пользователей уходит корнями в давние времена. Оно точно было в ранних версиях Unix, и пришло, если верить файлу жаргона (http://www.catb.org/jargon/index.html, из ОС Twenex, распространенной в шестидесятых годах. Но я понятия не имею, почему ее называют «wheel».) |
pam_winbind | auth | Аутентифицирует пользователей в соответствии с учетными данными домена Windows путем взаимодействия с демоном winbind (который, в свою очередь, взаимодействует с контроллером домена Windows). Это важный компонент для ситуаций, когда вы добавляете Linux в существующую инфраструктуру на базе Windows и хотите поддерживать между этими системами общую базу данных учетных записей пользователей. |
pam_nologin | auth, account | Запрещает пользователям (кроме root) вход в систему, если существует файл /etc/nologin. В некоторых дистрибутивах этот файл создается программой shutdown, чтобы запретить вход в систему во время ее остановки. |