[devel] Новый control для sshd: sshd-allow-gssapi

Evgeny Sinelnikov sin на altlinux.org
Чт Окт 10 18:21:05 MSK 2019


чт, 10 окт. 2019 г. в 10:31, Alexey V. Vissarionov <gremlin at altlinux.org>:
>
> On 2019-10-09 23:54:55 +0400, Evgeny Sinelnikov wrote:
>
>  >>> В нашем случае, смысл в этом следующий. У нас довольно активно
>  >>> пользователи из домена (то бишь админы), начинающие управлять
>  >>> рабочими станциями, ходят через пароль/логин. Такой вот
>  >>> windows-подход в домене на базе samba - ничего особенного.
>  >> Аааа... оно для локалки. Тогда вероятность атаки падает до очень
>  >> низкой, и тогда даже при неизменном очень высоком уровне
>  >> ущерба уровень риска падает до приемлемого среднего.
>  > Ну, вот и хорошо.
>
> Ну, не прям "хорошо", но приемлемо.
>
>  >>>> Есть же PubkeyAuthentication - его достаточно для всего (в
>  >>>> том числе для сертификатов ssh-rsa-cert-v01 at openssh.com и
>  >>>> ssh-ed25519-cert-v01 at openssh.com).
>  >>> Причём тут сертификаты?
>  >> Прежде всего, это штатное средство SSH. Ну и сами сертификаты
>  >> на определенный ключ можно выписывать хоть одноразовые или
>  >> со сроком действия в единицы-десятки секунд.
>
> На всякий случай: здесь я описываю реальную практическую задачу.
>
>  > Прежде всего, речь идёт не только об админах, но и о любом
>  > пользователе в домене. Кроме того, если уж говорить о
>  > сертификатах в таком ключе, то это тоже кромпромиссный
>  > случай. Дело в том, что GSSAPI через Kerberos рулится
>  > централизованно,
>
> Дык и CA (а лучше RA) управляется централизованно.
>
>  > а разбросанные по узлам публичные ключи в разных файлах
>  > настройки поди ещё вычисти при необходимости забрать быстро
>  > доступ.
>
> Ключей там при такой настройке нет - только сертификат CA.
>
>  > Да, можно разные ключи можно делать, но всё равно это не даёт
>  > необходимого функционала.
>
> Ключ в этом случае нужен один. Открытый. Принадлежащий CA (тот
> самый сертификат, упомянутый чуть выше).

Я не понимаю о чём, в данном случае, идёт речь. Можно конкретные
ссылки на документацию для "особо одарённых", вроде меня, о том как
это применять на практике в рассматриваемых рамках? Я не понимаю что я
такого пропустил по теме аутентификации. Как предлагаемый вами
механизм использовать для, к примеру, 100 пользователей на 20 рабочих
станциях одной организации. На основании чего они аутентифицируются
при локальном и удалённом, через ssh, логине? Есть какие-то конкретные
примеры?

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

То есть я вот заметил уязвимость:
- не стоит ходить на машины по паролю/логину, как это делается почти у
всех (например, в ГНИВЦе);
- нужно рекомендовать использовать GSSAPI для входа по ssh в домене.

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

Ну, можно без control'а обойтись, но в рамках дистрибутивного решения
смысл добавить есть, поскольку это вписывается как расширение
существующего функционала.

А что предлагаете вы?


>  >>> Кроме включения GSSAPI для серверной стороны (sshd-allow-gssapi),
>  >>> нужен аналогичный - для клиентской (ssh-allow-gssapi).
>  >> Оно требует каких-то сборочных зависимостей? Если да - есть
>  >> смысл собирать отдельно openssh и openssh-featured
>  > Никаких сборочных зависимостей это не требует. Всё уже давно
>  > как нужно собрано и работает из коробки.
>
> Вот как раз "из коробки" оно должно быть выключено напрочь.

Что "оно"? О чём вы? openssh собран с поддержкой GSSAPI. GSSAPI, по
умолчанию, выключен. Что вы ещё по пакетам разбить предлагаете?

Подход, который у нас сложился в плане "оно должно быть выключено
напрочь" выглядит так:
- в дистрибутивах всё, по умолчанию, сильно закручено;
- откручивать вручную и объяснять каждому начинающиму пользователю и
администратору где и что у нас нужно открутить, чтобы что-то
заработало - дело утомительное и непродуктивное;
- наши решения из-за этого иногда просто не используют (ресурса не
хватает, чтобы разобраться).

Это компромиссный момент. Я не претендую с ним спорить, и даже сам во
многом, согласен. Но речь-то не об этом. А о том, чтобы было понятно
как "включить". Для этого предлагается расширить список "ручек" для
настройки.

>  >>> Ещё одна настройка, которая кажется интересной и которой я
>  >>> постоянно пользуюсь - это группа remote [...]
>  >> А еще можно просто выкинуть этот параметр и пускать всех,
>  >> у кого есть ключ.
>  > Нет, нельзя так сделать, есть такая категория пользователей,
>  > которым нужен ssh, а рулить ими нужно из домена.
>
> Эта категория все же маргинальна. И как раз для нее я предложил
> openssh-featured

Нет, это вы что-то путаете на счёт маргинальности с точностью до наоборот.

Суть предложения в виде названия openssh-featured я не понял.
Раскройте содержательную часть предложения, пожалуйста.


>  >>> Эти настройки - суть политики. Какие-то из них предполагается
>  >>> включать сразу при вводе компьютеров в домен. Но, в целом, они
>  >>> самоценны и вне контекста какой-либо инфраструктуры.
>  >> В локалке пофигу, но может выйти боком на оборудовании,
>  >> торчащем голой жопой в дикий интернет.
>  > Да нет же. Это предубеждение. Kerberos создан для работы в диком
>  > интернете, как раз.
>
> Помню я этот интернет 20-летней давности...
>
>  >>> Так вот. Как лучше поступить? Держать их в отдельном пакете
>  >>> или сразу интегрировать, в openssh?
>  >> Все же в openssh-featured :-)
>  >> Или, соответственно, в openssh-featured-control-gssapi
>  > Нет, нет, нет. Речь не в том, что необходимо пересобирать
>  > openssh бинарно. На основании чего вы это решили?
>
> Мы - это кто? Я здесь пишу исключительно от собственного имени.

Извини, это я к тебе так обратился на "Вы".

> А разные сборки мне видятся вполне естественным решением.

Прекрасно, делайте, если нужно. У меня нет ни повода, ни желания
делать отдельную сборку openssh в рамках рассматриваемого вопроса.
Текущая сборка openssh меня вполне устраивает.

>  > Далее хочу пояснить всё это детально (для тех, кто в танке).
>  > 1) У нас для настройки локальных политик безопасности уже
>  > давно используется такой инструмент, как control.
>
> Ээээ... Да я в общем-то уже почти 20 лет лично знаком с автором.
>
>  > 2) Этот инструмент позволяет задавать настройки, которые
>  > позволяют понизить или повысить уровень закрученных гаек,
>  > что-то включить или выключить.
>  > 3) Реально эти политики у нас упакованы в разных пакетах,
>  > для ssh - в пакете openssh-server-control
>  > 4) По уму, эти политики есть резон расширить, как минимум
>  > двумя: sshd-allow-gssapi и ssh-allow-gssapi
>  > 5) Таких штук придумано уже достаточно много, но сейчас
>  > нужно запилить ещё больше для конкретных, узких задач.
>  > Так вот. Как лучше поступить? Держать их в отдельном пакете
>  > local-policy или сразу интегрировать, в соответствующие пакеты?
>
> В таком случае - совершенно точно в отдельном пакете.

Не уверен. Я бы хотел услышать мнение каждого отдельного мейнтейнера
на этот счёт, поскольку существующие control'ы у каждого пакета свои.


>  > Понятно, что нужно делать и предлагать по каждому пакету
>  > отдельно.  Пока речь шла об openssh и том, что новые control'ы
>  > можно сразу туда и добавить. Технически, это не столь важно,
>  > как организационно. Тут, скорее, вопрос ставится так: "Мы
>  > хотим напилить много новых control'ов. Просим и предлагаем
>  > подключиться к их разработке и тестированию."
>
> Да сколько угодно. Только в основную систему их не тащите - они
> очень уж маргинальны.

Да нет же. Что тут у нас маргинально я бы поспорил, но не в этом
вопрос. Вопрос в том, зачем вы это слово столько раз употребили? Из
открытых источников известно, что "индивидуальная маргинальность
характеризуется неполным вхождением индивида в группу, которая его
полностью не принимает, и его отчуждением от группы происхождения,
которая его отторгает как отступника."

В каком смысле тут кто маргинален? И что значит "в основную систему их
не тащите"? А куда мне их тащить?

Я то, как раз, и хотел бы в данном случае, чтобы sshd-allow-gssapi и
ssh-allow-gssapi попали в openssh-server-control. Но их нужно написать
и ещё отладить. И меня волновал порядок этой отладки и перехода из
сторонного пакета в основной. А также готовность других мейгтейнеров
(в пакетах которых есть control'ы или в пакеты которых стоило бы их
добавить) этим заниматься в том или ином порядке.

В предложенном к рассмотрению подходе control'ы - это инструмент,
который может быть использован для обобщённого управления множеством
подобных узлов. Каждый отдельный узел, вручную, можно и без всяких
control'ов настраивать. Но даже для этого нужно помнить что и в каком
файле требуется настроить.


-- 
Sin (Sinelnikov Evgeny)


Подробная информация о списке рассылки Devel