首页 > 编程语言 >使用Python扩展PAM(part 1)

使用Python扩展PAM(part 1)

时间:2023-05-06 18:32:11浏览次数:45  
标签:编译 Python pam python part devel PAM

0、

使用Python扩展PAM实现一些额外的功能,比如ssh、vpn等二次验证。

1、准备工具

实现这个功能需要用到pam_python pam-python 

注意!是pam-python不是python_pam

Pam-python是一个开源的Python模块,用于编写自定义PAM模块。Pam-python使用Python脚本来扩展PAM功能。 它使用Cython和Python C API与PAM库进行交互,支持Python 2和Python 3。Pam-python模块提供了一些可重写的钩子函数,可以在认证流程的不同阶段进行自定义操作。

Python-pam也是Python模块,但它是对PAM库的简单绑定。 Python-pam不像Pam-python那样提供重写的钩子,而是提供了一个简单的接口来与PAM库进行交互。

2、编译安装pam-python

pam-python依赖于gcc、pam-devel、python-devel几个包(我在centos下操作,Debian ubuntu环境下没有测试。不过官方文档中可以使用apt-get直接安装)

安装这些依赖很简单

yum install gcc pam-devel python-devel -y

之后就可以解压缩源码包进入src目录进行编译

直接使用make命令即可

cd pam-python-1.0.8/src/
make

我使用的系统是CentOS7.9,在编译过程中出现了一些问题。如图所示

使用Python扩展PAM(part 1)_PAM

要解决这个问题可以通过编辑Makefile文件来解决

编辑Makefile文件如图位置添加 -Wno-error,在编译命令中添加 -Wno-error 选项,来忽略重定义错误。

使用Python扩展PAM(part 1)_PAM_02

再次执行make命令进行编译。

使用Python扩展PAM(part 1)_Python_03

编译完成完成后可以看到生成了pam_python.so文件,使用make install或者手动mv这个文件到/lib/security 后就可以使用这个文件进行pam模块的配置。

第一部分到此结束。

标签:编译,Python,pam,python,part,devel,PAM
From: https://blog.51cto.com/quietguoguo/6251031

相关文章

  • python给onnet上报数据
      #!/usr/bin/envpython#-*-coding:utf-8-*-#@Time:2021/2/2423:01#@Author:LiShan#@Email:[email protected]#@File:OneNet_Post.py#@Note:https://blog.csdn.net/lishan132/article/details/114044902importurllib.requesti......
  • python中怎么输出字典中字典的值
    #T要求输出'./a/text()url_gglb_xpath_dic={'中国邮政储蓄银行':{'发行公告':['https://www.psbc.com/cn/grfw/tzlc/lc/ywgg/lcxsgg/index_页码.html','https://www.psbc.com/cn/grfw/tzlc/lc/ywgg/lcxsgg&#......
  • python中判断多个元素是否在列表中
    判断单个元素是否在列表中时可以通过in>>>'a'in['a','b','c']True但如果是多个元素,就不能通过in进行判断此时我们可以通过集合中的issubset和issuperset方法顾名思义,issubset是判断某集合是否是另外一个集合的子集,issuperset是判断某集合是否是另外一个集合的超集>>>......
  • python操作elasticsearch 记录
    一、环境Elasticsearch5.x, python3.6, 注意Elasticsearch不同版本的区别,比如以下几条:_id 字段变为 id 字段:在Elasticsearch5中,文档的唯一标识符使用 _id 字段。而在Elasticsearch6和7中,唯一标识符改为使用 id 字段。在Elasticsearch7中,_id字段被重新引......
  • 番外篇:分享一道用Python基础+蒙特卡洛算法实现排列组合的题目(附源码)
    今日鸡汤夕阳无限好,只是近黄昏。    大家好,我是Python进阶者。    是不是觉得很诧异?明明上周刚发布了这篇:分享一道用Python基础+蒙特卡洛算法实现排列组合的题目(附源码),今天又来一篇,名曰番外篇!其实今天是想给大家分享【......
  • 分享一道用Python基础+蒙特卡洛算法实现排列组合的题目(附源码)
    今日鸡汤沙场烽火连胡月,海畔云山拥蓟城。    大家好,我是Python进阶者。这篇文章的题目真的是很难取,索性先取这个了,装个13好了。前言    前几天在才哥交流群里,有个叫【RickXiang】的粉丝在Python交流群里问了一道关于排列组合的问题,初步一看觉得很简单,实际上确实是有难度的......
  • Python函数介绍:getattr()、setattr()、hasattr()
    在Python中我们通常对类的操作中,常常会判定某个属性是否是在这个类中,也会动态的为这个类更改\增添的某些属性和方法。这时我们会常常用到这个几个重要的Python内置函数,分别是getattr()、setattr()、hasattr()。1、getattr(obj,name[,default])obj表示指定的类实例对......
  • 使用python脚本传递参数:(三种方式可收藏)
    背景:使用python脚本传递参数在实际工作过程中还是比较常用,以下提供了好几种的实现方式:一、使用sys.argv的数组传入说明:使用sys.argv必须按照先后的顺序传入对应的参数;sys.argv则封装了传入的参数数据,作为数组的方式已经传入importsysprint("传入参数的总长度为:",len(sys.ar......
  • WEB|[SUCTF 2019]Pythonginx
    源码@app.route('/getUrl',methods=['GET','POST'])defgetUrl():url=request.args.get("url")host=parse.urlparse(url).hostnameifhost=='suctf.cc':#解析主机名,不能是suctf.ccreturn......
  • python IO多路复用理解记录
    一、简述:1什么是多路I/O复用机制Python中的多路I/O复用机制是一种高效的编程技巧,用于同时监视多个文件描述符是否有可读、可写或错误事件,并在这些描述符中任意一个或多个有事件发生时立即进行响应。2使用多路I/O复用机制的目的同时处理多个连接时提高网络I/O效率,从......