Как настроить многофакторную аутентификацию в Ubuntu 18.04

_Автор выбрал Electronic Frontier Foundation, чтобы получить пожертвование как часть Write для DOnations программа.

Вступление

Двухфакторная аутентификация (2FA) - это метод аутентификации, который требует ввода более чем одной части информации для успешного входа в учетную запись или устройство. В дополнение к вводу комбинации имени пользователя и пароля, 2FA требует, чтобы пользователь вводил дополнительную информацию, такую ​​как единственный пароль (OTP), например шестизначный проверочный код.

В целом, 2FA требует от пользователя ввода информации разных типов:

  • То, что пользователь knows, например, пароль

  • Что-то, что пользователь has, такой как код проверки, сгенерированный из приложения аутентификатора

2FA является подмножеством многофакторной аутентификации (MFA), которая, помимо того, что пользователь знает, и того, что у него есть, требует чего-то, что пользователь is. Это случай биометрии, в которой используются такие технологии, как распознавание отпечатков пальцев или голоса.

2FA помогает усилить процесс аутентификации для определенной службы или устройства: даже если пароль был скомпрометирован, злоумышленнику также потребуется доступ к устройству пользователя, в котором находится приложение-аутентификатор, используемое для генерации кодов безопасности. По этой причине многие онлайн-сервисы (inclusive DigitalOcean) предлагают возможность включения 2FA для учетных записей пользователей для повышения безопасности учетных записей, когда дело доходит до проверки подлинности. фаза.

В этом руководстве вы сконфигурируете 2FA для пользователя без полномочий root в установке Ubuntu 18.04 с модулем Google PAM. Поскольку вы настраиваете 2FA для пользователя без полномочий root, вы все равно сможете получить доступ к машине из своей учетной записи * root * в случае блокировки. Учебное пособие будет достаточно общим, чтобы его можно было применять как к серверам, так и к настольным установкам, как локальным, так и удаленным.

Предпосылки

Прежде чем начать это руководство, вам понадобится следующее:

  • Один сервер Ubuntu 18.04 или среда рабочего стола. Если вы используете сервер Ubuntu, настройте его, следуя руководству Ubuntu 18.04 начальная настройка сервера, включая пользователя без полномочий root с правами sudo и брандмауэром.

  • Приложение проверки подлинности, установленное на вашем мобильном устройстве, с помощью которого вы можете сканировать QR-коды 2FA, например Google Authenticator или Authy.

Шаг 1 - Установка модуля Google PAM

Чтобы настроить 2FA в Ubuntu 18.04, вам необходимо установить Google PAM модуль для Linux. Pluggable Authentication Module (PAM) - это механизм аутентификации, используемый Linux. Вы будете использовать модуль PAM Google, чтобы ваш пользователь проходил аутентификацию через 2FA, используя сгенерированные Google коды OTP.

Сначала войдите в систему как пользователь без полномочий root, который вы настроили в предварительных условиях:

ssh @

Обновите репозитории Ubuntu, чтобы загрузить последнюю версию аутентификатора:

sudo apt-get update

Теперь, когда ваши репозитории обновлены, установите последнюю версию модуля PAM:

sudo apt-get install libpam-google-authenticator

Это очень маленький пакет без каких-либо зависимостей, поэтому его установка займет несколько секунд. В следующем разделе вы настроите 2FA для пользователя без полномочий root в системе.

Шаг 2 - Настройка 2FA для пользователя

Теперь, когда вы установили модуль PAM, вы запустите его, чтобы сгенерировать QR-код для вошедшего в систему пользователя. Это создаст код, но среде Ubuntu не потребуется 2FA, пока вы не включите его позже в этом руководстве.

Запустите команду + google-authenticator +, чтобы запустить и настроить модуль PAM:

google-authenticator

Команда выдаст подсказку, которая задаст вам несколько вопросов о конфигурации. Первый вопрос спросит, хотите ли вы, чтобы токены основывались на времени. Токены аутентификации на основе времени истекают через установленное время, которое по умолчанию составляет 30 секунд в большинстве систем. Токены на основе времени более безопасны, чем токены, которые не основаны на времени, и большинство реализаций 2FA используют их. Здесь вы можете выбрать любую из этих опций, но в этом руководстве вы выберете + Yes + для использования токенов аутентификации на основе времени:

OutputDo you want authentication tokens to be time-based (y/n)

После ответа на этот вопрос вы увидите несколько строк вывода на консоль:

  • QR-код: это код, который необходимо сканировать с помощью приложения-аутентификатора. После того, как вы отсканируете его, оно немедленно превратится в устройство, генерирующее код, которое будет создавать новый OTP каждые 30 секунд.

  • Ваш секретный ключ: это альтернативный способ настройки приложения аутентификации. Если вы используете приложение, которое не поддерживает сканирование QR, вы можете ввести секретный ключ для настройки приложения аутентификации.

  • Ваш проверочный код: это первый шестизначный проверочный код, который генерирует этот конкретный QR-код.

  • Ваши аварийные скретч-коды. Эти одноразовые токены, также известные как резервные коды, позволят вам пройти проверку подлинности 2FA, если вы потеряете устройство аутентификации. Храните эти коды в надежном месте, чтобы избежать блокировки учетной записи.

После того, как вы настроили свое приложение для проверки подлинности и сохранили свои резервные коды в безопасном месте, на экране появится запрос, хотите ли вы обновить файл конфигурации. Если вы выберете + n +, вам нужно будет снова запустить программу конфигурации. Вы введете + y +, чтобы сохранить изменения и двигаться вперед:

OutputDo you want me to update your "~/.google_authenticator" file (y/n)

Следующий вопрос спросит, хотите ли вы запретить использование кодов аутентификации более одного раза. По умолчанию вы можете использовать каждый код только один раз, даже если он остается действительным в течение 30 секунд. Это самый безопасный выбор, поскольку он предотвращает повторные атаки со стороны злоумышленника, которому каким-то образом удалось получить ваш код подтверждения после его использования. По этой причине более безопасно запретить использование кодов более одного раза. Ответьте + y +, чтобы запретить многократное использование одного и того же токена:

OutputDo you want to disallow multiple uses of the same authentication
token? This restricts you to one login about every 30s, but it increases
your chances to notice or even prevent man-in-the-middle attacks (y/n)

Следующий вопрос спрашивает, хотите ли вы, чтобы токены аутентификации принимались незадолго до или после их обычного срока действия. Коды подтверждения очень чувствительны ко времени, что означает, что ваши токены могут быть отклонены, если ваши устройства не синхронизированы. Эта опция позволяет обойти эту проблему, продлив срок действия кодов проверки по умолчанию, так что даже если ваши устройства временно не синхронизированы, ваши коды аутентификации будут приняты в любом случае. Лучше всего убедиться в том, что время на всех ваших устройствах одинаковое, так как выбор + yes + снизит безопасность вашей системы. Ответьте + n + на этот вопрос, чтобы не разрешить льготный период:

OutputBy default, tokens are good for 30 seconds and in order to compensate for
possible time-skew between the client and the server, we allow an extra
token before and after the current time. If you experience problems with poor
time synchronization, you can increase the window from its default
size of 1:30min to about 4min. Do you want to do so (y/n)

Последний вопрос спрашивает, хотите ли вы включить ограничение скорости для попыток входа в систему. Это не позволит делать более трех неудачных попыток входа в систему каждые 30 секунд, что является хорошей техникой усиления безопасности. Включите его, ответив + y +:

OutputIf the computer that you are logging into isn't hardened against brute-force
login attempts, you can enable rate-limiting for the authentication module.
By default, this limits attackers to no more than 3 login attempts every 30s.
Do you want to enable rate-limiting (y/n)

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

Шаг 3 - Активация 2FA в Ubuntu

Модуль Google PAM теперь генерирует коды 2FA вашего пользователя, но Ubuntu еще не знает, что ему нужно использовать коды как часть процесса аутентификации пользователя. На этом шаге вы обновите конфигурацию Ubuntu, чтобы потребовать токены 2FA в дополнение к обычному методу аутентификации.

На данный момент у вас есть два разных варианта:

  • Вы можете требовать 2FA каждый раз, когда пользователь входит в систему and каждый раз, когда пользователь запрашивает привилегии + sudo +.

  • Вы можете требовать 2FA только во время входа в систему, когда последующие попытки аутентификации + sudo + потребуют только пароль пользователя.

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

Требование 2FA для входа в систему и запросов sudo

Чтобы получить запрос 2FA во время входа в систему и последующих запросов на повышение привилегий, вам необходимо отредактировать файл + / etc / pam.d / common-auth +, добавив строку в конец существующего файла.

Файл + common-auth + применяется ко всем механизмам аутентификации в системе, независимо от используемой среды рабочего стола. Это также относится к запросам на аутентификацию, которые происходят after, когда пользователь входит в систему, например, во время запроса эскалации `+ sudo + 'при установке нового пакета из терминала.

Откройте этот файл с помощью следующей команды:

sudo nano /etc/pam.d/common-auth

Добавьте выделенную строку в конец файла:

/etc/pam.d/common-auth

...
# and here are more per-package modules (the "Additional" block)
session required    pam_unix.so
session optional    pam_systemd.so
# end of pam-auth-update config

Эта строка указывает системе аутентификации Ubuntu требовать 2FA при входе через модуль Google PAM. Опция + nullok + позволяет существующим пользователям войти в систему, даже если они не настроили аутентификацию 2FA для своей учетной записи. Другими словами, пользователи, которые настроили 2FA, должны будут ввести код аутентификации при следующем входе в систему, в то время как пользователи, которые не запустили команду + google-authenticator +, смогут войти в систему только со своим именем пользователя и паролем. пока они не настроят 2FA.

Сохраните и закройте файл после добавления строки.

Требование 2FA только для входа

Если вы хотите, чтобы 2FA запрашивался только при первом входе в систему в среде рабочего стола, вам нужно отредактировать файл конфигурации для используемого вами менеджера рабочего стола. Имя файла конфигурации обычно совпадает с именем среды рабочего стола. Например, файл конфигурации для + gdm +, среды рабочего стола Ubuntu по умолчанию, начинающейся после Ubuntu 16.04, это + / etc / pam.d / gdm +.

В случае безголового сервера, такого как дроплет DigitalOcean, вместо этого вы отредактируете файл + / etc / pam.d / common-session +. Откройте соответствующий файл в зависимости от вашей среды:

sudo nano

Добавьте выделенную строку в конец файла:

/etc/pam.d/common-session

#
# /etc/pam.d/common-session - session-related modules common to all services
#
...
# # and here are more per-package modules (the "Additional" block)
session required    pam_unix.so
session optional    pam_systemd.so
# end of pam-auth-update config

Это скажет Ubuntu требовать 2FA, когда пользователь подключается к системе через командную строку (локально или удаленно через SSH), но не во время последующих попыток аутентификации, таких как запросы + sudo +.

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

Шаг 4 - Тестирование 2FA

На предыдущем шаге вы настроили 2FA для генерации кодов каждые 30 секунд. На этом этапе вы протестируете 2FA, войдя в свою среду Ubuntu.

Сначала выйдите из системы и вернитесь в свою среду Ubuntu:

ssh @

Если вы используете аутентификацию на основе пароля, вам будет предложено ввести пароль пользователя:

OutputPassword:

Введите пароль, и вам будет предложено ввести код подтверждения 2FA:

OutputVerification code:

После ввода кода подтверждения вы будете авторизованы:

Output@: ~#

Если 2FA был включен только для входа в систему, вам больше не будет предложено ввести коды 2FA, пока не истечет время сеанса или вы не выйдете вручную.

Если вы включили 2FA через файл + common-auth +, вам будет предложено указать его при каждом входе в систему и запросе привилегий sudo:

Output@: ~# sudo -s

sudo password for :



root@:

На этом шаге вы подтвердили, что ваша конфигурация 2FA работает как положено. Если на этом этапе вам не предложили ввести коды подтверждения, вернитесь к третьему шагу руководства и подтвердите, что вы отредактировали правильный файл аутентификации Ubuntu.

Шаг 5 - Предотвращение блокировки 2FA

В случае утери или уничтожения телефона важно иметь надлежащие методы резервного копирования для восстановления доступа к вашей учетной записи с поддержкой 2FA. Когда вы настраиваете 2FA в первый раз, у вас есть несколько опций, чтобы вы могли восстановиться после блокировки:

  • Сохраните резервную копию ваших секретных кодов конфигурации в безопасном месте. Вы можете сделать это вручную, но некоторые приложения аутентификации, такие как Authy, предоставляют функции резервного кода.

  • Сохраните коды восстановления в безопасном месте, к которому можно получить доступ за пределами вашей среды с поддержкой 2FA.

Если по какой-либо причине у вас нет доступа к параметрам резервного копирования, вы можете предпринять дополнительные действия для восстановления доступа к локальной среде с поддержкой 2FA или удаленному серверу.

Шаг 6 - Восстановление после блокировки 2FA в локальной среде (необязательно)

Если у вас есть физический доступ к машине, вы можете загрузиться в режиме восстановления, чтобы отключить 2FA. Режим восстановления - это тип target (похожий на runlevel) в Linux, который используется для выполнения административных задач. Вам нужно будет отредактировать некоторые настройки в GRUB, который является загрузчиком по умолчанию в Ubuntu, чтобы войти в режим восстановления.

Чтобы получить доступ к GRUB, сначала перезагрузите компьютер:

reboot

Когда появится меню GRUB, убедитесь, что запись * Ubuntu * выделена. Это имя по умолчанию для установки 18.04, но может отличаться, если вы изменили его вручную после установки.

изображение: https: //assets.digitalocean.com/articles/CART-64052/grub_menu.png [Меню GRUB по умолчанию в Ubuntu 18.04]

Затем нажмите клавишу + e + на клавиатуре, чтобы отредактировать конфигурацию GRUB перед загрузкой вашей системы.

изображение: https: //assets.digitalocean.com/articles/CART-64052/grub_edit.png [Файл конфигурации GRUB в режиме редактирования]

В появившемся файле прокрутите вниз, пока не увидите строку, которая начинается с + linux + и заканчивается + $ vt_handoff +. Перейдите в конец этой строки и добавьте + systemd.unit = rescue.target +, убедившись, что вы оставляете пробел между + $ vt_handoff + и + systemd.unit = rescue.target +. Это скажет вашей машине Ubuntu загрузиться в режиме восстановления.

изображение: https: //assets.digitalocean.com/articles/CART-64052/grub_rescue.png [Редактирование файла конфигурации GRUB для включения режима обслуживания]

После внесения изменений сохраните файл с помощью комбинации клавиш + Ctrl + X +. Ваша машина перезагрузится, и вы окажетесь в командной строке. Нажмите + Enter, чтобы перейти в режим восстановления.

изображение: https: //assets.digitalocean.com/articles/CART-64052/rescue_mode.png [Запрос режима обслуживания командной строки в Ubuntu 18.04]

В режиме восстановления откройте файл конфигурации Google Authenticator. Это будет находиться в домашнем каталоге заблокированного пользователя:

nano /home//.google-authenticator

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

Теперь у вас есть два варианта:

  • Вы можете скопировать секретный ключ и настроить приложение для аутентификации.

  • Если вы хотите начать с чистого листа, вы можете полностью удалить файл + ~ / .google-authenticator, чтобы отключить 2FA для этого пользователя. После повторного входа в систему как пользователь без полномочий root вы можете еще раз настроить 2FA и получить новый секретный ключ.

В любом случае вы можете восстановить систему после блокировки 2FA в локальной среде с помощью загрузчика GRUB. На следующем шаге вы восстановитесь после блокировки 2FA в удаленной среде.

Шаг 7 - Восстановление из блокировки 2FA в удаленной среде (необязательно)

Если ваша учетная запись не-root sudoer заблокирована на удаленном компьютере, вы можете использовать пользователя * root * для временного отключения 2FA или перенастройки 2FA.

Начните с входа на свой компьютер с пользователем * root *:

ssh root@

После входа откройте файл настроек Google Authenticator, который находится в домашнем каталоге заблокированного пользователя:

sudo nano /home//.google_authenticator

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

Теперь у вас есть два варианта:

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

  • Если вы хотите начать с чистого листа, вы можете полностью удалить файл + / home //. Google_authenticator, чтобы отключить 2FA для этого пользователя. После входа в систему как пользователь без полномочий root вы можете еще раз настроить 2FA и получить новый секретный ключ.

При любом из этих вариантов вы смогли восстановиться после блокировки 2FA в локальной среде с помощью пользователя * root *.

Заключение

В этом руководстве вы настроили 2FA на компьютере с Ubuntu 18.04. С настройкой 2FA в вашей среде вы добавили дополнительный уровень защиты в свою учетную запись и сделали свою систему более безопасной. В дополнение к вашему традиционному методу аутентификации вам также потребуется ввести дополнительный код подтверждения для входа в систему. Это делает невозможным для злоумышленника, которому удалось получить ваши учетные данные, возможность войти в свою учетную запись без этого дополнительного кода подтверждения.

Related