Rutoken の GOST-2012 キーを使用して Linux でローカル認証に PAM モジュールを使用する方法

Rutoken の GOST-2012 キーを使用して Linux でローカル認証に PAM モジュールを使用する方法

単純なパスワードは安全ではなく、複雑なパスワードは覚えることが不可能です。 そのため、キーボードの下やモニターの上に付箋が貼り付けられてしまうことがよくあります。 パスワードが「忘れやすい」ユーザーの記憶に残り、保護の信頼性が失われないようにするために、2 要素認証 (XNUMXFA) があります。

デバイスの所有とその PIN の知識の組み合わせにより、PIN 自体がよりシンプルになり、覚えやすくなります。 PIN の長さやランダム性に関する欠点は、物理的所有要件と PIN ブルート フォースの制限によって相殺されます。

さらに、政府機関では、すべてがGOSTに従って機能することを望んでいます。 Linux にログインするためのこの 2FA オプションについて説明します。 遠くから始めます。

PAMモジュール

Pluggable Authentication Modules (PAM) は、標準 API とアプリケーション内のさまざまな認証メカニズムの実装を備えたモジュールです。
PAM と連携できるすべてのユーティリティとアプリケーションは、それらを取得し、ユーザー認証に使用できます。
実際には、次のように動作します。ログイン コマンドは PAM を呼び出します。PAM は、構成ファイルで指定されたモジュールを使用して必要なチェックをすべて実行し、結果をログイン コマンドに返します。

リブリトパム

Aktiv 社が開発したモジュールは、最新の国内暗号化規格に準拠した非対称キーを使用したスマート カードまたは USB トークンを使用するユーザーの XNUMX 要素認証を追加します。

その動作原理を見てみましょう。

  • トークンにはユーザーの証明書とその秘密キーが保存されます。
  • 証明書は信頼できるものとしてユーザーのホーム ディレクトリに保存されます。

認証プロセスは次のように発生します。

  1. Rutoken はユーザーの個人証明書を検索します。
  2. トークン PIN が要求されます。
  3. ランダム データは、Rutoken チップ内の秘密鍵で直接署名されます。
  4. 結果の署名は、ユーザーの証明書の公開キーを使用して検証されます。
  5. モジュールは署名検証結果を呼び出し側アプリケーションに返します。

GOST R 34.10-2012 キー (長さ 256 または 512 ビット) または古い GOST R 34.10-2001 を使用して認証できます。

キーのセキュリティについて心配する必要はありません。キーは Rutoken で直接生成され、暗号化操作中にメモリから離れることはありません。

Rutoken の GOST-2012 キーを使用して Linux でローカル認証に PAM モジュールを使用する方法

Rutoken EDS 2.0 は、NDV 4 に従って FSB および FSTEC によって認定されているため、機密情報を処理する情報システムで使用できます。

実用化

ほとんどすべての最新の Linux で使用できます。たとえば、xUbuntu 18.10 を使用します。

1) 必要なパッケージをインストールします

sudo apt-get install libccid pcscd opensc
スクリーンセーバー付きのデスクトップロックを追加したい場合は、パッケージを追加でインストールしてください libpam-pkcs11.

2) GOST サポートを備えた PAM モジュールを追加する

からライブラリをロードしています https://download.rutoken.ru/Rutoken/PAM/
PAM フォルダー librtpam.so.1.0.0 の内容をシステム フォルダーにコピーします。
/usr/lib/ または /usr/lib/x86_64-linux-gnu/または /usr/lib64

3) librtpkcs11ecp.so を使用してパッケージをインストールします

リンクから DEB または RPM パッケージをダウンロードしてインストールします。 https://www.rutoken.ru/support/download/pkcs/

4) Rutoken EDS 2.0 がシステムで動作することを確認します。

ターミナルで実行します
$ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -T
線が見えたら Rutoken ECP <no label> - それはすべてがOKであることを意味します。

5) 証明書を読む

デバイスに証明書があることを確認する
$ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -O
次の行の後にある場合:
Using slot 0 with a present token (0x0)

  • 情報が表示される キーと証明書については、証明書を読み取り、ディスクに保存する必要があります。 これを行うには、次のコマンドを実行します。ここで、{id} の代わりに、前のコマンドの出力に表示された証明書 ID を置き換える必要があります。
    $ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -r -y cert --id {id} --output-file cert.crt
    cert.crt ファイルが作成されている場合は、手順 6) に進みます。
  • 何もないの場合、デバイスは空です。 管理者に問い合わせるか、次の手順に従って自分でキーと証明書を作成します。

5.1) テスト証明書を作成する

注意! 説明されているキーと証明書の作成方法はテストに適しており、戦闘モードでの使用を目的としていません。 これを行うには、組織の信頼された認証局または認定された認証局によって発行されたキーと証明書を使用する必要があります。
PAM モジュールは、ローカル コンピューターを保護するように設計されており、小規模な組織で機能するように設計されています。 ユーザーが少ないため、管理者は証明書の失効を監視し、アカウントを手動でブロックしたり、証明書の有効期間を監視したりできます。 PAM モジュールは、CRL を使用して証明書を検証し、信頼チェーンを構築する方法をまだ知りません。

簡単な方法(ブラウザ経由)

テスト証明書を取得するには、次を使用します。 Webサービス「ルト研登録センター」。 このプロセスには 5 分もかかりません。

オタクのやり方 (コンソールと場合によってはコンパイラ経由)

OpenSCのバージョンを確認する
$ opensc-tool --version
バージョンが 0.20 未満の場合は、更新またはビルドします GOST-11 をサポートする pkcs2012-tool ブランチ GitHub (この記事の時点ではリリース 0.20 はまだリリースされていません)、またはメインの OpenSC プロジェクトの master ブランチから コミット8cf1e6f

次のパラメータを使用してキー ペアを生成します。
--key-type: GOSTR3410-2012-512:А (ГОСТ-2012 512 бит c парамсетом А), GOSTR3410-2012-256:A (ГОСТ-2012 256 бит с парамсетом A)

--id: ASCII テーブルからの 3132 桁の 12 進数文字としてのオブジェクト識別子 (CKA_ID)。 印刷可能な文字には ASCII コードのみを使用してください。 ID は文字列として OpenSSL に渡す必要があります。 たとえば、ASCII コード「XNUMX」は文字列「XNUMX」に対応します。 便宜上、使用できます 文字列を ASCII コードに変換するオンライン サービス.

$ ./pkcs11-tool --module /usr/lib/librtpkcs11ecp.so --keypairgen --key-type GOSTR3410-2012-512:A -l --id 3132

次に証明書を作成していきます。 以下に 1.1 つの方法について説明します。XNUMX つ目は CA を使用する方法 (テスト CA を使用します)、XNUMX つ目は自己署名です。 これを行うには、まず、マニュアルを使用して特別な rtengine モジュールを通じて Rutoken と連携するように OpenSSL バージョン XNUMX 以降をインストールして構成する必要があります。 OpenSSL のインストールと構成.
例: 「-」の場合-id 3132' OpenSSL では、" を指定する必要がありますpkcs11:id=12"

テスト CA のサービスを使用できます。たとえば、次のようなサービスが多数あります。 ここで, ここで и ここで、このために、証明書のリクエストを作成します。

もう XNUMX つの選択肢は、怠惰に負けて自己署名ファイルを作成することです。
$ openssl req -utf8 -new -keyform engine -key "pkcs11:id=12" -engine rtengine -out req.csr

証明書をデバイスにアップロードする
$ openssl req -utf8 -x509 -keyform engine -key "pkcs11:id=12" -engine rtengine -out cert.cer

6) 証明書をシステムに登録します

証明書が Base64 ファイルのようであることを確認してください。

Rutoken の GOST-2012 キーを使用して Linux でローカル認証に PAM モジュールを使用する方法

証明書が次のようになっている場合:

Rutoken の GOST-2012 キーを使用して Linux でローカル認証に PAM モジュールを使用する方法

次に、証明書を DER 形式から PEM 形式 (base64) に変換する必要があります。

$ openssl x509 -in cert.crt -out cert.pem -inform DER -outform PEM
すべてが順調であることを再度確認します。

信頼できる証明書のリストに証明書を追加します。
$ mkdir ~/.eid
$ chmod 0755 ~/.eid
$ cat cert.pem >> ~/.eid/authorized_certificates
$ chmod 0644 ~/.eid/authorized_certificates

最後の行は、信頼できる証明書のリストが他のユーザーによって誤ってまたは意図的に変更されないように保護します。 これにより、誰かが自分の証明書をここに追加して、あなたの代わりにログインすることができなくなります。

7) 認証の設定

PAM モジュールのセットアップは完全に標準であり、他のモジュールのセットアップとまったく同じ方法で行われます。 ファイルに作成 /usr/share/pam-configs/rutoken-gost-pam モジュールの完全名、デフォルトで有効かどうか、モジュールの優先順位、認証パラメータが含まれます。
認証パラメータには、操作を成功させるための要件が​​含まれています。

  • required: このようなモジュールは肯定的な応答を返す必要があります。 モジュール呼び出しの結果に否定応答が含まれる場合、認証エラーが発生します。 リクエストは破棄されますが、残りのモジュールが呼び出されます。
  • requisite: required と似ていますが、認証はすぐに失敗し、他のモジュールを無視します。
  • 十分: そのようなモジュールの前に必要なモジュールまたは十分なモジュールがいずれも否定的な結果を返さなかった場合、モジュールは肯定的な応答を返します。 残りのモジュールは無視されます。
  • オプション: スタック上に必須のモジュールがなく、十分なモジュールがいずれも肯定的な結果を返さない場合、少なくとも XNUMX つのオプションのモジュールが肯定的な結果を返す必要があります。

ファイルの完全な内容 /usr/share/pam-configs/rutoken-gost-pam:
Name: Rutoken PAM GOST
Default: yes
Priority: 800
Auth-Type: Primary
Auth: sufficient /usr/lib/librtpam.so.1.0.0 /usr/lib/librtpkcs11ecp.so

Rutoken の GOST-2012 キーを使用して Linux でローカル認証に PAM モジュールを使用する方法

ファイルを保存してから実行します
$ sudo pam-auth-update
表示されるウィンドウで、 の横にアスタリスクを入力します。 ルトケン PAM GOST そして押します OK

Rutoken の GOST-2012 キーを使用して Linux でローカル認証に PAM モジュールを使用する方法

8) 設定を確認する

すべてが設定されていることを理解しながら、同時にシステムにログインできるようにするには、次のコマンドを入力します。
$ sudo login
ユーザー名を入力して下さい。 システムでデバイスの PIN コードが必要な場合は、すべてが正しく構成されています。

Rutoken の GOST-2012 キーを使用して Linux でローカル認証に PAM モジュールを使用する方法

9) トークンの抽出時にコンピュータをブロックするように設定します。

パッケージに含まれるもの libpam-pkcs11 ユーティリティ付属 pkcs11_eventmgr, これにより、PKCS#11 イベントが発生したときにさまざまなアクションを実行できるようになります。
設定用 pkcs11_eventmgr 構成ファイルとして機能します。 /etc/pam_pkcs11/pkcs11_eventmgr.conf
Linux ディストリビューションが異なると、スマート カードまたはトークンが取り外されたときにアカウントをロックするコマンドが異なります。 Cm。 event card_remove.
構成ファイルの例を以下に示します。

pkcs11_eventmgr
{
    # Запуск в бэкграунде
    daemon = true;
     
    # Настройка сообщений отладки
    debug = false;
 
    # Время опроса в секундах
    polling_time = 1;
 
    # Установка тайм-аута на удаление карты
    # По-умолчанию 0
    expire_time = 0;
 
    # Выбор pkcs11 библиотеки для работы с Рутокен
    pkcs11_module = usr/lib/librtpkcs11ecp.so;
 
    # Действия с картой
    # Карта вставлена:
    event card_insert {
        # Оставляем значения по умолчанию (ничего не происходит)
        on_error = ignore ;
 
        action = "/bin/false";
    }
 
    # Карта извлечена
    event card_remove {
        on_error = ignore;
         
        # Вызываем функцию блокировки экрана
        
        # Для GNOME 
        action = "dbus-send --type=method_call --dest=org.gnome.ScreenSaver /org/gnome/ScreenSaver org.gnome.ScreenSaver.Lock";
        
        # Для XFCE
        # action = "xflock4";
        
        # Для Astra Linux (FLY)
        # action = "fly-wmfunc FLYWM_LOCK";
    }
 
    # Карта долгое время извлечена
    event expire_time {
        # Оставляем значения по умолчанию (ничего не происходит)
        on_error = ignore;
 
        action = "/bin/false";
    }
}

その後、アプリケーションを追加します pkcs11_eventmgr スタートアップへ。 これを行うには、.bash_profile ファイルを編集します。
$ nano /home/<имя_пользователя>/.bash_profile
ファイルの最後に pkcs11_eventmgr という行を追加し、再起動します。

ここで説明するオペレーティング システムのセットアップ手順は、国内の Linux ディストリビューションを含む最新の Linux ディストリビューションの手順として使用できます。

Rutoken の GOST-2012 キーを使用して Linux でローカル認証に PAM モジュールを使用する方法

まとめ

ロシア政府機関では Linux PC の人気が高まっていますが、この OS で信頼性の高い XNUMX 要素認証を設定するのは必ずしも簡単ではありません。 このガイドを使用して「パスワードの問題」を解決し、多くの時間を費やすことなく PC へのアクセスを確実に保護できるよう喜んでお手伝いいたします。

出所: habr.com

コメントを追加します