Linux-PAM & PAM-MySQL的总结

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介:

1、理论知识

1.1、PAM模块

1.1.1、PAM的介绍

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

1.1.2、PAM的结构

wKioL1agOrug7pRDAAEeYP0aulI824.png

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

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

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

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

作用:

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

接口分类:

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

1
2
3
4
5
6
7
8
9
10
-- 鉴别类接口
  -- pam_authenticate() 鉴别用户
  -- pam_setcred() 修改用户密码信息
-- 账号类接口
  -- pam_acct_mgmt() 鉴别用户账号是否有权限登录以及账号是否过期
-- 会话类接口
  -- pam_open_session()
  -- pam_close_session()
-- 口令类接口
  -- pam_chauthok()

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
-- 管理性接口
  -- 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句柄要求获取和设置特定的模块信息。
1
2
3)应用程序层 - PAM结构最上层
灵活调用中间层的各种鉴别功能接口

1.1.3、PAM验证文件配置目录

1
ls  /etc/pam .d/

显示如下:

1
2
3
4
5
6
7
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

配置文件如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
#%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验证文件格式分为四列:

1
module_type   control_flag   module_path   module_optional

2)module-type(模块类型)

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

3)control-flag(控制标记)

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

4)module-path(模块路径)

模块的位置查找

1
find  / -name pam_sepermit.so

显示如下:

1
/lib64/security/pam_sepermit .so

如上所示:

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

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

常见公用选项如下:

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

1.2、PAM-MySQL的介绍

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










本文转自 tanzhenchao 51CTO博客,原文链接:http://blog.51cto.com/cmdschool/1737006,如需转载请自行联系原作者
目录
相关文章
|
27天前
|
关系型数据库 MySQL Linux
Linux下mysql数据库的导入与导出以及查看端口
本文详细介绍了在Linux下如何导入和导出MySQL数据库,以及查看MySQL运行端口的方法。通过这些操作,用户可以轻松进行数据库的备份与恢复,以及确认MySQL服务的运行状态和端口。掌握这些技能,对于日常数据库管理和维护非常重要。
106 8
|
1月前
|
NoSQL 关系型数据库 MySQL
Linux安装jdk、mysql、redis
Linux安装jdk、mysql、redis
182 7
|
3月前
|
安全 关系型数据库 MySQL
Linux下安装mysql8.0(以tar.xz包安装--编译安装)
通过上述步骤,您完成了从下载、编译、安装到配置MySQL 8.0的全过程。此过程虽然较为复杂,但提供了对MySQL安装环境的完全控制,有助于满足特定的部署需求。在实际操作中,根据具体的系统环境,可能还需调整部分步骤或解决未预见的依赖问题。始终参考官方文档和社区资源,保持安装过程与最新版本的兼容性。
1478 67
|
1月前
|
关系型数据库 MySQL Linux
MySQL数据库下载安装教程(Windows&Linux)
本文档详细介绍了MySQL的安装步骤,包括安装前的准备工作、下载安装包、Windows和Linux系统下的具体安装流程,以及如何配置MySQL服务、设置环境变量、启动服务和连接数据库等关键操作。
|
2月前
|
关系型数据库 MySQL Linux
Linux环境下MySQL数据库自动定时备份实践
数据库备份是确保数据安全的重要措施。在Linux环境下,实现MySQL数据库的自动定时备份可以通过多种方式完成。本文将介绍如何使用`cron`定时任务和`mysqldump`工具来实现MySQL数据库的每日自动备份。
217 3
|
2月前
|
监控 关系型数据库 MySQL
Linux环境下MySQL数据库自动定时备份策略
在Linux环境下,MySQL数据库的自动定时备份是确保数据安全和可靠性的重要措施。通过设置定时任务,我们可以每天自动执行数据库备份,从而减少人为错误和提高数据恢复的效率。本文将详细介绍如何在Linux下实现MySQL数据库的自动定时备份。
105 3
|
2月前
|
关系型数据库 MySQL Linux
Linux系统如何设置自启动服务在MySQL数据库启动后执行?
【10月更文挑战第25天】Linux系统如何设置自启动服务在MySQL数据库启动后执行?
202 3
|
3月前
|
Ubuntu 关系型数据库 MySQL
Linux系统MySQL安装
【10月更文挑战第19天】本文介绍了在 Linux 系统上安装 MySQL 的步骤,包括安装前准备、安装 MySQL、启动 MySQL 服务、配置 MySQL 以及验证安装。适用于 Ubuntu/Debian 和 CentOS/Fedora 系统,提供了详细的命令示例。
512 1
|
3月前
|
关系型数据库 MySQL Linux
Linux系统绿色安装MySQL 8.0.39
Linux系统绿色安装MySQL 8.0.39
|
3月前
|
关系型数据库 MySQL Linux
Navicat 连接 Windows、Linux系统下的MySQL 各种错误,修改密码。
使用Navicat连接Windows和Linux系统下的MySQL时可能遇到的四种错误及其解决方法,包括错误代码2003、1045和2013,以及如何修改MySQL密码。
428 0