前言
CAS客户端中提供了PAM模块,PAM模块是可插拔的认证模块,使用PAM模块可以配置系统的认证模块。
CAS的PAM模块前期是由YALE公司维护的,可现在根据官网介绍说,PAM模块交由一家法国的机构(ESUP)在做维护,暂且不管谁在维护,只要能用就行。
需要提醒的是,ESUP官网是法文滴,借助翻译工具,大体意思还是可以整明白滴。
我的环境是这样的,一台机器安装了Redhat系统用来配置PAM模块,CAS服务器在我本机。
具体的演示流程为:
我为LINUX主机配置PAM模块后,当我要连接LINUX主机时,我提供两个参数,一个是用户名,一个是ST or PT,PAM收到参数后会根据配置文件的设置去请求CAS服务器,用来验证此票据是否合法,如果合法则成功连接LINUX主机,否则失败。
现在将具体的配置方法分为以下几个步骤讲解
1:下载PAM源码
2:解压缩
3:编绎源码
4:配置pam_cas.conf
5:测试
6:配置系统的PAM模块
在整个配置过程中,我参考的是官网提供的资料
ESUP官方的介绍文档地址为:
http://www.esup-portail.org/display/PROJPAMCAS/Module+PAM+pour+CAS(法文)
http://www.esup-portail.org/pages/viewpage.action?pageId=3932339(法文)
ja-sig官方的介绍文档:
http://www.ja-sig.org/wiki/display/CASC/PAM+Module(英文)
一:下载PAM源码
PAM的下载地址为:http://sourcesup.cru.fr/frs/?group_id=213
其目前最新版本是:Pam_cas-2.0.11-esup-2.0.5
看来已经很久没更新了。
将下载的压缩文件放在Redhat系统的一个目录下,比如我的目录为:/usr/local/pam/
二:解压缩
进入到/usr/local/pam目录下,解压文件
#tar zxvf Pam_cas-2.0.11-esup-2.0.5.tar.gz
解压之后因名字有点长,改名为"pam_cas"
#mv Pam_cas-2.0.11-esup-2.0.5 pam_cas
三:编译源码
进入"pam_cas"目录
[root@localhost pam]# cd pam_cas
查看文件夹
cert //证书库文件
CHANGELOG //版本升级日志
INSTALL //安装手册
LICENCE //许可协议
pam_cas.conf //核心配置文件
README
sources //源码包
就那么几个文件夹,提供的那个安装手册可以忽略不计,官网都有的,主要的只有pam_cas.conf和source文件夹
我们进入source文件夹,其中提供三个Makefile文件,其后缀一个是redhat,一个是hpux,一个是solaris,很明显的意思是指对不同的系统应使用不同的安装文件。在这个地方我可浪费了不少时间,为了验证是否可以在其它Linux主机上使用,我分别用了Ubuntu\Debian,对于使用Makefile.redhat文件,除了redhat外,其它系统要想编绎成功简直是难啊,也可能真的只支持官方提供的这三个系统。
我的实验系统是redhat,所以我选用Makefile.redhat文件来安装,执行make命令指定会出错的,提示说找不到makefile文件,按照资料提示,需要将Makefile.redhat文件的后缀去掉:
[root@localhost sources]# mv Makefile.redhat Makefile
编绎源文件:
[root@localhost sources]# make
gcc -O2 -I /usr/include/openssl -I /usr/kerberos/include -c -o pam_cas.o pam_cas.c
gcc -O2 -I /usr/include/openssl -I /usr/kerberos/include -c -o cas_validator.o cas_validator.c
gcc -O2 -I /usr/include/openssl -I /usr/kerberos/include -c -o xml.o xml.c
gcc -O2 -I /usr/include/openssl -I /usr/kerberos/include -c -o read_config.o read_config.c
gcc -o pam_cas.so pam_cas.o cas_validator.o xml.o read_config.o -lssl -lcrypto -lpam -shared
这时便编绎出了pam_cas.so文件
官网资料说提供了一个测试工具"castest",如果要使用此工具,使用命令"make test"来对源码进行编绎,来试试:
[root@localhost sources]# make test
gcc -O2 -I /usr/include/openssl -I /usr/kerberos/include -c -o castest.o castest.c
gcc -o castest castest.o pam_cas.o cas_validator.o xml.o read_config.o -I /usr/include/openssl -I /usr/kerberos/include -lssl -lcrypto -lpam
[root@localhost sources]# ls
cas.h castest.o Makefile pam_cas.c read_config.c xml.h
castest cas_validator.c Makefile.hpux pam_cas.o read_config.o xml.o
castest.c cas_validator.o Makefile.solaris pam_cas.so xml.c
有源码真是好,想了解PAM的实现机制的就请看看源码吧,经过我简单的看了一下源码,其实"castest"工具和PAM模块都是实现了共同的接口"cas_validator.c"。
现在源码算是编绎完成了,接下来就该配置了。
四:配置pam_cas.conf
将"pam_cas.conf"文件拷贝至"/etc/"目录下,然后打开编辑:
[root@localhost pam_cas]# cp pam_cas.conf /etc/
[root@localhost pam_cas]# vim /etc/pam_cas.conf
该文件有以下几个参数:
host //CAS服务器的IP地址
uriValidate //票据的验证地址
ssl //是否使用SSL
debug //是否使用DEBUG模式
proxy //代理地址
trusted_ca //证书库地址
在我这次配置中先不使用SSL,之后再介绍SSL的配置
我的配置为:
host 10.10.10.31
port 8080
uriValidate /cas/serviceValidate
ssl off
debug off
如果SSL设置为off,那么就不会读到trusted_ca属性,所以也就不用配置了。
这样配置好之后,基本就算完事了,接下来就要使用测试工具"castest"来进行测试
五:测试
在前面已经提到过PAM模块的运行流程,那么castest这个工具类虽然是C编写的,但和JAVA一样,有个main方法就可以单独执行的,它们都是实现了共同的接口来与CAS服务器进行通信,castest的格式为:
$PAM_CAS_SOURCES/castest <service> <ticket> <fichier_de_configuration>
service:这个参数是申请票据时所提供的回调地睛
ticket:这个参数为申请到的票据
fichier_de_configuration:这个参数是配置文件的位置,因为接口默认读取配置文件为/etc/pam_cas.conf,之前我们已经拷贝过去了,所以这里不需要再次指定该参数。
从这个格式来看,castest需要两个参数,如果这两个参数也没有指定的话,源码中已经提供了默认的参数值。
了解了CAS服务器运行原理的朋友应该都知道,验证一个票据是否合法,那么service是一个重要的因素,如果验证票据时所提供的service与申请票据时所提供的service不一样,那么该票据就属于非法的了,当然,如果合法的话,只要票据已经验证通过了,那么再次验证的话,也是属于非法的,因为票据是一次性的嘛。
看来要想执行castest命令,还得先申请一个票据才行,并且这个票据还是未经过验证的。
从CAS服务器的运行原理看,要申请一个票据还是很简单的,只要提供一个service地址,那么CAS服务器在完成用户账号的认证后会将票据返回到service指向的地址中。
那么我的方法是极其简单的,我创建了一个WEB工程,该工程有index.jsp页面,我的代码是这样写的:
<%
if(request.getParameter("ticket") == null){
%>
<a href="http://10.10.10.31:8080/cas/login?service=http://10.10.10.31:8080/ApplyST">申请ST</a>
<%
}else{
out.println(“ST为 :”+request.getParameter("ticket").trim());
}
%>
测试用嘛,能简单的就尽量简单,其实之前我也写了一个比较复杂的CAS客户端,并且还是用swing写的,主要作用是用来支持C/S模式的应用程序,因为CAS使用http/https协议的,如果要将C/S模式的应用程序也实现SSO的话,就得有个通用的中间件来提供相关的接口了,有点跑题,Sorry。
我这个源码很简单吧,我的工程名字叫“ApplyST”
我先访问我这个工程的index.jsp页面,然后点击"申请ST"链接,这时跳转到CAS服务器的登录界面,输入账号口 令后,浏览器重定向到我这个工程的index.jsp页面,然后显示出申请到的ST。
我们运行一下,看得到的票据是什么(别忘了启动CAS服务器)
ST-2-uJZvbgCzl7RES0L1TMlQ-cas
这个就是我获得的ST票据
OK,得到票据的问题解决了,那么下面我们来执行castest来看看效果:
注意,我申请票据时提供的service地址为http://10.10.10.31:8080/ApplyST,所以这里也要使用这个地址
执行casteset命令
[root@localhost sources]# ./castest http://10.10.10.31:8080/ApplyST ST-2-uJZvbgCzl7RES0L1TMlQ-cas
configFile = /etc/pam_cas.conf
---------------------------------------------------------------
Parameters from test :
host = 10.10.10.31
port = 8080
uri = /cas/serviceValidate
ssl = off
trusted_ca = /usr/local/pam/cer/ca-root.pem
debug = localtest
proxy = https://imp.its.yale.edu/cas/casProxy.php
proxy = https://uportal1.its.yale.edu/CasProxyServlet
proxy = https://uportal2.its.yale.edu/CasProxyServlet
service = http://10.10.10.31:8080/ApplyST
ticket = ST-2-uJZvbgCzl7RES0L1TMlQ-cas
---------------------------------------------------------------
---- request :
GET /cas/serviceValidate?ticket=ST-2-uJZvbgCzl7RES0L1TMlQ-cas&service=http://10.10.10.31:8080/ApplyST HTTP/1.1
Connection: close
Host: 10.10.10.31
---- response :
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: text/html
Content-Language: zh-CN
Content-Length: 173
Date: Wed, 12 May 2010 03:05:02 GMT
Connection: close
<cas:serviceResponse xmlns:cas='http://www.yale.edu/tp/cas'>
<cas:authenticationSuccess>
<cas:user>jcbay</cas:user>
</cas:authenticationSuccess>
</cas:serviceResponse>
---------------------------------------------------------------
valid ticket for 'jcbay'
所打印出来的信息还是很详细的,首先是扫行命令后,开始读取配置文件,将接收到的service和ticket参数值进行填入,
然后输出的就是请求头和响应头,最后结果是输出认证的账号名。
OK,到这里,使用castest来测试已经成功通过了,下面将进行的是配置系统的PAM模块
六:配置系统的PAM模块
首先我们先将编绎好的pam_cas.so文件放到/lib/security目录下
[root@localhost sources]# cp pam_cas.so /lib/security
然后进入到/etc/pam.d,look一下,很多文件啊,都是对应于不同的动作,比如我们常用的ssh操作所对应的文件就是sshd。这次我们就拿ssh来开刀,其实对于其它动作的配置都是一样的,大家也可以配置其它文件,比如login。
编辑sshd文件:
auth sufficient /lib/security/pam_cas.so -shttp://10.10.10.31:8080/ApplyST -f/etc/pam_cas.conf
加入上面的命令,
auth:验证类型,表示对使用者身份进行验证,提示输入账号和密码
sufficient:验证规则,表示如果该项验证成功后,则不再执行其后所有的验证
接下来的3个参数:
1:.so文件的位置
2:service参数
3:配置文件路径
配置好之后,我们就可以进行测试了
测试方法是:
先申请ST
注意:申请ST时所填写的账号一定要在redhat系统中存在的,这是由于PAM代码中已经做了验证了
打开SSH终端,连接redhat主机,账号为系统账号,密码则填写ST,看是否能登录成功吧。
分享到:
相关推荐
其中,PAM(Pluggable Authentication Modules)模块是一个非常重要的组件,它提供了灵活的身份验证机制,并且可以通过配置来实现密码复杂度的要求。本文将详细介绍如何通过PAM模块中的`pam_cracklib.so`来控制Linux...
PAM 模块的配置文件通常位于 /etc/pam.d/ 目录下,每个应用程序都有一个对应的配置文件。配置文件的内容包括模块类型、控制标志和参数。 控制标志 控制标志是 PAM 模块的重要组成部分,决定了模块的行为。常见的...
在 Linux-PAM 模块中,验证机制是通过配置文件来实现的。系统管理员可以通过编辑配置文件来选择合适的验证机制。 Linux-PAM 模块还提供了一些预定义的验证机制,如基于密码的验证机制、基于智能卡的验证机制等。 ...
每个服务都有一个对应的配置文件,其中包含了需要加载的PAM模块及其参数。这些模块按照特定的顺序执行,完成认证、授权、账户管理和会话管理等任务。 **pam_chroot的作用:** 1. **安全隔离**:`pam_chroot`主要...
这个包在Linux系统中扮演着至关重要的角色,它管理着系统的用户密码信息,与PAM(Pluggable Authentication Modules)紧密协作,确保密码的安全性和复杂度。让我们深入探讨一下其中涉及的知识点。 `shadow` 包是...
系统管理员通过 PAM 配置文件来制定认证策略,应用程序开发者通过在服务程序中使用 PAM API 而实现对认证方法的调用,而 PAM 服务模块的开发者则利用 PAM SPI(Service Module API)来编写认证模块,将不同的认证...
该文档适用于,对linux 有一定了解,从事或者正要从事linux pam模块开发的同学
PAM的核心思想是模块化,它允许系统管理员选择和配置不同的认证模块,这些模块可以处理密码验证、智能卡验证、生物识别等多种认证方式。当用户尝试登录系统时,PAM会根据配置的策略调用相应的模块进行认证。这种设计...
### pam常用模块详解 #### PAM (Pluggable Authentication Modules) 概述 PAM(可插拔认证模块)是一种灵活的身份验证框架,为Linux和其他类Unix系统提供了一个统一的接口来实现各种不同的认证机制。这使得系统...
NULL 博文链接:https://dingody.iteye.com/blog/1978152
**PAM(Pluggable Authentication Modules)在Linux系统中的应用** PAM,即插拔式认证模块,是...而"pam.ppt"这个文件可能是关于PAM的详细讲解,包含了更深入的技术细节和实践指导,对学习和理解PAM会有很大帮助。
5. PAM模块配置 PAM模块是Linux系统中的一种身份认证机制。这里需要编辑/etc/pam.d/sshd文件,添加pam_radius_auth模块,以便实现身份认证。 6. 结论 Linux基于Pam_radius整合身份认证可以提供强大且灵活的身份...
集成这样的模块需要对PAM框架有深入理解,包括PAM的配置文件结构、模块接口以及如何在代码中正确地调用PAM API。同时,还需要遵循Apple的安全指南,确保在处理敏感数据和用户生物特征时符合最佳实践。 总的来说,...
Linux-PAM(可插拔身份验证模块)是Linux操作系统中的一种身份验证机制,它允许管理员和开发者灵活地管理和配置不同的身份验证策略。PAM的主要目的是解决传统Linux系统中验证功能与应用程序紧密耦合的问题,使得身份...
PAM库随后根据配置文件加载相应的服务模块进行验证。 3. **配置文件**:PAM配置文件存储于`/etc/pam.d/`目录下,每个文件对应一种服务类型,如`/etc/pam.d/sshd`用于SSH服务的身份验证配置。 4. **模块类型**:PAM...
3. **文档**:压缩包内可能会有README、INSTALL、CHANGELOG等文档,详细解释了如何编译、安装和配置PAM,以及版本1.3.1相对于之前版本的更新和改进。 4. **示例**:可能包含示例配置文件或脚本,帮助用户理解和使用...
在“pam_linux的可插入身份验证模块(PAM)的Safe Rust API开发技术.zip”中,我们可能找到的是关于如何使用Rust语言安全地与PAM模块交互的资源。 Rust是一种系统编程语言,以其内存安全性、并发性和高性能而闻名。...
Uber的SSH证书pam模块。 这是一个pam模块,它将根据用户的ssh代理中具有由指定ssh CA签名的ssh证书的用户进行身份验证。 这主要是用作sudo Uber的SSH证书pam模块的身份验证模块。 这是一个pam模块,它将根据用户的...
2. **PAM客户端库**根据配置文件中的设置选择合适的PAM模块。 3. **PAM模块**执行具体的认证操作,比如读取影子密码文件、查询LDAP等。 4. **结果反馈**给PAM客户端库,再由PAM客户端库将结果反馈给应用程序。 ####...