Linux Virtual Delivery Agent

スマートカード

Linux仮想デスクトップセッションにログオンするときに、クライアントデバイスに接続されたスマートカードを認証に使うことができます。この機能は、ICAスマートカード仮想チャネル上でのスマートカードのリダイレクトによって実装されます。セッション内でスマートカードを使用することもできます。次のようなユースケースがあります:

  • ドキュメントへのデジタル署名の追加
  • メールの暗号化または暗号化解除
  • Webサイトへの認証

Linux VDAは、この機能にWindows VDAと同じ構成を使用します。詳しくは、この記事の「スマートカード環境を構成する」セクションを参照してください。

注:

Linux VDAセッション内でマップされたスマートカードを使用してCitrix Gatewayにサインオンすることは、サポートされていません。

前提条件

スマートカードによるパススルー認証を使用できるかは、次の条件により異なります:

  • Linux VDAが、次のいずれかのディストリビューションにインストールされている:

    • RHEL 9.1/9.0
    • RHEL 8.7/8.6/8.4
    • RHEL 7、CentOS 7
    • Rocky Linux 9.1/9.0
    • Rocky Linux 8.7/8.6
    • Ubuntu 22.04
    • Ubuntu 20.04
    • Ubuntu 18.04
    • Debian 11.3

    VDAのインストールが完了したら、VDAがDelivery Controllerに登録でき、公開されたLinuxデスクトップセッションをWindows資格情報を使用して起動できることを確認します。

  • OpenSCがサポートするスマートカードが使用されている。詳しくは、「OpenSCがスマートカードをサポートしていることの確認」を参照してください。

  • Windows向けCitrix Workspaceアプリが使用されている。

OpenSCがスマートカードをサポートしていることの確認

OpenSCは、RHEL 7.4以降で広く使用されているスマートカードドライバーです。OpenSCはCoolKeyと完全に互換性がある後継で、さまざまな種類のスマートカードをサポートします(「Smart Card Support in Red Hat Enterprise Linux」を参照)。

この記事では、構成を説明するための例として、YubiKeyスマートカードを使用します。YubiKeyは、Amazonや他の小売業者から簡単に購入できる一体型のUSB CCID PIVデバイスです。OpenSCドライバーは、YubiKeyをサポートしています。

もっと高度なスマートカードが必要になった場合は、サポート対象のLinuxディストリビューションとOpenSCパッケージがインストールされた物理マシンを準備します。OpenSCのインストールについては、「スマートカードドライバーをインストールする」を参照してください。スマートカードを挿入し、次のコマンドを実行して、OpenSCがスマートカードをサポートしていることを確認します:

pkcs11-tool --module opensc-pkcs11.so --list-slots
<!--NeedCopy-->

構成

ルート証明書を準備する

ルート証明書は、スマートカード内の証明書を検証するために使用されます。ルート証明書をダウンロードしてインストールするには、次の手順を完了します。

  1. 通常はCAサーバーから、ルート証明書をPEM形式で取得します。

    次のようなコマンドを実行して、DERファイル(*.crt、*.cer、*.der)をPEMに変換できます。次のコマンド例では、certnew.cer はDERファイルです。

    openssl x509 -inform der -in certnew.cer -out certnew.pem
    <!--NeedCopy-->
    
  2. ルート証明書をopensslディレクトリにインストールします。例として certnew.pem ファイルを使用しています。

    cp certnew.pem <path where you install the root certificate>
    <!--NeedCopy-->
    

    ルート証明書をインストールするためのパスを作成するには、sudo mdkir -p <path where you install the root certificate>を実行します。

RHEL 8.xおよびRocky Linux 8.xでpam_krb5モジュールをビルドする

スマートカード認証は、RHEL 8.xおよびRocky Linux 8.xで廃止になったpam_krb5モジュールに依存します。マルチセッションOSモードで提供されるRHEL 8.xおよびRocky Linux 8.xのマシンでスマートカード認証を使用する場合は、次の手順が必要です。シングルセッションOS(VDI)モードで提供されるRHEL 8.xおよびRocky Linux 8.xのマシンのスマートカード認証の場合、次の手順はスキップしても構いません。

  1. https://centos.pkgs.org/7/centos-x86_64/pam_krb5-2.4.8-6.el7.x86_64.rpm.htmlからpam_krb5-2.4.8-6ソースコードをダウンロードします。

  2. RHEL 8.xおよびRocky Linux 8.xでpam_krb5モジュールをビルドしてインストールします。

    yum install -y opensc pcsc-lite pcsc-lite-libs pcsc-lite-ccid nss-tools
    yum install gcc krb5-devel pam-devel autoconf libtool
    rpm2cpio pam_krb5-2.4.8-6.el7.src.rpm | cpio –div
    tar xvzf pam_krb5-2.4.8.tar.gz
    cd pam_krb5-2.4.8
    ./configure --prefix=/usr
    make
    make install
    <!--NeedCopy-->
    
  3. /usr/lib64/security/にpam_krb5.soが作成されたことを確認します。

    ls -l /usr/lib64/security | grep pam_krb5
    <!--NeedCopy-->
    

スマートカード環境を構成する

ctxsmartlogon.shスクリプトを使用してスマートカード環境を構成するか、手動で構成を完了することができます。

(オプション1)ctxsmartlogon.shスクリプトを使用してスマートカード環境を構成する

注:

ctxsmartlogon.shスクリプトは、PKINIT情報をデフォルトの領域に追加します。この設定は、/etc/krb5.conf構成ファイルを使用して変更できます。

スマートカードを初めて使用する前に、ctxsmartlogon.shスクリプトを実行してスマートカード環境を構成します。

ヒント:

ドメインへの参加にSSSDを使用している場合は、ctxsmartlogon.shの実行後にSSSDサービスを再起動してください。

sudo /opt/Citrix/VDA/sbin/ctxsmartlogon.sh
<!--NeedCopy-->

結果は次のようになります:

ctxsmartlogon.shスクリプトを実行して、yesを選択

ctxsmartlogon.shスクリプトを実行して、スマートカードを無効にすることもできます:

sudo /opt/Citrix/VDA/sbin/ctxsmartlogon.sh
<!--NeedCopy-->

結果は次のようになります:

ctxsmartlogon.shスクリプトを実行して、noを選択

(オプション2)スマートカード環境を手動で構成する

Linux VDAは、Windows VDAと同じスマートカード環境を使用します。この環境では、ドメインコントローラー、Microsoft証明機関(CA)、インターネットインフォメーションサービス、Citrix StoreFront、Citrix Workspaceアプリなど、複数のコンポーネントを構成する必要があります。YubiKeyスマートカードに基づく構成について詳しくは、Knowledge CenterのCTX206156の記事を参照してください。

次の手順に進む前に、以下の点について確認してください:

  • すべてのコンポーネントが正しく構成されている。
  • 秘密キーとユーザー証明書がスマートカードにダウンロードされている。
  • スマートカードを使用してVDAに正常にログオンできる。
PC/SC Liteパッケージをインストールする

PCSC Liteは、Linuxでのパーソナルコンピューター/スマートカード(PC/SC)仕様の実装です。スマートカードやリーダーと通信するためのWindowsスマートカードインターフェイスを提供します。Linux VDAでのスマートカードリダイレクトは、PC/SCレベルで実装されています。

次のコマンドを実行して、PC/SC Liteパッケージをインストールします:

RHEL 9.1/9.0/8.x、Rocky Linux 9.1/9.0/8.x、RHEL 7/CentOS 7:

yum install pcsc-lite pcsc-lite-ccid pcsc-lite-libs
<!--NeedCopy-->

Ubuntu 22.04、Ubuntu 20.04、Ubuntu 18.04、Debian 11.3:

apt-get install -y libpcsclite1 libccid
<!--NeedCopy-->
スマートカードドライバーをインストールする

OpenSCは、広く使用されているスマートカードドライバーです。OpenSCがインストールされていない場合は、次のコマンドを実行してインストールします:

RHEL 9.1/9.0/8.x、Rocky Linux 9.1/9.0/8.x、RHEL 7/CentOS 7:

yum install opensc
<!--NeedCopy-->

Ubuntu 22.04、Ubuntu 20.04、Ubuntu 18.04、Debian 11.3:

apt-get install -y opensc
<!--NeedCopy-->
スマートカード認証用のPAMモジュールをインストールする

次のコマンドを実行して、pam_krb5およびkrb5-pkinitモジュールをインストールします。

RHEL 7/CentOS 7:

yum install pam_krb5 krb5-pkinit
<!--NeedCopy-->

RHEL 9.1/9.0/8.x、Rocky Linux 9.1/9.0/8.x:

yum install krb5-pkinit
<!--NeedCopy-->

Ubuntu 22.04、Ubuntu 20.04、Ubuntu 18.04:

apt-get install libpam-krb5 krb5-pkinit
<!--NeedCopy-->

Debian 11.3:

apt-get install -y libpam-krb5 krb5-pkinit
<!--NeedCopy-->

pam_krb5モジュールは、プラグイン可能な認証モジュールです。PAM対応アプリケーションは、pam_krb5を使用してパスワードを確認し、キー配布センター(KDC)のチケット配布チケットを取得できます。krb5-pkinitモジュールにはPKINITプラグインが含まれていて、クライアントが秘密キーと証明書を使用してKDCから初期資格情報を取得できるようにします。

pam_krb5モジュールを構成する

pam_krb5モジュールはKDCと対話して、スマートカード内の証明書を使用してKerberosチケットを取得します。PAMでpam_krb5認証を有効にするには、次のコマンドを実行します:

authconfig --enablekrb5 --update
<!--NeedCopy-->

/etc/krb5.conf 構成ファイルに、実際の領域に応じたPKINIT情報を追加します。

注:

pkinit_cert_matchオプションは、クライアント証明書がPKINIT認証の試行に使用される前に一致する必要がある一致規則を指定します。一致規則の構文は次のとおりです:

[relation-operator] component-rule …

relation-operator&&(すべてのコンポーネント規則が一致する必要がある)または||(1つのコンポーネント規則のみが一致する必要がある)のいずれかを使用できます。

汎用krb5.confファイルの例を次に示します:

EXAMPLE.COM = {

    kdc = KDC.EXAMPLE.COM

    auth_to_local = RULE:[1:$1@$0]

    pkinit_anchors = FILE:<path where you install the root certificate>/certnew.pem

    pkinit_kdc_hostname = KDC.EXAMPLE.COM

    pkinit_cert_match = ||<EKU>msScLogin,<KU>digitalSignature

    pkinit_eku_checking = kpServerAuth

 }
<!--NeedCopy-->

構成ファイルは、PKINIT情報を追加した後、次のようになります。

PKINIT情報を追加

PAM認証を構成する

PAM構成ファイルは、どのモジュールをPAM認証に使用しているかを示します。pam_krb5を認証モジュールとして追加するには、/etc/pam.d/smartcard-authファイルに次の行を追加します:

auth [success=done ignore=ignore default=die] pam_krb5.so preauth_options=X509_user_identity=PKCS11:<path to the pkcs11 driver>/opensc-pkcs11.so

SSSDを使用した場合、変更後の構成ファイルは次のようになります。

SSSDを使用した場合の変更後の構成ファイル

(オプション)スマートカードを使用したシングルサインオン

シングルサインオン(SSO)とは、仮想デスクトップやアプリケーションの起動時にパススルー認証を実装するCitrixの機能を指します。この機能により、ユーザーがPINを入力する回数が減ります。Linux VDAでSSOを使用するには、Citrix Workspaceアプリを構成します。Windows VDAと同じ構成方法です。詳しくは、Knowledge Centerの記事CTX133982を参照してください。

Citrix Workspaceアプリでグループポリシーを構成するときは、次のようにスマートカード認証を有効にします。

Citrix Workspaceアプリでスマートカード認証を有効化

高速スマートカードログオン

高速スマートカードは、既存のHDX PC/SCベースのスマートカードリダイレクトの改良版です。遅延が大きいWAN環境でスマートカードを使用する場合のパフォーマンスが向上しています。詳しくは、「スマートカード」を参照してください。

Linux VDAは、以下のバージョンのCitrix Workspaceアプリで高速スマートカードをサポートしています:

  • Citrix Receiver for Windows 4.12
  • Windows向けCitrix Workspaceアプリ1808以降

クライアントで高速スマートカードログオンを有効にする

高速スマートカードログオンは、VDAではデフォルトで有効になっており、クライアントではデフォルトで無効になっています。クライアントで高速スマートカードログオンを有効にするには、関連するStoreFrontサイトのdefault.icaファイルに次のパラメーターを追加します:

[WFClient]
SmartCardCryptographicRedirection=On
<!--NeedCopy-->

クライアントで高速スマートカードログオンを無効にする

クライアントで高速スマートカードログオンを無効にするには、関連するStoreFrontサイトのdefault.icaファイルからSmartCardCryptographicRedirectionパラメーターを削除します。

XDPingの実行

上記の手順の完了後、Linux XDPingツールを使用してLinux VDA環境に一般的な構成の問題がないか確認することもできます。詳しくは、「XDPing」を参照してください。

使用状況

スマートカードを使用してLinux VDAにログオンする

SSOシナリオと非SSOシナリオの両方で、スマートカードを使用してLinux VDAにログオンできます。

  • SSOシナリオでは、キャッシュされたスマートカード証明書とPINを使用して、StoreFrontに自動的にログオンされます。StoreFrontでLinux仮想デスクトップセッションを開始すると、スマートカード認証のためにPINがLinux VDAに渡されます。
  • 非SSOシナリオでは、StoreFrontにログオンするために証明書を選択してPINを入力するよう求められます。

    PINを入力してStoreFrontにログオンする

StoreFrontでLinux仮想デスクトップセッションを開始すると、Linux VDAへのログオンのダイアログボックスが次のように表示されます。ユーザー名はスマートカードの証明書から抽出され、ログオン認証のためにPINをもう一度入力する必要があります。

この動作はWindows VDAと同じです。

ログオン認証

スマートカードを使用してセッションに再接続する

セッションに再接続するには、スマートカードがクライアントデバイスに接続されていることを確認します。スマートカードが接続されていないと再認証は失敗するため、Linux VDA側にグレーのキャッシュウィンドウが表示されてすぐに終了します。この場合、スマートカードの接続を促すメッセージは表示されません。

ただし、StoreFront側では、セッションに再接続したときにスマートカードが接続されていないと、StoreFront Webにより次のような通知が表示されることがあります。

スマートカードの挿入の画像

制限事項

LinuxディストリビューションとADの統合方法の限定的なサポート

  • スマートカードパススルー認証は、限られたLinuxディストリビューションとAD統合方法をサポートします。次のマトリックスを参照してください:

      Winbind SSSD Centrify
    Debian 11.3 はい はい はい
    RHEL 9.1/9.0 はい はい いいえ
    RHEL 8.7/8.6/8.4 はい はい はい
    RHEL 7.9、CentOS 7.9 はい はい はい
    Rocky Linux 9.1/9.0 はい はい いいえ
    Rocky Linux 8.7/8.6 はい はい いいえ
    Ubuntu 22.04/20.04/18.04 はい はい はい

スマートカード取り出し時の動作ポリシー

現在、Linux VDAはスマートカードの削除にデフォルトの動作のみを使用しています。Linux VDAに正常にログオンした後でスマートカードを取り外しても、セッションは接続されたままになり、セッション画面はロックされません。

他のスマートカードおよびPKCS#11ライブラリのサポート

Citrixは、汎用スマートカードリダイレクトのソリューションを提供します。サポート一覧にOpenSCスマートカードのみが表示されますが、他のスマートカードおよびPKCS#11ライブラリの使用を試すこともできます。特定のスマートカードまたはPKCS#11ライブラリに切り替えるには:

  1. PKCS#11ライブラリのすべてのopensc-pkcs11.soインスタンスを置き換えます。

  2. PKCS#11ライブラリからレジストリへのパスを設定するには、次のコマンドを実行します:

    /opt/Citrix/VDA/bin/ctxreg update -k "HKLM\System\CurrentControlSet\Control\Citrix\VirtualChannels\Scard" -v "PKCS11LibPath" -d "PATH"
    <!--NeedCopy-->
    

    PATHはPKCS#11ライブラリ(/usr/lib64/pkcs11/opensc-pkcs11.soなど)を参照します。

  3. クライアントで高速スマートカードログオンを無効にします。

スマートカード