如何使用 PAM 模組在 Linux 中使用 Rutoken 上的 GOST-2012 金鑰進行本機驗證

如何使用 PAM 模組在 Linux 中使用 Rutoken 上的 GOST-2012 金鑰進行本機驗證

簡單的密碼不安全,複雜的密碼難以記住。 這就是為什麼它們經常被貼在鍵盤下方或顯示器上的便籤上。 為了確保密碼留在「健忘」使用者的腦海中,並且不會失去保護的可靠性,採用了雙重認證 (2FA)。

由於擁有設備和了解其 PIN 碼相結合,PIN 碼本身可以更簡單、更容易記住。 PIN 長度或隨機性方面的缺點被實際擁有要求和 PIN 暴力破解限制所抵消。

此外,政府機構也希望一切都按照 GOST 進行。 我們將討論登入 Linux 的 2FA 選項。 我將從遠處開始。

PAM模組

可插入身份驗證模組 (PAM) 是具有標準 API 和應用程式中各種身份驗證機制實現的模組。
所有可與 PAM 配合使用的實用程式和應用程式都會選擇它們並使用它們進行使用者身份驗證。
實際上,它的工作原理如下:登入命令呼叫 PAM,PAM 使用設定檔中指定的模組執行所有必要的檢查,並將結果傳回給登入命令。

librtpam

Aktiv公司開發的模組根據國內密碼學的最新標準,使用非對稱密鑰添加了使用智慧卡或USB令牌的用戶的雙重認證。

我們來看看它的運作原理:

  • 令牌儲存使用者的憑證及其私鑰;
  • 此憑證會作為受信任保存在使用者的主目錄中。

身份驗證流程如下:

  1. Rutoken 搜尋使用者的個人憑證。
  2. 請求令牌 PIN。
  3. 隨機資料直接在 Rutoken 晶片中的私鑰上簽署。
  4. 使用使用者憑證中的公鑰驗證產生的簽章。
  5. 模組將簽名驗證結果傳回給呼叫應用程式。

您可以使用 GOST R 34.10-2012 金鑰(長度 256 或 512 位元)或過時的 GOST R 34.10-2001 進行驗證。

您不必擔心金鑰的安全性 - 它們直接在 Rutoken 中生成,並且在加密操作期間永遠不會離開其記憶體。

如何使用 PAM 模組在 Linux 中使用 Rutoken 上的 GOST-2012 金鑰進行本機驗證

Rutoken EDS 2.0 通過了 FSB 和 FSTEC 根據 NDV 4 的認證,因此它可以用於處理機密資訊的資訊系統。

實際使用

幾乎任何現代 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> - 這意味著一切都好。

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 驗證憑證並建立信任鏈。

最簡單的方法(透過瀏覽器)

若要取得測試證書,請使用 網路服務“Rutoken 註冊中心”。 該過程不會超過 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: 物件識別碼 (CKA_ID) 作為 ASCII 表中的兩位十六進位字元編號。 僅對可列印字元使用 ASCII 代碼,因為... id 需要作為字串傳遞給 OpenSSL。 例如,ASCII碼“3132”對應字串“12”。 為了方便起見,您可以使用 將字串轉換為 ASCII 代碼的線上服務.

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

接下來我們將建立一個憑證。 以下將介紹兩種方式:第一種是透過 CA(我們將使用測試 CA),第二種是自簽名。 為此,您首先需要安裝並設定 OpenSSL 版本 1.1 或更高版本,以便使用手冊透過特殊的 rtengine 模組與 Rutoken 一起使用 安裝和設定 OpenSSL.
例如:對於 '--id 3132' 在 OpenSSL 中您需要指定“pkcs11:id=12“。

您可以使用測試CA的服務,其中有很多,例如, 這裡, 這裡 и 這裡,為此我們將建立一個憑證請求

另一種選擇是屈服於懶惰並創建一個自簽名的
$ 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 檔案:

如何使用 PAM 模組在 Linux 中使用 Rutoken 上的 GOST-2012 金鑰進行本機驗證

如果您的證書如下所示:

如何使用 PAM 模組在 Linux 中使用 Rutoken 上的 GOST-2012 金鑰進行本機驗證

那麼您需要將憑證從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:此類模組必須傳回肯定響應。 如果模組呼叫的結果包含否定回應,則會導致身份驗證錯誤。 該請求將被刪除,但其餘模組將被呼叫。
  • Required:與 required 類似,但立即驗證失敗並忽略其他模組。
  • 足夠:如果在該模組之前沒有任何必需或足夠的模組傳回否定結果,則該模組將傳回肯定回應。 其餘模組將被忽略。
  • 可選:如果堆疊上沒有必需的模組,且沒有足夠的模組傳回正結果,則至少有一個可選模組必須傳回正結果。

完整文件內容 /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

如何使用 PAM 模組在 Linux 中使用 Rutoken 上的 GOST-2012 金鑰進行本機驗證

儲存文件,然後執行
$ sudo pam-auth-update
在出現的視窗中,在其旁邊加上一個星號 Rutoken PAM GOST 並按 OK

如何使用 PAM 模組在 Linux 中使用 Rutoken 上的 GOST-2012 金鑰進行本機驗證

8) 檢查設定

若要了解一切都已配置,但同時不失去登入系統的能力,請輸入指令
$ sudo login
輸入你的用戶名。 如果系統需要設備 PIN 碼,則一切配置均正確。

如何使用 PAM 模組在 Linux 中使用 Rutoken 上的 GOST-2012 金鑰進行本機驗證

9) 配置提取令牌時阻止計算機

包含在包裝中 libpam-pkcs11 包括實用程式 pkcs11_eventmgr, 它允許您在 PKCS#11 事件發生時執行各種操作。
用於設定 pkcs11_eventmgr 作為設定檔: /etc/pam_pkcs11/pkcs11_eventmgr.conf
對於不同的 Linux 發行版,當智慧卡或令牌被移除時導致帳戶被鎖定的命令會有所不同。 厘米。 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 發行版(包括國內發行版)的說明。

如何使用 PAM 模組在 Linux 中使用 Rutoken 上的 GOST-2012 金鑰進行本機驗證

結論

Linux PC 在俄羅斯政府機構中越來越受歡迎,在該作業系統中設定可靠的雙重認證並不總是那麼容易。 我們很樂意透過本指南幫助您解決“密碼問題”,並可靠地保護對您電腦的訪問,而無需花費大量時間。

來源: www.habr.com

添加評論