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

Original author: Jack Wallen
  • Translation
  • Tutorial


Безопасность в моде, как это и должно быть. Мы живем в мире, где данные — невероятно ценная валюта, которую вы всегда рискуете потерять. Поэтому вы должны сделать все, чтобы убедиться, что то, что вы держите на серверах и десктопах — в безопасности. Для этого администраторы и пользователи создают невероятно сложные пароли, используют менеджеры паролей и т.д. Но что, если я вам скажу, что вы можете логиниться на ваши серверы и десктопы 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. Откройте его и найдите строку:

auth [success=1 default=ignore] pam_unix.so nullok_secure

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

auth required pam_google_authenticator.so

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

Следующий шаг — настроить 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-машина теперь гораздо более защищена, чем это было до двухфакторной аутентификации. Несмотря на то, что некоторым этот процесс может показаться хлопотным, я настоятельно рекомендую ее настроить… особенно для машин с чувствительными данными.

Similar posts

Ads
AdBlock has stolen the banner, but banners are not teeth — they will be back

More

Comments 86

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

    Это хабр или одноклассники?
      +19
      В одноклассниках написали бы «трогните» вместо «тапните» :)
        –1
        Это перевод.
          0

          Это не повод переводить шлак.

        –8
        Без ынтернета работать не будет.
        Для защиты от просто случайных любопытных достаточно обычного пароля.
        А для чувствительных данных есть truecrypt, veracrypt и т.д.
      • UFO just landed and posted this here
          +3
          Моветон — писать андроид через «й».
            0
            или утечёт через очередную из 100500 дырок

            Что утечёт?
            или батарейка сядет в самый ответственный момент

            Вы логинитесь на компьютере. Подключите USB шнур к нему и подзарядитесь. Шнурок-то не сложно с собой таскать.
              0
              Подключите USB шнур к нему и подзарядитесь.

              А у меня на телефоне сломан USB разъём. (Я вторую батарейку зарядником заряжаю и меняю. Без шуток.)

                +4
                Починить разъем не дешевле, чем покупать батарейку и каждый раз такое неудобство терпеть?
                  0

                  Смотрел — разъём напаян планарной пайкой (естественно), а я привык паять по-старинке — "в дырочки". "Неудобства" на 10 секунд — открыл крышку, сменил батарейку, закрыл крышку; заодно почти всегда есть запасная батарейка, что скорее преимущество.

              • UFO just landed and posted this here
                  +4
                  >В итоге: зачем с этим связываться?

                  Так не связывайтесь. Вас ведь не заставляют

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

                  По-моему, вы слишком много читали журнал хацкер.
                  И,… это,… а зачем вы их таких невменяемых ставите?
                  • UFO just landed and posted this here
                      +4
                      А вы попробуйте себе всякую дрянь не ставить (и хацкер не читать), глядишь, жизнь и наладится.
                      Кстати, я бы с удовольствием почитал описание типов атак, от которых вы так старательно бережётсь.
                      • UFO just landed and posted this here
                          +5
                          Мда. А ещё он грабит корованы…
                0
                есть менее безопасный и более дешёвый способ — использовать в качестве этого обычную флешку и настроить pam_usb
                  0
                  и как это поможет over ssh?
                  +2
                  >батарейка сядет в самый ответственный момент
                  Для этого есть резервные коды.
                  0

                  Как отнесутся к такому Chef / Ansible? Если Chef ещё может и ничего — всё-таки там не требуется логин, ноды сами вытягивают данные, то Ansible требует установки SSH соединений с управляющей машины.

                    +2
                    Я когда-то писал статью о 2FA для SSH на основе google authenticator, более подробную: https://habrahabr.ru/post/186376/ — упоминал в примере конфигурации плагин pam_access.so, он может определённым IP адресам отключать 2FA.
                      0
                      То есть, в таком случае работает старый добрый, IP-спуфинг с перебором паролей...(Хотя тут стоит вспомнить про преимущество SSH без пароля).
                        0
                        Нельзя просто вклбючить 2FA для избранных учёток, а служебным оставить аутентификацию по ключу?
                      0
                      А как это всё выглядит в гуй через k/gdm?
                        0
                        Я для локального входа настраивал PAM исключительно по LastPass Authenticator. GDM3 выглядит ровно так же. Сначала выбираешь пользователя или вводишь его логин если отключен список, после вводишь «Verification Code» в поле, куда раньше пароль вводился.

                        Думаю с KDM/SDDM ситуация аналогична.
                          0
                          Ужасная реализация. Лучше в сейф комп спрятать.
                        –6
                        Поставил +1 за перевод/труд. И надо бы -1 за идею, реализацию и вообще выбор гугла и андроида как секьюрной части системы. Но это уже к автору, а не к переводчику.

                        Сама идея хорошая (когда требуется подтверждение доступа «штукой из вне»), но как заметили выше, есть смарткарты, ест токены, есть дофига чего «железного», вместо того, чтобы сливать свои данные в гугл или давать гуглу управлять доступом к машине. Или использовать гребаную звонилку!

                        И не вопрос о том, что какой-нибудь хрен мне сейчас ответит "Я лучше доверю свои данные гуглу чем @#$%", а в том, что год от года люди, которые отвечают или хотят отвечать за безопасность тупеют, и вся надежда на старых параноиках.

                        На компьютере Джека, Оливии или Васи — пофигу, особенно если они используют линукс вида ради, и работают с виндузятным софтом. Так что и теги неправильные: сервер и безопасность.
                          +2
                          А теперь давайте рассмотрим итоговую стоимость системы, на смарткартах, токенах и т.п. или купить дешевый android-телефон, выключить в нем радиомодуль и установить на него FreeOTP и пользоваться сканером в виде камеры и qr-кодов.
                            +1
                            Токены и смарткарты стоят от 20 баксов.
                              +2
                              Ок, умножаем на количество серверов, куда нужно ходить. И для каждого отдельный токен. Недёшево выходит. Для смарткарты — ещё ридер таскать.
                                0
                                На один токен можно несколько ключей записать. Посмотрите в сторону yubico
                                  0
                                  или наоборот, один ключ на всех серверах (это не тоже что и один пароль на всех)
                                –1
                                Смарткарты — фигня, вы попробуйте ридеры дешево купите!
                                К тому же на каждый чих своя карта или тем более токен, вы осознаете с какой сумкой будете ходить, если у вас много серверов, машин, аккаунтов?
                                  0
                                  Для лаптопа можно найти на 8 баксов с Амазона.
                              +5
                              сливать свои данные в гугл или давать гуглу управлять доступом к машине

                              Простите, что? https://en.wikipedia.org/wiki/Time-based_One-time_Password_Algorithm

                                +3
                                По моему тут речь шла о большом брате — владельце смартфона, операционки и соответственно данных под ее контролем (в любой момент на конкретный смартфон может прилететь обновление, сливающее вся и все разработчику и вы не сможете это ни отменить ни проследить).
                                  +1

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

                                    +1
                                    Тем самым и относится, что Анроид, что Гугл, что приложение от гугла.
                                      +1

                                      Скачайте исходникки и проведите аудит?


                                      Статья решает конкретную проблему — двухфакторную авторизацию. И да, это безопаснее, чем просто ssh ключи.

                                        –1
                                        Во-первых:
                                        Open source version of Google Authenticator (except the Android app)


                                        Во-вторых:
                                        На кой черт мне проводить аудит их софта с гитхаба и расковыривать приложение под Андроид и проводить и его аудит, если мне нужна авторизация через звонилку как козе баян?

                                        Ну и, в третьих:
                                        кража — ssh и мобилка (но пароли и там и там, мобилка равна по защите если юзер шифровал данные на устройстве)
                                        вирусы — мобилка
                                        Android app — мобилка
                                        Ведро говнософта-из-коробки — мобилка

                                        Как минимум 4 потенциальных уязвимости к мобилке и 1 к ssh.
                                          +1
                                          Хорошо, вы умудрились заразить свою андроид-мобилку трояном (вирусов на эту платформу всё ещё нет). Что сможет троян? Особенно если у вас не рутованное устройство…
                                            0

                                            В одной из теорий заговора предполагается, что все устройства на андроиде изначально заражены трояном.

                                            • UFO just landed and posted this here
                                            0
                                            Open source version of Google Authenticator (except the Android app)

                                            Всё так, потому что приложение под Android вынесено в отдельный репозиторий.
                                              +1
                                              This project is an older fork of the one on the Play store. It's an older version that doesn't get changes synced to it from the Play store version.

                                              Та версия, что в play market — закрытая. Причём версия с гитхаба ещё и ходит на google.com для обхода проблемы с кривым временем на устройстве. Никакого криминала, просто использует заголовок Date.

                                              0
                                              >Open source version of Google Authenticator (except the Android app)

                                              Чуть ниже

                                              >The Android app is in a separate project.

                                              github.com/google/google-authenticator-android
                                    0
                                    Если вы не доверяете гуглу, то используйте вместо Google Authenticator любую другую TOTP программу. Например, Authy.
                                      +3
                                      Authy хранит на своих серверах шифрованный, по их словам, бэкап. Лучше FreeOTP, она разработана Red Hat и исходники открыты.
                                        +2
                                        Можете ещё свое приложение сваять: https://habrahabr.ru/company/token2/blog/249921
                                        +3
                                        Вы считаете, что это менее безопасно, чем без 2fa? Всяко лучше просто пароля, телефон надо ещё сначала украсть, а украсть телефон и подобрать пароль одновременно — куда сложнее, чем просто подобрать пароль. Если нет средств на аппаратные ключи, почему не использовать это решение?
                                          +1
                                          Предложенное решение — очень хороший компромисс между безопасностью с одной стороны и стоимостью и масштабируемостью с другой. Оно явно более надежное, чем просто пароль. Гораздо лучше работает с виртуалками и по vpn, чем смарткарты (можно перезапустить парочку серверов из электрички через планшет, со смарткартами не пройдет такой номер). И масштабируется в разы лучше (развернуть на десять серверов так же легко, как и на два).
                                            +1
                                            Никто вас не заставляет пользоваться Гугловскими продуктами, вы можете скачать Google Authentificator на iOS устройство, или использовать аналоги Google Authentificator, работающие по этому же алгоритму
                                            +1
                                            Использую для ssh.
                                              0
                                              > Ваша Linux-машина теперь гораздо более защищена, чем это было до двухфакторной аутентификации. Несмотря на то, что некоторым этот процесс может показаться хлопотным, я настоятельно рекомендую ее настроить…

                                              С чего бы это?

                                              Если есть физический доступ к десктопу.
                                                0
                                                Если диск шифрован, то без разницы есть физический доступ или нет.
                                                  0
                                                  Где, в этом переводном туторе про шифрование?
                                                    +3
                                                    Ну, в этом туториале ещё не написано, что не стоит в качестве пароля использовать qwertyuiop. Возможно, это потому, что статья про другое. Не?
                                                      0
                                                      Мой первый комментарий к конкретной цитате из перевода. Давайте, если и вести диалог, то применительно к нему?

                                                      Если смысл его для вас непонятен, сформулирую еще раз подробнее, при наличии физического доступа к десктопу, что двухфакторная авторизация, что однофакторная, что запуск DE без логина, что загрузка в single — в плане защиты одно и тоже.

                                                      И очень плохо, что про это в статье нет ни слова. Видимость защищенности — много хуже, чем отсутствие этой самой защищенности.
                                                        0
                                                        Ну, если вам непонятно, я поясню.
                                                        Во-первых, с чего вы взяли, что есть физический доступ к десктопу?
                                                        Во-вторых, в статье не сказано ни слова о десятках других необходимых пунктах регламента защиты. Она только про один из них.
                                                        В третьих, про шифрование уже сказали.
                                                  +2
                                                  Как минимум, записанный на бумажке, приклеенной к монитору, пароль для входа становится недостаточным для входа стороннего человека :)
                                                    –10
                                                    image
                                                    • UFO just landed and posted this here
                                                  –1
                                                  Есть одно но — у Google Authenticator нет бэкапа, и в случае утери\поломки\форматирования телефона, есть риск нарваться на проблемы.
                                                  Использую аналог Authy. Он и в Хроме, и на андроиде активен, + синхронизация.
                                                    –1
                                                    Работает только на ubuntu 16.x и выше?
                                                      +2
                                                      Работать будет везде, где используется PAM.
                                                        0
                                                        Круть за вопрос теперь минусуют :) Еще!
                                                        0
                                                        У меня украли (сломался, утопил, потерял) смартфон. Что делать?
                                                          +3
                                                          после выполнения команды google-authenticator будут сформированны запасные пин коды для таких случаев
                                                            +1
                                                            Еще можно сделать бэкап папки /data/data/com.google.android.apps.authenticator2/databases (потребуется рут) и потом подсунуть ее в новое устройство с установленным Google Authenticator (работает, скорее всего, не только для него, для Yandex Authenticator тоже работает).
                                                              +1
                                                              Покупать новый телефон, восстановить данные с бекапа, продолжать пользоваться.
                                                              –1
                                                              У меня в Ubuntu 14.04 метод с файлом /etc/pam.d/common-auth не сработал, при попытке залогинится через любую учетную запись система отказывалась принимать пароли.

                                                              Решилось так, добавил строку auth required pam_google_authenticator.so в конец файла /etc/pam.d/sshd, в файле /etc/ssh/sshd_config в строчке ChallengeResponseAuthentication поменял no на yes. После перезапуска сервиса ssh все заработало.
                                                                0
                                                                А как заводить нового пользователя? Вот пришел новый админ и ему нужно дать доступ на сервер. Как я понимаю эта авторизация должна настраиваться лично пользователем, но он не сможет попасть на сервер, пока не настроит эту авторизацию…
                                                                  0
                                                                  Что чаще? У вас воруют SSH-ключ и пароль или ломают вебсайтик и запускают локалрут сплоет на сервере, который год не перезагружался? От чего эта защита?)
                                                                    0
                                                                    Чаще у вас дохнет телефон, на который настроена эта штука. Проблема на ровном месте. На SSH необходимо и достаточно иметь ключи. Можно быстро сбацать скрипт, чтобы хранить половину ключа на телефоне.
                                                                    +3
                                                                    Меня одного смущает команда «sudo su username» вместо «sudo -u username -i»?
                                                                      0
                                                                      Не Вас одного, видимо.
                                                                        0
                                                                        это нормальная тема, просто перевод...)
                                                                      0
                                                                      Вероятно полезная штука, но у меня на ноуте в /etc/sudoers стоит NOPASSWD для %root :)
                                                                        0
                                                                        Пользовался 2FA для SSH от DuoSecurity на большом количестве серверов.

                                                                        Платно, централизованное управление.

                                                                        Chef работает, так как использует pull модель для получения данных.
                                                                        У Ansible возникли бы проблемы.

                                                                        Если не нравится Android/iPhone как устройство для аунтификации:
                                                                        — можно получать 2FA код через SMS
                                                                        — можно купить аппаратные tokens
                                                                          0
                                                                          pull для ансибла реализуется тривиальным хаком с git pull && ansible-playbook -i hosts site.yml --limit `hostname`
                                                                            0

                                                                            Или использованием готового скрипта ansible-pull, который фактически делает тоже самое.

                                                                        Only users with full accounts can post comments. Log in, please.