Pull to refresh

Поддержка электронных USB ключей в Thinstation

Reading time4 min
Views10K
Озадачился вопросом использования двухфакторной аутентификации для терминального доступа на тонких клиентах на базе Thinstation и немного удивился. Оказывается, что на текущий момент ни одна сборка или конструктор Thinstation не поддерживает электронные USB ключи, такие как eToken, RuToken, iKey. Несмотря на то, что дистрибутив Thinstation настолько популярен, что его используют вместо стандартного ПО на тонких клиентах HP, да и средства аутентификации eToken получили больше распространения на постсоветском пространстве, чем решения от других компаний, но факт остается фактом — в Thinstation нет поддержки электронных USB ключей.

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

Чтобы использовать двухфакторную аутентификацию для терминального доступа по RDP в Thinstation необходимо три компоненты: RDP клиент, приложение, обеспечивающее работу cо смарт-картами (электронными ключами), и драйвер смарт-карты. Первые две компоненты (rdesktop и pcsc) изначально присутствуют в конструкторе Thinstation, и на них не будем заострять внимание, разве что убедимся, что rdesktop имеет поддержку смарт-карт, а pcsc версии не ниже 1.5.5. Третьим компонентом, драйвером, а так же связующим звеном для pcsc является пакет OpenCT. OpenCT поддерживает сравнительно большое количество USB ридеров и токенов и, главное, корректно работает с rdesktop. Вот ему и уделим больше внимания.

Порядок сборки дистрибутива Thinstation с поддержкой электронных USB ключей следующий: собираем из исходников OpenCT, создаем package для Thinstation, правим конфигурационные файлы, собираем образ Thinstation.

Собираем OpenCT

Сборка будет происходить на Ubuntu, соответственно команды приведены для этого дистрибутива Linux, для других версий Linux команды будут другими

Для начала устанавливаем необходимые для сборки пакеты:
$ sudo apt-get install libhal1 libltdl7 dpkg-dev build-essential fakeroot

Создаем в домашнем каталоге папку, в которой будем собирать OpenCT из исходников:
$ mkdir ~/openct
$ mkdir ~/openct/build
$ cd ~/openct/build

Скачиваем исходники и устанавливаем зависимости для компиляции пакета
$ sudo apt-get source openct
$ sudo apt-get build-dep openct

Распаковываем:
$ sudo dpkg-source -x openct_0.6.20-1.1.dsc

Собираем пакет OpenCT с необходимыми опциями — enable-pcsc и enable-usb:
$ cd openct-0.6.20
$ sudo DEB_BUILD_OPTIONS="--enable-pcsc --enable-usb" fakeroot debian/rules binary
$ cd…

Собираем package для Thinstation

Openct готов, создаем структуру пакета для Thinstation
$ mkdir ~/openct/packages
$ mkdir ~/openct/packages/openct
$ mkdir ~/openct/packages/openct/bin
$ mkdir ~/openct/packages/openct/etc
$ mkdir ~/openct/packages/openct/etc/udev/
$ mkdir ~/openct/packages/openct/etc/udev/scripts
$ mkdir ~/openct/packages/openct/lib
$ mkdir ~/openct/packages/openct/usr
$ mkdir ~/openct/packages/openct/usr/sbin
$ mkdir ~/openct/packages/openct/var
$ mkdir ~/openct/packages/openct/var/run
$ mkdir ~/openct/packages/openct/var/run/openct

Копируем необходимые файлы
$ cp ~/openct/build/openct-0.6.20/debian/openct/usr/bin/openct-tool ~/openct/packages/openct/bin/openct-tool
$ cp ~/openct/build/openct-0.6.20/debian/openct/usr/sbin/openct-control ~/openct/packages/openct/bin/openct-control
$ cp ~/openct/build/openct-0.6.20/debian/openct/usr/sbin/if* ~/openct/packages/openct/usr/sbin/

$ cp -r ~/openct/build/openct-0.6.20/debian/openct/usr/lib/ ~/openct/packages/openct/
$ cp -r ~/openct/build/openct-0.6.20/debian/openct/lib/udev/rules.d ~/openct/packages/openct/etc/udev
$ cp ~/openct/build/openct-0.6.20/debian/openct/lib/udev/openct* ~/openct/packages/openct/etc/udev/scripts
$ cp ~/openct/build/openct-0.6.20/debian/openct/etc/openct.conf ~/openct/packages/openct/etc/openct.conf
$ cp -r ~/openct/build/openct-0.6.20/debian/libopenct1/usr/lib/* ~/openct/packages/openct/lib

$ cp -r /lib/libdbus* ~/openct/packages/openct/lib
$ cp -r /usr/lib/libhal.so* ~/openct/packages/openct/lib
$ cp -r /usr/lib/libltdl.so* ~/openct/packages/openct/lib

Правим конфигурационные файлы

Хотя правило udev уже присутствует, его необходимо подкорректировать
$ nano ~/openct/packages/openct/etc/udev/rules.d/60-openct.rules

После строки
ACTION!=«add», GOTO=«openct_usb_rules_end» необходимо добавить:

SUBSYSTEM==«usb», ACTION==«add», ENV{DEVTYPE}==«usb_device», \
NAME=«bus/usb/$env{BUSNUM}/$env{DEVNUM}», MODE=«0644»

А так же убедиться, что правила, относящиеся к нужным электронным ключам, не закомментированы, и пути до исполняемых скрипов корректны. В Thinstation они располагаются /etc/udev/scripts

Файл openct_usb подвергается более «серьезной» модификации
$ nano ~/openct/packages/openct/etc/udev/scripts/openct_usb
Выносим все и прописываем только:
#!/bin/sh
/bin/openct-control shutdown
/bin/openct-control init
exit 0

Не будет лишним заглянуть в openct.conf, убедиться, что нужный драйвер электронного ключа будет загружен.
$ nano ~/openct/packages/openct/etc/openct.conf

Создаем зависимость пакета openct в Thinstation от pcscd:
$ echo 'pcscd ' | cat > ~/openct/packages/openct/dependencies

Собираем образ Thinstation

Cозданный пакет openct в папку с packages:
$ cp -r ~/openct/packages/openct ~/Thinstation-2.2.2/packages

Сообщаем конструктору о необходимости включить пакет openct в сборку дистрибутива Thinstation:
$ nano ~/Thinstation-2.2.2/build.conf

packages openct

Собираем образ тонкого клиента
$ cd ~/Thinstation-2.2.2
$ sudo ./build

Образ готов. Загружаемся, подключаем token и в консоли проверяем командами pcscd_scan и/или opensc-tool –l

image

Если все хорошо, то подключаемся к терминальному серверу, не забыв в опциях соединения к серверу указать –r scard.
Tags:
Hubs:
+5
Comments3

Articles

Change theme settings