声明:本博文用于学习总结及工作心得

环境: Ubuntu 14.04 、PAM 1.2.1 ,需要root权限,以及C语言知识

首先需要了解什么是PAM:

AM即可插拔认证模块。它提供了对所有服务进行认证的中央机制,适用于login,远程登录(telnet,rlogin,fsh,ftp,点对点协议(PPP)),

su等应用程序中。系统管理员通过PAM配置文件来制定不同应用程序的不同认证策略;应用程序开发者通过在服务程序中使用PAM API(pam_xxxx( ))来实现对认证方法的调用;

而PAM服务模块的开发者则利用PAM SPI来编写模块(主要是引出一些函数pam_sm_xxxx( )供PAM接口库调用),将不同的认证机制加入到系统中;PAM接口库(libpam)

则读取配置文件,将应用程序和相应的PAM服务模块联系起来

配置PAM:

关于如何配置,这里就不多讲了,毕竟网上关于这方面的参考太多,可以自行百度

添加自定义PAM模块(修改现有PAM模块的业务逻辑):

一. 原由:

为什么需要自定义PAM模块,举例来说,我们配置PAM login,已达到阻止root用户或者其它用户登录,或者在登录验证时错误一定错误时锁住当前用户等操作,但是像这种情况,我依然可以进入单用户模式,以达到进入系统修改配置文件,还有PAM的后门; 或许有人会想将grub加密;好,即使你将grub加密后,我还是一样可以通过bios破解掉grub加密;所以这种情况,最好是自定义PAM模块,或者修改现有的PAM模块, 或许我们需要做的不多,一条短信,一条邮件即可;

二. 正题:

1. 所有PAM的配置依赖于PAM接口库(libpam), 所以我们不能尝试说去修改相关PAM接口库

2. 需要查询当前系统使用的PAM版本, 可以查看/etc/pam.d/目录下pam的配置文件

root@ERP-CLIENT:/etc/pam.d# cat accountsservice
#%PAM-1.2
# Must use substack here, so the success of pam_unix will still
# cause our pam_pin to run
password   substack      common-password
password   optional      pam_pin.so

3. 查询到PAM版本后,需要下载当前的PAM源码 http://www.linux-pam.org/library/  上传服务器(可以在本地修改pam模块后在上传服务器进行编译安装) 也可以直接在服务器下载

wget http://www.linux-pam.org/library/Linux-PAM-1.2.1.tar.bz2

4. 解压PAM

mkdir /root/newpam/

tar xvjf /root/newpam/Linux-PAM-1.2.1.tar.bz2

5. 进入需要修改的模块的相关目录, 然后修改代码:

举例来说:

限制用户登录的功能, 用户登录验证失败达到一定次数然后限制用户登录。其相关模块是pam_tally2.so , 现在我们需要为该模块新添加一些功能,比如打印一句话,创建一个文件,所以我们需要修改pam_tally2.so的源文件

vim  /root/newpam/Linux-PAM-1.2.1/modules/pam_tally2/pam_tally

在第170行tally_parse_args函数开头添加我们修要新增的功能的代码(该函数是我们后面在/etc/pam.d/login 配置文件的参数验证)

    fprintf(stdout, "Hello\n");//输入用户名PAM验证参数时在标准输出打印HelloFILE *fd;
//    char str[1024];fd = fopen("/tmp/file.txt", "a");//在tmp目录新建file.txt目录if (fd){fputs("Hello, create file success!", fd);#   /* 写入Hello, software weekly字符串 */fclose(fd);}

添加后 保存退出

6. 编译

        mkdir /root/newpam/config //该目录用来编译PAM的因为我们只需要提前我们需要的模块cd /root/newpam/Linux-PAM-1.2.1./configure --host=arm-linux-gnueabi --prefix=/root/newpam/configmake install    

编译完成后 找到我们自定义的pam_tally2.so,

输入命令:find /root/newpam/Linux_PAM-1.2.1 -name pam_tally2.so

/root/newpam/Linux-PAM-1.2.1/modules/pam_tally2/.libs/pam_tally2.so

7.配置PAM:

修改/etc/pam.d/login

在文件开头位置添加代码:

auth          required       /root/newpam/Linux-PAM-1.2.1/modules/pam_tally2/.libs/pam_tally2.so deny=3  unlock_time=3 even_deny_root root_unlock_time=3

添加后保存退出

8在本地终端测试:图片为测试结果

注意的是,PAM模块不要单独编译,一定要整个PAM源码编译在提取, 不然的话会出错,如果出现错误的话,导致登录不上终端,可以使用ssh登录,关于SSH登录的限制,可以配置PAM,也可以修改ssh配置文件提高安全等级

基于Linux安全验证添加自定义PAM模块相关推荐

  1. linux查看电源模块,基于LINUX的电源管理cpuidle模块研究及应用

    赵婉芳 摘 要:本文主要针对LINUX嵌入式系统的电源管理部分,分析了目前存在的主要的电源管理技术,重点研究了LINUX系统中当系统处于空闲状态时负责电源管理的CPUIDLE模块结构特点以及接口核心编 ...

  2. 第十四章 使用者的特殊 shell 与 PAM 模块

    我们前面一直谈到的大多是一般身份用户与系统管理员 (root) 的相关操作, 而且大多是讨论关于可登陆系统的账号来说.那么换个角度想,如果我今天想要创建的, 是一个『仅能使用 mail server ...

  3. Linux服务器安全策略配置-PAM身份验证模块(二)

    ○ 本文导航 关于PAM PAM身份验证配置文件 PAM配置文件语法格式 PAM模块接口 PAM控制标志 PAM配置方法 PAM身份验证安全配置实例 - 强制使用强密码(用户密码安全配置) - 用户S ...

  4. Linux系统的PAM模块认证文件含义说明总结

    在Linux中执行有些程序时,这些程序在执行前首先要对启动它的用户进行认证,符合一定的要求之后才允许执行,例如login, su等.在Linux中进行身份或是状态的验证程序是由PAM来进行的,PAM( ...

  5. linux pam 解锁_linux中pam模块

    一.pam简介 Linux-PAM(linux可插入认证模块)是一套共享库,使本地系统管理员可以随意选择程序的认证方式. 换句话说,不用(重新编写)重新编译一个包含PAM功能的应用程序,就可以改变它使 ...

  6. linux学习-用户的特殊 shell 与 PAM 模块

    特殊的 shell, /sbin/nologin 『无法登入』指的是:『这个使用者无法使用 bash 或其他 shell 来登入系统』而已, 并不是说这个账号就无法使用其他的系统资源! 让某个具有 / ...

  7. Linux中PAM模块详解

    一.pam简介 Linux-PAM(linux可插入认证模块)是一套共享库,使本地系统管理员可以随意选择程序的认证方式.换句话说,不用重新编译一个包含PAM功能的应用程序,就可以改变它使用的认证机制. ...

  8. Linux——用户的特殊shell与PAM模块

    问题:我们能否建立一个仅能使用的mail server相关邮件服务的账号,而该账号并不能登入Linux主机 1.特殊的shell./sbin/nologin 由于系统账号不需要登入,我们就给这个无法登 ...

  9. Linux高阶—安全认证模块pam(九)

    目录 PAM软件介绍 PAM软件结构 1.配置文件分类 2.PAM动态库文件 3.二进制执行文件 PAM四种模块类型 PAM五个控制模块 PAM四列配置模型 PAM用户锁模块 1.查看错误登录次数(错 ...

最新文章

  1. Python报错TypeError: Tuple or struct_time argument required
  2. 某大厂程序员吐槽:在北京当码农,不敢结婚不敢生娃,真是注孤生!
  3. js for循环 ajax
  4. 社交软件这样赚钱:line表情包卖了2亿多美元
  5. 根据当前系统日期求出本周,本月,本年,上周,上月,上年的第一天
  6. 正则表达式中的字符类
  7. iOS API离线文档下载和查阅
  8. 安卓事件机制与页面跳转
  9. excel文件被写保护怎么解除_u盘被写保护怎么解除,看完你就知道了
  10. c++ auto用法_不想写表达式的类型?试试auto吧
  11. springmvc注解入门程序
  12. 组播协议——IGMP v2报文头介绍
  13. Django,js,html数据传输
  14. Xilisoft iPad Magic Platinum for Mac如何制作铃声?将联系人传输到计算机/设备?
  15. 企业微信api消息接口调用
  16. 走进脑计划(四):linux下安装SPM、DPABI
  17. 广电物联网大赛正式开启
  18. STM32F103RCT+TJA1050+USBCAN盒做can通讯
  19. 设置计算机网络文件共享,办公室电脑怎么设置共享文件夹?(其它电脑可直接访问共享的文件?...
  20. 巧用 Redis Hyperloglog,轻松统计 UV 数据

热门文章

  1. 给mysql添加主键_MySQL添加主键、索引
  2. 蚂蚁金服的“野心”:要做新一代世界级金融科技供应商
  3. Html A标签中 href 和 onclick用法、区别、优先级别
  4. 铁打的平台,流水的主播
  5. 4W家庭理财 V2.3
  6. 如何编写一个好的规范中投证券L2接口文档?
  7. Java互联网架构-如何构建高并发高可用电商充值平台架构演变过程
  8. vm安装xenserver_使用XenServer,Java和Apache CloudStack启动VM
  9. python输出斐波那契数列前20项、每输出5个数换行_按要求编写程序:输出斐波那契数列的前20项,每行输出5项....
  10. Cocos2D-x权威指南