Всем привет. Предвижу вопросы у большинства — а он разве не корпоративный?

Да, не корпоративный. Возможно, я связался с плохой компанией, но для меня пока ещё основной рабочий браузер — это Internet Explorer не выше 11 версии. Корпорация — организм большой, инертный. Менять софт — сплошные муки пользователям, головняк ИТ-службе, счастье интеграторам. Именно поэтому до сих пор на десктопах тут живёт винда, вплоть до XP, а периметры сетей зажаты в первую очередь бумагами с печатями, и потом уже межсетевыми экранами. Ну и основным «сдерживающим фактором» является обилие «легаси», приложений с ActiveX и безальтернативной поддержкой Internet Explorer в разметке.

Сразу скажу — чудес не бывает. ActiveX и поддержку тэгов/dom/багов IE в Firefox не прикрутить ну никоим образом. Даже заниматься этим не будем — всё равно в вашем плане импортозамещений, вероятно, есть строчка по выводу из эксплуатации устаревших приложений или их переработке. Второй нюанс — изолированность корпоративной сети вносит свои коррективы. Реестровый Яндекс.браузер без доступа в интернет практически бесполезен (даже вреден), как, впрочем, и Спутник, chromium. Chromium-gost видимо придётся использовать на некоторых рабочих местах, но не на всех. А вот старичок Firefox есть во всех отечественных дистрибутивах, и что самое важное, его всерьёз воспринимают производители коммерческого софта. Будем изучать его традиционно на RedHat-based отечественных дистрибутивах и, как обычно, сначала врукопашную.

Для начала определимся — что нам хочется:

  1. Иметь возможность брать сертификаты со смарт-карты для аутентификации на некоторых ресурсах.
  2. Иметь возможность подключаться к ресурсам с устаревшими криптографическими алгоритмами.
  3. Доверять содержимому, подписанному внутренними корпоративными сертификатами.
  4. Настройки производить втайне от пользователя и за минимальное время :)

▍ Подключаем смарт карточки


Смарт-карты или токены широко используются для аутентификации пользователей. Есть методы попроще, но первая аксиома безопасности гласит — удобство обратно пропорционально безопасности.

Устанавливаем на рабочую станцию необходимые пакеты поддержки смарт-карт. У меня это SafeNet Authentication Client и JaCarta PKCS #11 library. Пакеты поставили, теперь их необходимо прописать в браузере. Пользователь запускает браузер и заходит в «Настройки->Приватность и защита->Устройства защиты» и поочерёдно добавляет модули в формате pkcs11 из пакетов SAC и JaCarta.


На изображении показан уже установленный модуль для libeToken и добавление JaCarta

Вариант, конечно, рабочий, но мне не нравится — необходимо возить мышкой на каждом рабочем месте.

Следующий вариант вы обнаружите, если обратите внимание, что SAC будет числиться в security-девайсах у некоторых пользователей. Всё потому, что в rpm-пакете SafeNet Authentication Client в секции %postinstall имеется кусочек, который пробегается по домашним каталогам пользователей и через утилиту modutil добавляется в конфигурацию пользовательского firefox. На первый взгляд — довольно удобно, однако есть нюансы. На момент установки должен существовать каталог пользователя, в противном случае опять ручная установка.



Этот метод «полуавтоматический», и с некоторыми странностями — задаёт вопросы хоть и указан ключик -force. Если копнуть глубже, то пишет он всё в текстовый файл pkcs11.txt в профиле пользователя и его можно аккуратно редактировать через ansible/chef/puppet и т.д. при незапущенном браузере. Из минусов — нужно проходиться по профилям каждого пользователя, нужно выполнять при заведении нового пользователя.

Пока остановимся на этом варианте.

Если хотите прокачать своё понимание в реализации юниксовой криптографии, то рекомендую статью OpenSSL и Network Security Services (NSS) — две стороны одной медали, там и почерпнёте более глубокие знания об modultil.

▍ Добавляем устаревшие шифросьюты


Знаю — нехорошо. Однако уверен, что и у вас имеются информационные ресурсы не умеющие сильное шифрование. В Firefox возможность работы с устаревшими алгоритмами шифрования ещё имеется, хоть и спрятана подальше от пользователя.

Запускаем от юзера браузер и набираем в адресной строке about:config, принимаем на себя все риски и в строке поиска пишем tls. Всё, что надо поменять — выделено жирным на скриншоте:



Опять руками, опять мышонком. Сразу скажу, что firefox запишет эти настройки в текстовый файл ~/.mozilla/firifox/<имя профиля>/prefs.js, вот только править там что-либо руками не рекомендуется — об этом прямо написано в самом начале файла. Там же и подсказка — сделайте себе файл user.js и вставляйте в него всё что требуется. Сделали, всё работает — можно раскидывать этот файлик в профиль всем пользователям.

Однако не стоит спешить — есть system-wide вариант. Создаём /etc/firefox/pref/prefs.js, редактируем, добавляем ещё какие-нибудь ключики (например, аутентификацию kerberos) и всё автоматически появится у всех пользователей.

По настройкам about:config (да и не только) есть хорошая статья здесь на Хабре. Рекомендую немедленно ознакомиться.

▍ Добавляем корневые сертификаты


При попытке зайти на внутренние ресурсы получаем предупреждение об отсутствии к ним доверия. Всё понятно — пришло время добавить в браузер наши корпоративные самоподписанные корневые сертификаты.

Вручную — без проблем. Настройки->Приватность и защита->Просмотр сертификатов->Центры сертификации->Импортировать.... Сами представляете, как это долго и утомительно, да ещё на каждом рабочем месте.

Есть хороший (и правильный) вариант добавить их в систему оптом, причём не только для firefox. Мероприятие из двух пунктов:

  1. Копируем все сертификаты в формате PEM в каталог /etc/pki/ca-trust/source/anchors/
  2. От рута запускаем update-ca-trust

Проверяем: ROSA Linux сертификты в браузере появились, RED OS сертификаты в браузере не появились. Начнём разбираться.

Для начала смотрим в security devices на ROSA Linux — видно, что /etc/pki/ca-trust/source является слотом в модуле «Модуль встроенных корневых серт.», библиотека модуля /lib64/libnssckbi.so. Эта библиотека в конечном итоге является симлинком на /usr/lib64/pkcs11/p11-kit-trust.so и управляется через alternatives.

Заходим на RED OS и первым делом смотрим, на что нацелена alternatives libnssckbi.so.x86_64:



Всё честно.

Устройства безопасности в Firefox выглядят таким образом:



Сразу бросается в глаза — firefox собран таким образом, что он игнорирует системную libnssckbi.so, а имеет собственную /usr/lib64/firefox/libnssckbi.so, целиком и полностью набитую вражьими сертификатами!

Первая мысль — ln -sf /lib64/libnssckbi.so /usr/lib64/firefox/libnssckbi.so. Это сработает, но надо понимать, что при очередном обновлении firefox наш костыль с треском сломается.

Вторая попытка — добавить штатную libnssckbi вручную или через modutil, аналогично тому, как мы добавляли считыватели смарт-карт. Мне и в предыдущий раз это не особо понравилось, но одним устройством больше, одним меньше… Пока учтём как запасной вариант.

Третий подход. В устройствах защиты болтается странный «OS Client Cert Module» и с путём к модулю /usr/lib64/firefox/libosclientcerts.so. Какие сертификаты он предоставляет — непонятно, т.к. такого файлика в системе просто нет. Можно пихнуть вместо него симлинку на p11-kit-trust.so и будет работать, но я также считаю, что это неправильно — мало ли прилетит с очередным обновлением то, что изначально задумывал сборщик.

Четвёртая итерация — system-wide настройка через modutil. Теоретически всё лежит в /etc/pki/nssdb/, но и тут облом — мантэйнер RED OS позаботился, чтобы firefox туда не заглядывал.

Пятый вариант — лезем на support.mozilla.org и пытаемся найти что-нибудь подходящее (firefox не имеет никакой локальной документации, заглядывать в /usr/share/doc бесполезно). Там находим статью Настройка Firefox с помощью policies.json. Статья лаконичная, много недосказанного, хорошо хоть есть ссылка на README.md на гитхабе, откуда можно узнать место, где должен находиться файл policies.json в установленной системе, и какие политики существуют. Очень занятный документ.

Это «кроссплатформенные» (винды тоже касается) политики, позволяющие производить централизованную настройку firefox. Кроме блокировки/отключения элементов интерфейса, изменение внутренних опций и параметров, возможно также и манипулирование устройствами безопасности.

Всё рассматривать не вижу смысла, приведу лишь простейший вариант для нашего случая /etc/firefox/policies/prefs.json:

{
    "policies": {
        "AppAutoUpdate": false,
        "DisableAppUpdate": true,
        "DisableFeedbackCommands": true,
        "DisablePocket": true,
        "DisableTelemetry": true,
        "DNSOverHTTPS": {
            "Enabled": false,
            "Locked": true
        },
        "EncryptedMediaExtensions": {
            "Enabled": true,
            "Locked": false
        },
        "FirefoxHome": {
            "Search": false,
            "TopSites": true,
            "Highlights": false,
            "Pocket": false,
            "Snippets": false,
            "Locked": false
        },
        "HardwareAcceleration": true,
        "Homepage": {
            "URL": "file:///usr/share/doc/HTML/index.html",
            "Locked": false,
            "StartPage": "homepage"
        },
        "NoDefaultBookmarks": true,
        "OverrideFirstRunPage": "",
        "OverridePostUpdatePage": "",
        "PromptForDownloadLocation": true,
        "ShowHomeButton": true,
        "SecurityDevices": {
            "p11-kit-trust": "/usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-trust.so",
            "libeToken": "/usr/lib64/libjcPKCS11-2.so",
            "JaCarta": "/usr/lib64/pkcs11/libjcpkcs11-2.so"
        }
    }
}

В данном файле пока самое интересное это ключик «SecurityDevices», т.к. он полностью избавляет нас от проблем раздела 1 и 3 статьи. Складываем этот файл на каждое рабочее место в процессе инсталляции и всё. Не забываем только кидать свежие сертификаты в /etc/pki/ca-trust/source/anchors и запускать update-ca-trust.

А тот, кто прочитает README.md полностью или даже выборочно, избавится от ведения отдельного prefs.js для старых шифросьютов и попутно настроит аутентификацию в соответствии с корпоративными требованиями. Намеренно не стал вставлять в пример конфига — домашнее задание :)

▍ Финал


These policies are in active development and so might contain changes that do not work with current versions of Firefox.

Первая строчка файла README.md вроде как намекает нам, что нет ничего вечного и что всё может внезапно измениться в будущем. Но всё равно, на текущий момент я считаю данный метод наиболее правильным и удобным.

Хочу обратить внимание, что начиналось всё с тривиальных задач по ручному подключению смарт-карт и добавлению корневых сертификатов к firefox, а в конце нашлось очень мощное средство, позволяющее свести рутинную ручную настройку пользовательского браузера на каждом рабочем месте к простому распространению файла политик. Обычно так бывает всегда, главное — не останавливаться на первых положительных результатах, а копать глубже.

Telegram-канал с полезностями и уютный чат

Комментарии (9)


  1. s207883
    05.10.2022 13:40
    +2

    Давно задаюсь вопросом, а почему нельзя поставить пользователям 2 браузера?

    ie11 и хром/лису/не важно . Мы и старый софт сохраняем рабочим и новый можем пилить на современном браузере.

    Почему-то всегда все (личное оценочное суждение) предпочитают тратить ресурсы на поддержку легаси, но не на установку софта.


    1. alef13 Автор
      05.10.2022 17:58
      +4

      Не всегда это пользователям нравится - вспомни основные принципы макоси, что-то вроде: "делать только одним способом". Хочется из корпоративного портала работать с одним инструментом. Поддержке тоже проще. И обновлять дыры (а браузеры обновляются очень часто) проще, т.е. служба безопасности будет меньше напрягать.


      1. aim
        06.10.2022 00:39
        +1

        значит tls3 врубить можно, а ie11 оставить нельзя?! нестыковочка...


        1. alef13 Автор
          06.10.2022 08:03
          +1

          Замена ie11 на firefox это побочка от перехода на отечественную ОС. По контексту видно :)


  1. aborouhin
    06.10.2022 01:01
    +1

    Для корпоративного внедрения логично бы ещё свой сервер синхронизации поднимать. А то Mozilla - это, конечно не Гугл и тем более не, прости господи, Яндекс, - но отдавать им на хранение данные пользователей тоже без лишней надобности не стóит. Раньше для этого был syncserver, потом его прекратили поддерживать, сейчас syncstorage-rs.


    1. alef13 Автор
      06.10.2022 06:24

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


    1. dartraiden
      06.10.2022 20:04

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


  1. LAG_LAGbI4
    06.10.2022 08:08
    +3

    С проблемами автора не сталкивался.

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


  1. Johan_Palych
    06.10.2022 15:25

    В корпоративной сети развернут ActiveDirectory/DC(Window, Samba 4, ipa-server)?
    Workstations на базе ROSA и RED OS в домене?

    Зачем столько кликов и букв?
    about:preferences#privacy - Просмотр сертификатов
    about:preferences#privacy - Устройства защиты

    Manage updates, policies & customization
    https://support.mozilla.org/en-US/products/firefox-enterprise/policies-customization-enterprise
    https://support.mozilla.org/ru/products/firefox-enterprise/policies-customization-enterprise

    Alt Linux out of the box GPO: AD-Samba, ADMX Mozilla Firefox, ADMX Google Chrome

    https://www.altlinux.org/Групповые_политики

    Configuring Firefox to use Kerberos for SSO

    https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/5/html/deployment_guide/sso-config-firefox

    Chromium-gost в отечественных дистрибутивах:

    Браузер Сhromium с протоколом TLS, плагин Госуслуг и плагин КриптоПро
    https://redos.red-soft.ru/base/other-soft/szi/install-chromium-tls/
    
    Chromium-gost — ALT Linux Wiki
    https://www.altlinux.org/Chromium-gost
    
    Chromium-gost, который имеется в штатном репозитории Astra Linux
    sudo apt install chromium chromium-gost
    https://easyastra.ru/Article/ЭЦП/ЭЦП.pdf
    
    ROSA FRESH DESKTOP 12(CHROME Workstation)
    Chromium из репозитория поддерживает ГОСТ TLS через КриптоПро
    
    https://github.com/deemru/Chromium-Gost/releases