Пароль аутентификации для линукс

IgorKa — Информационный ресурс

Немного обо всем и все о немногом, или практический опыт системного администратора.

Март 2010
Пн Вт Ср Чт Пт Сб Вс
« Фев Апр »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31

Лекция №29 — Аутентификация в Linux. Система PAM

Linux — это многопользовательская среда и чтобы пользователь мог начать работу в системе ему нужно пройти процедуру аутентификации. PAM (Pluggable Authentication Modules) — это система (механизм), которая берет на себя работу по реализации процедур аутентификации. До появления PAM, разработчикам программ, которые были так или иначе связаны с аутентификацией, приходилось подстраивать свою программу под существующие механизмы аутентификации. Соответственно если менялись механизмы аутентификации, значит нужно было менять и программы которые использовали их. Поэтому была разработана система PAM, которая является “прослойкой” между программами и механизмами аутентификации. То есть теперь программы аутентификации (например, программа login) должны всего лишь уметь работать с системой PAM. Программа передает PAM параметры (например логин и пароль) и ее (программу) уже не “интересует” какой способ аутентификации реализован в системе — аутентификация по паролу или смарт-карте или другой способ. Дальше работает PAM и возвращает программе или успех или отказ.

Посмотрим на систему PAM подробнее. Основные функции, или действия, или задачи которые выполняет система PAM — разбиты на четыре группы которые имеют определенные названия:

группа auth — это действия связанные непосредственно с аутентификацией. То есть действия или функции которые позволяют определить, что вы это вы. Это может быть аутентификация по паролю, по смарт-карте, биометрическая аутентификация (отпечаток пальца и т.д.) и другие.

группа account — это действия связанные с управлением учетными записями. Например, даже если вы аутентифицировались в системе, то вашей учетной записи можно поставить запрет на работу в определенное время суток. Или разрешить заходить в консольном режиме, но запретить заходить в графическом режиме. И т.д.

группа session — действия этой группы осуществляют выделение пользователю необходимых для работы ресурсов. Самый простой пример — это разрешение на монтирование каталогов.

группа password — действия, которые реализуют изменение аутентификационных данных пользователя. Чаще всего это действия по управлению паролями пользователя.

Все эти действия или процедуры (функции) реализованы в виде отдельных модулей, которые расположены в каталоге /lib/security/. То есть можно сказать, есть модули группы auth, модули группы account и т.д. Соответственно система PAM является модульной и если вам необходимо реализовать биометрическую аутентификацию, то необходимо просто установить модуль, которых может это процедуру выполнить.

Основной конфигурационный файл системы PAM — это файл /etc/pam.conf. Кроме файла /etc/pam.conf, настройки PAM хранятся в файлах каталога /etc/pam.d/. Внутри каталога находятся текстовые файлы которые содержат в себе последовательность действий (некий алгоритм) для программ которые используют PAM. Например, файл /etc/pam.d/login содержит алгоритм работы системы PAM для программы login, а файл /etc/pam.d/passwd для программы passwd.

Рассмотрим сначала формат файла /etc/pam.conf. Файл состоит из строк. Файл может состоять из одной строки, а может из нескольких строк складываясь в цепочку последовательных действий. Каждая строка описывает одно правило или один шаг такой цепочки (алгоритма). Строка состоит из четырех полей. Первое поле это имя программы к которой относится данный шаг. Второе поле, это тип действия (auth, account, session, password). Третье поле это поле в котором задается поведение системы PAM после завершения этого шага на этом шаге алгоритма (чуть ниже остановимся подробнее на этом вопросе). Четвертое поле — это имя файла модуля. Также в строке могут присутствовать некоторые параметры передаваемые модулю.

Структура файлов находящихся в каталоге /etc/pam.d/, такая же. Отличие только в отсутствии первого поля — имени. Так как имя программы берется из имени самого файла. Посмотрим на пример такого файла. Назовем его testpam.

Рассмотрим первую строку. Поле auth говорит, что первым шагом будет аутентификация. Третье поле — это модуль, который будет выполнять аутентификацию и возвращать результат выполнения. В данном примере модуль pam_rootok.so проверяет является ли учетная запись рутом (root). Если, да то будет возвращен успех (true), если нет, то будет возвращена ошибка или отказ (false). Второе поле — это реакция или влияние полученного результата на цепочку в целом.

Реакция может быть четырех типов: required, requisite, optional, sufficient. На примере строки auth sufficient pam_rootok.so рассмотрим, что означают эти значения.

Если во втором поле установлено значение requisite, то это означает, что если модуль pam_rootok.so завершился с ошибкой, то дальнейшее выполнение файла testpam прерывается и система PAM возвращает приложению ошибку. Если модуль вернул положительные результат, то выполнение цепочки продолжается.

required похож на requisite. Если модуль pam_rootok.so завершился с ошибкой, то PAM также вернет, ошибку, но после того как будут выполнены остальные модули, то есть цепочка не прерывается. Если модуль вернул положительные результат, то выполнение цепочки продолжается.

sufficient — если модуль pam_rootok.so вернул успех, то система PAM возвращает приложению успех, и дальнейшее выполнение цепочки прерывается. Если неудача, то продолжается выполнение цепочки.

optional — этот параметр никак не влияет на ход цепочки. Указывается для тех модулей которые не выполняют никаких проверочных действий. Если в файле будут только строки с параметром optional, то PAM вернет приложению успех.

Более подробно о системе PAM и назначении той или иной библиотеки можно прочитать на сайте http://kernel.org/pub/linux/libs/pam/Linux-PAM-html/Linux-PAM_SAG.html. Сейчас выполним небольшое практическое упражнение которое позволить лучше понять как работает система PAM и как составлять конфигурационные файлы.

Перейдите в каталог /etc/pam.d/. Скопируйте файл su в домашнюю директорию (чтобы можно было восстановить его) и удалите файл в su из директории /etc/pam.d/. Попробуйте теперь выполнить команду su в терминале чтобы перейти в режим суперпользователя. После ввода пароля система выдаст ошибку аутентификации, так как отсутствует конфигурационный файл для программы su.

Создаем файл /etc/pam.d/su и пишем в нем такую строку:

Сохраняем файл. Пробуем снова выполнить команду su, и видим, что теперь мы становимся суперпользователем без запроса пароля. Это произошло потому, что модуль pam_permit.so всегда возвращает положительный результат, sufficient тут же прерывает выполнение цепочки и система PAM возвращает положительный результат. Отредактируем файл к следующему виду:

Модуль pam_deny.so всегда возвращает ошибку. Какой будет результат? Проверьте. А если заменить requisite на required?
Теперь напишем в файле следующее правило:

Теперь после выполнения команды su будет запрошен пароль пользователя root. Если пароль ввести правильно, то вы станете рутом, если пароль будет неверный, то останетесь обычным пользователем. Теперь добавим в файл еще одну строку, так чтобы получились следующие правила:

Модуль pam_wheel.so возвращает успех если учетная запись пользователя принадлежит группе wheel. Если попробовать сейчас выполнить команду su, то она тут же завершиться с ошибкой. То есть сейчас команду su смогут выполнить только пользователи, который входят в группу wheel и знают пароль учетной записи root. Если создать группу wheel и добавить туда свою учетную запись, то команда su сработает.

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

Хочу еще раз подчеркнуть, что конфигурационные файлы в каталоге /etc/pam.d/ можно создавать только для файлов которые используют систему PAM. Например, если создать файл /etc/pam.d/ls со строкой auth requisite pam_deny.so, то команда ls все равно будет выполнятся так как она не использует систему PAM. Чтобы проверить использует ли команда систему PAM можно использовать команду ldd, которой в качестве параметра передается полный путь к файлу команды. Например:

Команда ldd покажет какие библиотеки использует программа и если в перечне есть libpam.so.0, libpam_misc.so.0 значит программа использует систему PAM.

В завершении хочу еще упомянуть о таком файле как /etc/nsswitch.conf. Первые три строки этого файла как раз и задают какая система аутентификации будет работать в системе:

Ключевое слово compat как раз и “говорит” о том что в качестве системы аутентификации, будет использована система PAM.

И еще. Будьте осторожны в экспериментах с PAM. По незнанию или неосторожности можно запросто заблокировать свою систему. Поэтому перед тем как что-то менять обязательно сохраните исходные конфигурационные файлы, чтобы в случае проблем можно было их быстро восстановить.

Источник

Как настроить двухфакторную аутентификацию для логина и sudo

Безопасность в моде, как это и должно быть. Мы живем в мире, где данные — невероятно ценная валюта, которую вы всегда рискуете потерять. Поэтому вы должны сделать все, чтобы убедиться, что то, что вы держите на серверах и десктопах — в безопасности. Для этого администраторы и пользователи создают невероятно сложные пароли, используют менеджеры паролей и т.д. Но что, если я вам скажу, что вы можете логиниться на ваши серверы и десктопы Linux за два шага, вместо одного? Вы можете это делать благодаря Google Authenticator. Более того, это невероятно легко настроить.

Я собираюсь провести вас через процесс настройки двухфакторной аутентификации для использования ее на логине и sudo. Я продемонстрирую это на десктопной Ubuntu 16.04, но процесс также работает и для сервера. Чтобы справиться с двухфакторной стороной вещей, я буду использовать Google Authenticator.

Есть одно очень важное предостережение: однажды настроив это, вы не сможете зайти в аккаунт (или использовать команду sudo) без шестизначного кода из аутентификатора. Для вас добавляется еще один шаг, поэтому, если доставать смартфон каждый раз, когда вам необходимо залогиниться на вашу Linux-машину (или использовать sudo), является для вас проблемой, возможно, этот способ не для вас. Но помните, как бы там ни было, этот дополнительный шаг приносит вам дополнительный слой защиты, которого бы иначе не было.

После сказанного, давайте займемся настройкой.

Установка необходимых компонентов

Есть два кусочка этого пазла, которые должны быть установлены вместе в виде Google Authenticator. Первый — это приложение для смартфона. Вот как можно установить его из Google Play Store:

  1. Откройте Google Play Store на вашем Android-устройстве
  2. Найдите через поиск «google authenticator«
  3. Тапните по наименованию от компании Google Inc.
  4. Тапните «Установить»
  5. Тапните «Принять»
  6. Дождитесь завершения установки

Теперь давайте переместимся к установке аутентификатора на вашей linux-машине. Вот так:

  1. Открыть окно терминала
  2. Выполнить команду sudo apt-get install libpam-google-authenticator
  3. Введите свой sudo-пароль и нажмите Enter
  4. Если будет предложено, введите y и нажмите Enter
  5. Дождитесь завершения установки

Теперь пришло время конфигурирования процесса аутентификации для работы с google-authenticator.

Конфигурация

Нужно отредактировать всего лишь один файл, чтобы добавить двухфакторную аутентификацию сразу для логина и sudo. Это файл /etc/pam.d/common-auth. Откройте его и найдите строку:

Над этой строкой добавьте следующее:

Сохраните и закройте файл.

Следующий шаг — настроить google-authenticator для каждого пользователя в системе (иначе они не смогут залогиниться). Для примера, предположим, что в вашей системе есть два пользователя: jack и olivia. Сперва настроим его для jack (предположим, что это аккаунт, с которым мы работали все это время).

Откройте окно терминала и выполните команду google-authenticator . Вам зададут ряд вопросов (на каждый из которых следует ответить y). Вопросы такие:

  • Хотите ли вы, чтобы я обновил ваш файл «/home/jack/.google_authenticator»? (y/n) y
  • Хотите ли вы запретить множественное использование одного и того же токена? Это ограничивает вас до одной попытки входа примерно раз в 30 секунд, но увеличивает шансы заметить или даже предотвратить атаку человек-посередине. (y/n) y
  • По умолчанию, токены хороши для 30 секунд, а чтобы компенсировать возможные перекосы времени между клиентом и сервером, мы предоставляем дополнительный токен до и после текущего времени. Если вы испытываете проблемы с некачественной синхронизацией времени, вы можете увеличить окно с его дефолтного значения 1:30 мин., до примерно 4 мин. Хотите это сделать? (y/n) y
  • Если ваш компьютер, на который вы логинитесь, не защищен от брутфорс-попыток залогиниться, вы можете включить частотное ограничение для модуля аутентификации. По умолчанию, это ограничивает атакующих на не более чем 3 попытки залогиниться каждые 30 секунд. Хотите включить частотное ограничение? (y/n) y

Ответив на эти вопросы, вам будет предоставлен секретный ключ, код верификации и пять аварийных скрэтч-кодов. Распечатайте скрэтч-коды и храните их при себе. Эти коды могут быть использованы, если у вас нет при себе вашего смартфона (каждый код может быть использован только один раз). Секретный ключ — это то, что вы используете для настройки аккаунта в приложении Google Authenticator, а код верификации — это одноразовый код, который вы можете использовать немедленно (если необходимо).

Настройка приложения

Теперь у вас есть настроенный пользователь jack. Перед тем, как вы сможете настроить пользователя olivia, вам необходимо добавить аккаунт для jack в приложение Google Authenticator. Откройте приложение и тапните кнопку меню из главного окна (три вертикальные точки в верхнем правом углу). Тапните «Настроить аккаунт», а затем тапните «Введите ключ». В следующем окне (Изображение 1) вы введете 16-значный секретный ключ, предоставленный во время выполнения приложения google-authenticator. Дайте аккаунту имя (так вы запомните на каком аккаунте он будет использоваться) и тапните «ДОБАВИТЬ».


Изображение 1: Добавление нового аккаунта в приложение Google Authenticator.

Теперь, после добавления аккаунта, вам будут представлены шестизначные ключи, которые будут требоваться каждый раз при логине или попытке использовать sudo.

Наконец, вы должны настроить другие аккаунты в системе. Как я и говорил, мы собираемся настроить аккаунт под названием olivia. Вот так:

  1. Откройте окно терминала
  2. Выполните команду sudo su olivia
  3. Откройте Google Authenticator на вашем смартфоне
  4. Введите шестизначный код аутентификации (предоставленный приложением) в окне терминала (Изображение 2) и нажмите Enter
  5. Введите свой sudo-пароль и нажмите Enter
  6. Как новый пользователь, выполните команду google-authenticator , ответьте на вопросы и запишите предоставленные ключи и коды

После того как вы успешно настроили пользователя olivia с помощью команды google-authenticator, добавьте новый аккаунт в приложении Google Authenticator с соответствующей пользовательской информацией (так же, как вы делали для начального пользователя). Теперь у вас должны быть аккаунты для обоих пользователей jack и olivia в приложении Google Authenticator.


Изображение 2: Ввод шестизначного кода аутентификации для sudo.

Вот и все. Каждый раз при попытке залогиниться на свою машину (или использовать sudo), вам потребуется предоставить шестизначный код аутентификации, перед тем как вы сможете ввести свой пользовательский пароль. Ваша Linux-машина теперь гораздо более защищена, чем это было до двухфакторной аутентификации. Несмотря на то, что некоторым этот процесс может показаться хлопотным, я настоятельно рекомендую ее настроить… особенно для машин с чувствительными данными.

Источник

Читайте также:  Punto switcher windows 10 для чего
Оцените статью