基于Linux安全验证添加自定义PAM模块
声明:本博文用于学习总结及工作心得
环境: 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模块相关推荐
- linux查看电源模块,基于LINUX的电源管理cpuidle模块研究及应用
赵婉芳 摘 要:本文主要针对LINUX嵌入式系统的电源管理部分,分析了目前存在的主要的电源管理技术,重点研究了LINUX系统中当系统处于空闲状态时负责电源管理的CPUIDLE模块结构特点以及接口核心编 ...
- 第十四章 使用者的特殊 shell 与 PAM 模块
我们前面一直谈到的大多是一般身份用户与系统管理员 (root) 的相关操作, 而且大多是讨论关于可登陆系统的账号来说.那么换个角度想,如果我今天想要创建的, 是一个『仅能使用 mail server ...
- Linux服务器安全策略配置-PAM身份验证模块(二)
○ 本文导航 关于PAM PAM身份验证配置文件 PAM配置文件语法格式 PAM模块接口 PAM控制标志 PAM配置方法 PAM身份验证安全配置实例 - 强制使用强密码(用户密码安全配置) - 用户S ...
- Linux系统的PAM模块认证文件含义说明总结
在Linux中执行有些程序时,这些程序在执行前首先要对启动它的用户进行认证,符合一定的要求之后才允许执行,例如login, su等.在Linux中进行身份或是状态的验证程序是由PAM来进行的,PAM( ...
- linux pam 解锁_linux中pam模块
一.pam简介 Linux-PAM(linux可插入认证模块)是一套共享库,使本地系统管理员可以随意选择程序的认证方式. 换句话说,不用(重新编写)重新编译一个包含PAM功能的应用程序,就可以改变它使 ...
- linux学习-用户的特殊 shell 与 PAM 模块
特殊的 shell, /sbin/nologin 『无法登入』指的是:『这个使用者无法使用 bash 或其他 shell 来登入系统』而已, 并不是说这个账号就无法使用其他的系统资源! 让某个具有 / ...
- Linux中PAM模块详解
一.pam简介 Linux-PAM(linux可插入认证模块)是一套共享库,使本地系统管理员可以随意选择程序的认证方式.换句话说,不用重新编译一个包含PAM功能的应用程序,就可以改变它使用的认证机制. ...
- Linux——用户的特殊shell与PAM模块
问题:我们能否建立一个仅能使用的mail server相关邮件服务的账号,而该账号并不能登入Linux主机 1.特殊的shell./sbin/nologin 由于系统账号不需要登入,我们就给这个无法登 ...
- Linux高阶—安全认证模块pam(九)
目录 PAM软件介绍 PAM软件结构 1.配置文件分类 2.PAM动态库文件 3.二进制执行文件 PAM四种模块类型 PAM五个控制模块 PAM四列配置模型 PAM用户锁模块 1.查看错误登录次数(错 ...
最新文章
- Python报错TypeError: Tuple or struct_time argument required
- 某大厂程序员吐槽:在北京当码农,不敢结婚不敢生娃,真是注孤生!
- js for循环 ajax
- 社交软件这样赚钱:line表情包卖了2亿多美元
- 根据当前系统日期求出本周,本月,本年,上周,上月,上年的第一天
- 正则表达式中的字符类
- iOS API离线文档下载和查阅
- 安卓事件机制与页面跳转
- excel文件被写保护怎么解除_u盘被写保护怎么解除,看完你就知道了
- c++ auto用法_不想写表达式的类型?试试auto吧
- springmvc注解入门程序
- 组播协议——IGMP v2报文头介绍
- Django,js,html数据传输
- Xilisoft iPad Magic Platinum for Mac如何制作铃声?将联系人传输到计算机/设备?
- 企业微信api消息接口调用
- 走进脑计划(四):linux下安装SPM、DPABI
- 广电物联网大赛正式开启
- STM32F103RCT+TJA1050+USBCAN盒做can通讯
- 设置计算机网络文件共享,办公室电脑怎么设置共享文件夹?(其它电脑可直接访问共享的文件?...
- 巧用 Redis Hyperloglog,轻松统计 UV 数据
热门文章
- 给mysql添加主键_MySQL添加主键、索引
- 蚂蚁金服的“野心”:要做新一代世界级金融科技供应商
- Html A标签中 href 和 onclick用法、区别、优先级别
- 铁打的平台,流水的主播
- 4W家庭理财 V2.3
- 如何编写一个好的规范中投证券L2接口文档?
- Java互联网架构-如何构建高并发高可用电商充值平台架构演变过程
- vm安装xenserver_使用XenServer,Java和Apache CloudStack启动VM
- python输出斐波那契数列前20项、每输出5个数换行_按要求编写程序:输出斐波那契数列的前20项,每行输出5项....
- Cocos2D-x权威指南