Linux PAM_PKCS11 安装配置方法一
Centos5.5以下的版本适用于配置方法一,Centos5.5以上版本适用于配置方法二
1: 需要正确安装RunTime包,需要注意的是pam_pkcs11要求p11库文件必须为只读,所以更改libepsng_p11.so.1.2.2的读写权限 .
chmod a-w /usr/local/ngsrv/libepsng_p11.so.1.2.2
2:安装 pam_pkcs11,可以在http://www.opensc-project.org/pam_pkcs11/下载最新的源代码包,解压缩之后按照安装文档运行一下命令.
./configure
make
make install;
pam_pkcs11对应一些系统制作了RPM安装包,也可以直接安装这些编译好的安装包. 特别注意的是linux pam默认的模块路径在/lib/security/下,需要把安装的pam_pkcs11.so拷贝到/lib/security/目录.
cp /usr/local/lib/security/pam_pkcs11.so /lib/security/
3: 配置pam_pkcs11 .运行下列命令,创建一些目录.
mkdir /etc/pam_pkcs11
mkdir /etc/pam_pkcs11/cacerts
mkdir /etc/pam_pkcs11/crls
把CA的根证书拷贝到/etc/pam_pkcs11/cacerts目录
cp cert /etc/pam_pkcs11/cacerts
把证书吊销列表拷贝到/etc/pam_pkcs11/crls
cp crls /etc/pam_pkcs11/crls
然后创建hash link.
make_hash_link.sh /etc/pam_pkcs11/cacerts
make_hash_link.sh /etc/pam_pkcs11/crls
现在的版本改成了
pkcs11_make_hash_link /etc/pam_pkcs11/cacerts
pkcs11_make_hash_link /etc/pam_pkcs11/crls
把pam_pkcs11源码包中的etc目录下的示例配置文件pam_pkcs11.conf.example拷贝到系统/etc/pam_pkcs11/下,并且重命名为pam_pkcs11.conf ,修改这个配置文件,添加一个“pkcs11_module”,一个模块大致是这个样子:
1 # FeiTian ePass2000_FT11
2 pkcs11_module ePass {
3 module = /usr/lib/libepsng_p11.so
4 description = "FeiTian ePass2000_FT11";
5 slot_num = 0;
6 support_threads = false;
7 ca_dir = /etc/pam_pkcs11/cacerts;
8 crl_dir = /etc/pam_pkcs11/crls;
9 cert_policy = ca,signature;
10 }
在pam_pkcs11.conf配置文件中,以#作注释行的标标识, 第2行是指定这个模块名为”ePass”, 第3行指定PKCS11共享库的路径. 第4行是这个库的描述信息, 第5行是指定使用的slot号,默认为0,表示使用第一个有token的slot. 第6行表示是否支持多线程,保守期间可以不支持. 第7,8行是指定ca_dir,crl_dir. 第9行是指定证书的验证机制.
"none"为不进行验证,
"ca"用ca_dir的根证书验证用户证书是否为根证书颁发.
"signature"做一次签名确认公私钥是否匹配.
"crl_online"下载证书的吊销列表.
"crl_offline"用crl_dir指定的证书吊销列表.
"crl_auto"先下载证书吊销列表,如果失败就用crl_dir指定的证书吊销列表.
然后指定“use_pkcs11_module”数据项为刚创建的pkcs_module,目前为止只支持指定一个模块.
use_pkcs11_module = ePass;
修改一个”mapper”,以”mail mapper”为例,
1 # mail - Compare email field from certificate
2 mapper mail {
3 debug = true;
4 module = internal;
5 # module = /usr/lib/pam_pkcs11/mail_mapper.so;
6 # Declare mapfile or
7 # leave empty "" or "none" to use no map
8 mapfile = file:///etc/pam_pkcs11/mail_mapping;
9 # Some certs store email in uppercase. take care on this
10 ignorecase = true;
11 # Also check that host matches mx domain
12 # when using mapfile this feature is ignored
13 ignoredomain = false;
14 }
第8行指定”mail mapper”文件为”/etc/pam_pkcs11/mail_mapping” 修改配置“use_mappers”,指定为“mail”,可以指定多个”mapper”.
use_mappers = mail;
一个”mail_mapping”文件存储邮件地址到linux用户名的映射关系,文件内容类似于:
mailadd1 -> user1
mailadd2 -> user2
4: 智能卡登录
修改/etc/pam.d/login这个文件,在文件顶部增加一句“auth sufficient pam_pkcs11.so”,这样在终端登录linux的时候,输入用户名时输入空格,接下来就会提示输入智能卡的密码,pam_pkcs11读取智能卡的证书,并且分析证书中的mail地址,根据这个地址映射到一个用户名,然后用根证书验证这个证书的合法性,如果这个证书有效,将会用映射到的用户名登录linux系统。
类似的,也可以修改其他的程序的配置文件,例如:su,gdm(gnome桌面登录程序),xdm(X窗口登录),xscreensaver(屏保应用程序)。
在最近的一些linux发行版中会有图形化的配置工具,以Fedora 6为例,在菜单选择system→administration→Authentication,在对话框中选择Authentication →smart card,然后enable smart card support.这样登陆的时候就会提示你输入智能卡密码了。
5:锁屏
把pam_pkcs11源码目录下的etc目录下的示例配置文件pkcs11_eventmgr.conf.example拷贝到系统/etc/pam_pkcs11/下,并且重命名为pkcs11_eventmgr.conf,
修改“pkcs11_module = /usr/lib/opensc-pkcs11.so;”为“pkcs11_module = /usr/lib/libepsng_p11.so;”.运行pkcs11_eventmgr,此时拔锁,就会锁屏。插上锁,输入锁的pin码就可以登录。
在早期的linux发行版中没有pam_pkcs11,而在最近的一些linux发行版中已经附带pam_pkcs,但是这些附带的pam_pkcs11可能有些问题,如果碰到问题,请安装最新版的pam_pkcs11.另外pam_pkcs11倚赖libcrypto.so库,而在Fedora core 7和Fedora 8发行版中的libcrypto.so在验证证书时会失败,需要升级这个库,或者简单的把Fedora Core 6发行版中的共享库拷贝过来,因为他们都是0.9.8b版本的Openssl.
Linux PAM_PKCS11 安装配置方法二
1.系统环境:Centos5.5以下的版本适用于配置方法一,Centos7.0适用于配置方法二
2.采用系统自带PAM文件
3.新建如下目录:
Mkdir /etc/pam_pkcs11/nssdb
为nssdb文件夹赋权限
chmod 700 /etc/pam_pkcs11/nssdb
#certutil -d /etc/pam_pkcs11/nssdb -N
(1)/etc/pkcs_pam/pam_pkcs11配置pam_pkcs11.conf
需要将飞天ePass3003的.so库拷贝到/lib64/libshuttle_p11v220.so.1.0.0
# FeiTian ePass3003
pkcs11_module ePass {
module = /lib64/libshuttle_p11v220.so.1.0.0 ;
description = "FeiTian ePass3003";
slot_num = 0;
support_threads = false;
nss_dir=/etc/pam_pkcs11;
cert_policy = ca,signature;
}
指定“use_pkcs11_module”数据项为刚创建的pkcs_module,目前为止只支持指定一个模块.
use_pkcs11_module = ePass; 或者 通过终端输入命令 :pkcs11_setup use_module=ePass (=号两端不能有空格)
修改一个”mapper”,以”mail mapper”为例,
1 # mail - Compare email field from certificate
2 mapper mail {
3 debug = true;
4 module = internal;
5 mapfile = file:///etc/pam_pkcs11/mail_mapping;
6 # Some certs store email in uppercase. take care on this
7 ignorecase = true;
8 # Also check that host matches mx domain
9 # when using mapfile this feature is ignored
10 ignoredomain = false;
11 }
第8行指定”mail mapper”文件为”/etc/pam_pkcs11/mail_mapping” 修改配置“use_mappers”,指定为“mail”,可以指定多个”mapper”.
mail_mapping 内容如下示例:
test@mail.page -> test (指向符两端要有一个空格)
修改/etc/pam.d/login这个文件,在文件顶部增加一句“auth sufficient pam_pkcs11.so”,这样在终端登录linux的时候,输入用户名时输入空格,接下来就会提示输入智能卡的密码,pam_pkcs11读取智能卡的证书,并且分析证书中的mail地址,根据这个地址映射到一个用户名,然后用根证书验证这个证书的合法性,如果这个证书有效,将会用映射到的用户名登录linux系统
如果报以下错误,请输入如下命令:
ERROR:pam_pkcs11.c:500:verifty_certificate() failed ;
ERROR:pam_pkcs11.c:552:no vaild certificate which meets all requirements found
*******Note******最后请输入以下命令:
Certutil -A -n EscA -t pCcT,pCcT,pCcT -i Certnew_base64.cer -d /etc/pam_pkcs11/nssdb/
配置过程中,如果有其他报错,可以通过命令pkcs11_listcerts debug 查看报错信息,进行调试。