如何在Rutoken上使用GOST-2012密钥在Linux中使用PAM模块进行本地身份验证



简单的密码无法保护,复杂的密码也无法记住。 因此,它们经常出现在键盘下方的贴纸或显示器上。 为了使密码保留在“健忘”的用户头脑中,并且不会丢失保护的可靠性,我们采用了两因素认证(2FA)。

由于设备拥有权的因素和其PIN码的知识的结合,PIN码本身可以更简单,更容易记住。 PIN长度或随机性的不足可以通过物理所有权的要求和对PIN码搜索的限制来弥补。

此外,在州立机构中,碰巧他们希望一切都按照GOST进行。 关于此选项,将讨论2FA进入Linux。 我从远处开始。

PAM模块


可插拔身份验证模块(PAM)是具有标准API的模块以及应用程序中各种身份验证机制的实现。
可以与PAM一起使用的所有实用程序和应用程序都可以使用它们,并可以使用它们对用户进行身份验证。
实际上,这是这样的:login命令转到PAM,PAM使用配置文件中指定的模块执行所有必要的检查,然后将结果返回给login命令。

利培坦


由Active公司开发的模块根据国内加密技术的最新标准,通过使用非对称密钥的智能卡或USB令牌对用户进行两因素身份验证。

考虑其工作原理:
  • 令牌存储用户的证书及其私钥;
  • 证书以受信任的方式保存在用户的主目录中。


认证过程如下:
  1. Rutoken搜索用户的个人证书。
  2. 请求令牌PIN。
  3. 随机数据直接在Rutoken芯片中的私钥上签名。
  4. 使用用户证书中的公钥验证收到的签名。
  5. 该模块将签名验证的结果返回给调用应用程序。


您可以使用密钥GOST R 34.10-2012(长度256或512位)或过时的GOST R 34.10-2001进行身份验证。

无需担心密钥的安全性-密钥是直接在Rutoken中生成的,并且在加密操作期间永远不会离开他的内存。



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验证证书并建立信任链。


简单方法(通过浏览器)


要获得测试证书,请使用Rootoken注册中心Web服务 。 该过程将不超过5分钟。

怪胎路径(通过控制台和编译器)


检查OpenSC版本
$ opensc-tool --version
如果版本小于0.20,请在不晚于8cf1e6f commit的情况 从我们的GitHub(在本文发布时尚未发布0.20)或从OpenSC主项目的master分支中升级或收集具有GOST 2012支持的pkcs11-tool分支。

我们生成带有参数的密钥对:
--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》手册通过特殊的rtengine模块安装和配置OpenSSL 1.1版或更高版本,以与Rutoken一起使用。
例如:对于OpenSSL中的“ -id 3132 ”,您需要指定“ 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文件:



如果您的证书如下所示:



那么您需要将证书从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包含模块全名(默认情况下是否启用),模块优先级和身份验证参数的文件。
在身份验证参数中,要求操作成功:
  • 必需:此类模块应返回肯定的响应。 如果模块调用的结果包含否定答案,则将导致身份验证错误。 该请求将被重置,但其余模块将被调用。
  • 必要(必需):与必需类似,但立即导致身份验证失败,并忽略其余模块。
  • 足够:如果在此类模块之前,所有必需或足够的模块均未返回否定结果,则该模块将返回肯定答案。 其余模块将被忽略。
  • 可选(可选):如果堆栈中没有必需的模块,并且没有足够的模块返回肯定结果,则至少一个可选模块应返回肯定答案。

文件/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




保存文件,然后执行
$ sudo pam-auth-update
在出现的窗口中,在Rutoken PAM GOST附近放置一个星号,然后单击“ 确定”。



8)检查设置


要了解所有内容均已配置,但又不失去登录功能,请输入以下命令
$ sudo login
输入您的用户名。 如果系统需要设备PIN,则一切配置正确。



9)提取令牌时配置计算机锁


libpam-pkcs11软件包包括pkcs11_eventmgr,实用程序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发行版(包括本地发行版)中的说明。



结论


Linux PC在俄罗斯政府机构中变得越来越流行,在此OS中设置可靠的两因素身份验证并不总是那么容易。 我们将对本指南感到满意,可以帮助您解决“密码问题”并可靠地保护对PC的访问,而无需花费大量时间。

Source: https://habr.com/ru/post/zh-CN461199/


All Articles