`
雨辰RainTime
  • 浏览: 113436 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

CAS3.4 关于PAM模块的详细配置

    博客分类:
  • cas
阅读更多

前言

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,看是否能登录成功吧。

1
0
分享到:
评论

相关推荐

    如何设置PAM模块控制Linux密码策略

    其中,PAM(Pluggable Authentication Modules)模块是一个非常重要的组件,它提供了灵活的身份验证机制,并且可以通过配置来实现密码复杂度的要求。本文将详细介绍如何通过PAM模块中的`pam_cracklib.so`来控制Linux...

    linux操作系统PAM模块实例

    PAM 模块的配置文件通常位于 /etc/pam.d/ 目录下,每个应用程序都有一个对应的配置文件。配置文件的内容包括模块类型、控制标志和参数。 控制标志 控制标志是 PAM 模块的重要组成部分,决定了模块的行为。常见的...

    用Linux-PAM模块实现用户登陆的控制.pdf

    在 Linux-PAM 模块中,验证机制是通过配置文件来实现的。系统管理员可以通过编辑配置文件来选择合适的验证机制。 Linux-PAM 模块还提供了一些预定义的验证机制,如基于密码的验证机制、基于智能卡的验证机制等。 ...

    pam_chroot.zip_linux pam _pam模块

    每个服务都有一个对应的配置文件,其中包含了需要加载的PAM模块及其参数。这些模块按照特定的顺序执行,完成认证、授权、账户管理和会话管理等任务。 **pam_chroot的作用:** 1. **安全隔离**:`pam_chroot`主要...

    pam模块源码及所有依赖库,测试通过

    这个包在Linux系统中扮演着至关重要的角色,它管理着系统的用户密码信息,与PAM(Pluggable Authentication Modules)紧密协作,确保密码的安全性和复杂度。让我们深入探讨一下其中涉及的知识点。 `shadow` 包是...

    详细的Linux-pam配置

    系统管理员通过 PAM 配置文件来制定认证策略,应用程序开发者通过在服务程序中使用 PAM API 而实现对认证方法的调用,而 PAM 服务模块的开发者则利用 PAM SPI(Service Module API)来编写认证模块,将不同的认证...

    linux pam开发手册

    该文档适用于,对linux 有一定了解,从事或者正要从事linux pam模块开发的同学

    PAM-Linux实现安全登录

    PAM的核心思想是模块化,它允许系统管理员选择和配置不同的认证模块,这些模块可以处理密码验证、智能卡验证、生物识别等多种认证方式。当用户尝试登录系统时,PAM会根据配置的策略调用相应的模块进行认证。这种设计...

    pam常用模块

    ### pam常用模块详解 #### PAM (Pluggable Authentication Modules) 概述 PAM(可插拔认证模块)是一种灵活的身份验证框架,为Linux和其他类Unix系统提供了一个统一的接口来实现各种不同的认证机制。这使得系统...

    利用pam模块passwdqc限定linux用户密码强度

    NULL 博文链接:https://dingody.iteye.com/blog/1978152

    pam.tar.gz_linux pam _linux-pam

    **PAM(Pluggable Authentication Modules)在Linux系统中的应用** PAM,即插拔式认证模块,是...而"pam.ppt"这个文件可能是关于PAM的详细讲解,包含了更深入的技术细节和实践指导,对学习和理解PAM会有很大帮助。

    linux基于Pam_radius整合身份认证说明_v1.0.pdf

    5. PAM模块配置 PAM模块是Linux系统中的一种身份认证机制。这里需要编辑/etc/pam.d/sshd文件,添加pam_radius_auth模块,以便实现身份认证。 6. 结论 Linux基于Pam_radius整合身份认证可以提供强大且灵活的身份...

    swift-一个PAM模块用于利用TouchID进行身份验证

    集成这样的模块需要对PAM框架有深入理解,包括PAM的配置文件结构、模块接口以及如何在代码中正确地调用PAM API。同时,还需要遵循Apple的安全指南,确保在处理敏感数据和用户生物特征时符合最佳实践。 总的来说,...

    一种基于Linux-PAM模块的身份验证方法.pdf

    Linux-PAM(可插拔身份验证模块)是Linux操作系统中的一种身份验证机制,它允许管理员和开发者灵活地管理和配置不同的身份验证策略。PAM的主要目的是解决传统Linux系统中验证功能与应用程序紧密耦合的问题,使得身份...

    linux环境下pam安全模块

    PAM库随后根据配置文件加载相应的服务模块进行验证。 3. **配置文件**:PAM配置文件存储于`/etc/pam.d/`目录下,每个文件对应一种服务类型,如`/etc/pam.d/sshd`用于SSH服务的身份验证配置。 4. **模块类型**:PAM...

    Linux-PAM-1.3.0.tar.gz_PAM_linux_pam 1.3.1

    3. **文档**:压缩包内可能会有README、INSTALL、CHANGELOG等文档,详细解释了如何编译、安装和配置PAM,以及版本1.3.1相对于之前版本的更新和改进。 4. **示例**:可能包含示例配置文件或脚本,帮助用户理解和使用...

    pam_linux的可插入身份验证模块(PAM)的Safe Rust API 开发技术.zip

    在“pam_linux的可插入身份验证模块(PAM)的Safe Rust API开发技术.zip”中,我们可能找到的是关于如何使用Rust语言安全地与PAM模块交互的资源。 Rust是一种系统编程语言,以其内存安全性、并发性和高性能而闻名。...

    uber的ssh证书pam模块-Golang开发

    Uber的SSH证书pam模块。 这是一个pam模块,它将根据用户的ssh代理中具有由指定ssh CA签名的ssh证书的用户进行身份验证。 这主要是用作sudo Uber的SSH证书pam模块的身份验证模块。 这是一个pam模块,它将根据用户的...

    PAM的初步学习 linux下pam.d学习

    2. **PAM客户端库**根据配置文件中的设置选择合适的PAM模块。 3. **PAM模块**执行具体的认证操作,比如读取影子密码文件、查询LDAP等。 4. **结果反馈**给PAM客户端库,再由PAM客户端库将结果反馈给应用程序。 ####...

Global site tag (gtag.js) - Google Analytics