1、理论知识

1.1、PAM模块

1.1.1、PAM的介绍

Pluggable Authentication Modules简称PAM,是一个微缩的可插入认证模块(PAM is an acronym for Pluggable Authentication Modules)

1.1.2、PAM的结构

1)模块层(PAM服务模块) - PAM结构最底层

作用:为接口层提供用户鉴别等服务

-- 验证用户名、密码、账号是否过期等
-- 完成账户管理、会话管理和口令管理等

2)应用程序接口层(PAM API) - PAM结构中间层

作用:

-- 向上屏蔽用户鉴别等过程的细节
-- 向下调用模块层的具体模块提供特定的服务

接口分类:

接口与模块相对应类型(调用下层特定接口):

-- 鉴别类接口-- pam_authenticate() 鉴别用户-- pam_setcred() 修改用户密码信息
-- 账号类接口-- pam_acct_mgmt() 鉴别用户账号是否有权限登录以及账号是否过期
-- 会话类接口-- pam_open_session()-- pam_close_session()
-- 口令类接口-- pam_chauthok()

接口与模块不相对应(对底层模块提供支持以及实现应用程序与模块的通讯):

-- 管理性接口-- pam_start() 标记PAM事务开始-- pam_end() 标记PAM事务结束-- pam_get_item() 获取PAM事务状态信息-- pam_set_item() 设置PAM事务状态信息-- pam_str() 输出PAM事务错误信息
-- 应用程序与模块间通讯接口-- pam_start() 应用程序初始化可调用此函数存放用户名之类的信息到PAM接口层-- pam_putenv() 向应用程序传递特定的环境变量-- pam_getenv() 获取应用程序环境变量-- pam_getenvlist() 获取应用程序环境变量
-- 用户与模块间的通讯接口-- pam_start()函数可通过会话式回调函数,让底层模块通过他读写模块相关的鉴别信息
-- 模块间通讯接口-- 相互独立的模块可通过调用 pam_get_item()与pam_set_item()共享某些与鉴别会话有关的公共信息。
-- 读写模块状态信息接口-- 接口pam_get_data()和pam_set_data()用于按照PAM句柄要求获取和设置特定的模块信息。
3)应用程序层 - PAM结构最上层
灵活调用中间层的各种鉴别功能接口

1.1.3、PAM验证文件配置目录

ls /etc/pam.d/

显示如下:

chfn                 newrole           runuser            ssh-keycat
chsh                 other             runuser-l          su
config-util          passwd            smartcard-auth     sudo
crond                password-auth     smartcard-auth-ac  sudo-i
fingerprint-auth     password-auth-ac  smtp               su-l
fingerprint-auth-ac  remote            smtp.postfix       system-auth
login                run_init          sshd               system-auth-ac

如上所示,其中sshd是sshd服务的验证文件(定义验证规则,服务找不到相应的验证文件则会与other匹配)

1.1.4、验证文件的语法

1)PAM的格式

vim编辑/etc/pam.d/sshd

配置文件如下:

#%PAM-1.0
auth       required     pam_sepermit.so
auth       include      password-auth
account    required     pam_nologin.so
account    include      password-auth
password   include      password-auth
# pam_selinux.so close should be the first session rule
session    required     pam_selinux.so close
session    required     pam_loginuid.so
# pam_selinux.so open should only be followed by sessions to be executed in the user context
session    required     pam_selinux.so open env_params
session    optional     pam_keyinit.so force revoke
session    include      password-auth

由以上可知PAM验证文件格式分为四列:

module_type   control_flag   module_path   module_optional

2)module-type(模块类型)

-- auth(验证模块) - 用于验证用户或设置/销毁凭证
-- account(账户管理模块) - 执行访问、账户及凭证有效期、密码限制/规则等操作
-- session(会话管理模块) - 初始化或终止会话
-- passwd(密码模块) - 执行密码更改或更新操作

3)control-flag(控制标记)

-- required - 模块须有返值才通过验证,成功继续下一模块;失败需待同一stack中所有模块执行完才返值到应用程序
-- requisite - 模块须有返值才通过验证,成功继续下一模块;失败将不再执行同一stack内任何模块而返值给应用程序
-- sufficient - 模块返成功值则通过验证,成功则停止执行;失败值可忽略,继续执行下一模块
-- optional - 模块可选,模块返值对认证不起关键作用,无论成败都继续执行下一模块,返值一般被忽略
-- include -

4)module-path(模块路径)

模块的位置查找

find / -name pam_sepermit.so

显示如下:

/lib64/security/pam_sepermit.so

如上所示:

模块位于“/lib64/security/”目录下(可只写模块名称,32位系统位置不同)

5)module-optional(模块选项,可选)

常见公用选项如下:

-- debug - 该模块调用syslog()将调试信息写入系统日志
-- no_warn - 该模块不向应用程序发送警告信息
-- use_first_pass - 使用同一stack首次获取的密码(不向用户提示)
-- try_first_pass - 尝试使用同一stack首次获取的密码(不通过则向用户提示)
-- use_mapped_pass - 使用映射过的密码(不向用户提示)
-- expose_account - 允许该模块显示用户账号等信息

1.2、PAM-MySQL的介绍

----------------------------------------------------------------------

参阅资料:

Linux-PAM的简介:

http://drops.wooyun.org/tips/1288

http://www.2cto.com/os/201303/198419.html

http://os.51cto.com/art/200510/9034.htm

http://my.oschina.net/lionel45/blog/110512

动态链接库的概念:

http://www.cnblogs.com/TianFang/archive/2013/01/19/2867296.html

pam-mysql官网:

http://pam-mysql.sourceforge.net/

yum源:

https://fedoraproject.org/wiki/EPEL

转载于:https://blog.51cto.com/cmdschool/1737006

Linux-PAM PAM-MySQL的总结相关推荐

  1. mariadb pam_mysql_FTP基于PAM和MySQL/MariaDB实现虚拟用户访问控制

    前言 vsftpd是一款在Linux发行版中最受推崇的FTP服务器程序,特点是小巧轻快,安全易用,目前在开源操作系统中常用的FTP套件主要有proftpd.pureftp.ServU和wu-ftpd等 ...

  2. vsftpd pam mysql_vsftpd+mysql+pam实现基于数据库的安全的ftp服务

    1.方案分析 mysql:存储用户信息的,可以放vsftpd用户的信息 pam:可插入用户认证模块 VSFTPD:安全的ftp服务 2涉及到的知识点: vsftp 软件安装.启动服务,监听端口,配置文 ...

  3. 从入门到入土:[linux实践]-pam|编写基于libpam的用户认证程序|编写基于PAM认证的应用程序|详细说明|实验步骤|实验截图

    写在前面: 此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 编写基于libpam的用户认证程序|编写基于PAM认证的应用 ...

  4. linux oracle pam,Linux技术之深入Linux PAM 体系结构(一)

    本文阐述了 Linux-PAM 的概念,同时还与读者一道分析了 Linux-PAM 的体系结构,作者希望籍此以加深读者对 Linux-PAM 的理解,以便对其有更深层的把握. 一.什么是Linux-P ...

  5. linux系统pam配置文件,【PAM】 How to Configure and Use PAM in Linux?

    一.什么是PAM PAM(Pluggable Authentication Modules )是由Sun提出的一种认证机制. 它通过提供一些动态链接库和一套统一的API,将系统提供的服务 和该服务的认 ...

  6. Linux下修改mysql的root密码后数据库消失怎么处理

    Linux系统下如果没有通过password()函数修改mysql的root密码就会导致mysql数据库消失.有些人可能不知道而直接修改了mysql的root密码,于是产生了mysql数据库消失的问题 ...

  7. 如何在linux系统下修改mysql密码_如何在linux下修改mysql数据库密码?linux修改数据库密码的方法...

    本篇文章给大家带来的内容是介绍如何在linux下修改mysql数据库密码?linux修改数据库密码的方法.有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助. Linux下修改Mysql的 ...

  8. mysql主从同步linux,linux中部署mysql主从同步示例详解(绝对经典,看了必会)

    准备两台服务器并安装MySQL5.7 master服务器 192.168.254.132 slave服务器 192.168.254.136 确保两台服务器安装的mysql版本一致,本测试使用的是mys ...

  9. Linux下修改Mysql数据库存放路径

    Linux下修改Mysql数据库存放路径 原路径:/var/lib/mysql 目标路径:/home/data/mysql 1.home目录下建立data目录 cd /home mkdir data ...

  10. linux系统盘满了,mysql启动不了

    2019独角兽企业重金招聘Python工程师标准>>> linux系统盘满了,mysql启动不了 df -h查看系统情况 发现系统盘满了,httpd日志有个2.3g 转载于:http ...

最新文章

  1. oc 查看属性默认关键词
  2. (七)OpenStack---M版---双节点搭建---Dashboard安装和配置
  3. 四川网络推广介绍搜索引擎从哪几个方面判断网站质量好坏?
  4. 机器人动力学方程的性质
  5. C# 网络编程之最简单浏览器实现
  6. 北大教授最短毕业致辞。#人性的可爱 #饶毅#自我尊重
  7. python列表使用判断_浅谈Python数据类型判断及列表脚本操作
  8. Archlinux 升级 pacman 时遇到的问题及其解决
  9. Ubuntu学习 history
  10. 一页纸商业计划书 (Business Plan) 模板(转载)
  11. 创建三维零件的DH坐标系
  12. WRF模式案例运行初体验--飓风示例全过程记录
  13. Python制作一个12306查票程序脚本(附完整代码,仅供学习参考)
  14. 【计算机组成原理】计算机系统结构笔记:合集
  15. 电压放大和电流放大区分
  16. 如何俘获一个 IT 男的心
  17. 推荐几个好用的在线编译器
  18. 脚手架开发(2)-注册阶段
  19. 慕学在线--4、知识点二
  20. OpenGL总结15-光照模型

热门文章

  1. Binary Tree Level Order Traversal II leetcode java
  2. 设置nginx 防止上传恶意脚本
  3. Java中关于==和equal的区别 以及equals()方法重写
  4. [转]几句不可不看的经典人生语句
  5. Hadoop Writable机制
  6. hdu4915 判断括号匹配
  7. C语言-宏定义#define的用法
  8. 【错误记录】Ubuntu 修改 hosts 文件 ( 使用 gedit /etc/hosts 命令打开并修改 hosts 文件 )
  9. 【Android 逆向】Frida 框架 ( Frida 框架使用环境 | Frida 框架作用 | Frida 框架模块 )
  10. 【字符串】最长回文子串 ( 动态规划算法 ) ★