PAM认证机制

一、PAM简介

Sun公司1995年开发的一种与认证相关的通用框架机制,PAM只关注如何为服务验证用户的API,通过提供一些动态链接库和一套统一的API,将系统提供的服务和该服务的认证方式分开;PAM只是一个框架而已,自身不做认证。

它提供了对所有服务进行认证的中央机制,适用于login\telnet\rlogin\fsh\ftp\pp\su等应用程序中。

PAM-API 调用认证接口
PAM-SPI 提供认证接口

对应的文件名:pam_xxxx()

PAM认证一般遵循这样的顺序:Service->PAM(配置文件)->pam_*.so,这就是调用机制

二、配置PAM

PAM的目录:

/lib64/security/pam* 全是pam模块
/etc/security/ pam模块的配置文件
/etc/pam.conf  pam主配置文件,默认不存在(不推荐使用)
/etc/pam.d/ pam子配置文件,推荐使用

 

我们查看/etc/pam.d/passwd

  1. [root@newhostname 1372]# cat /etc/pam.d/passwd
  2. #%PAM-1.0
  3. auth include system-auth
  4. account include system-auth
  5. password substack system-auth
  6. -password optional pam_gnome_keyring.so use_authtok
  7. password substack postlogin
  8. [root@newhostname 1372]#

pam.conf文件格式
1)、第一列为type包括一下项目:
session
auth 只负责账户的认证和授权
account 负责账户相关,但是是认证之后的
password 负责用户修改口令时,口令复杂度检查
-type 表示因为缺失二不能加载的模块将不记录在日志内:例-password -session

pam.conf内,每一行,都要经过一次认证

2)、第二列为control,用来表示如何控制,一般都是简单实现,即一个关机自
required 表示一票否决制,本模块必须返回成功才能通过认证,但如果失败,继续检查,但总体结果已经失败了。
requisite 表示一票否决,它和required不同的地方是,不会继续向下认证,直接返回失败。
optional :表明本模块是可选的,它的成功与否不会对身份认证起关键作用,其返回值一般被忽略
include: 调用其他的配置文件中定义的配置信息
sufficient:一票通过
3)、第三列为模块名
具体路径的引用由主配置文件/etc/pam.conf 中定义

三、PAM模块示例

1、模块:pam_securetty.so

功能:只允许root用户在/etc/securetty列出的安全终端上登陆

例:

  1. 允许root在telnet登陆
  2. 方法一:
  3. [root@newhostname 1372]# vim /etc/pam.d/remote
  4. #%PAM-1.0
  5. auth required pam_securetty.so
  6. auth substack password-auth
  7. auth include postlogin
  8. account required pam_nologin.so
  9. account include password-auth
  10. password include password-auth
  11. # pam_selinux.so close should be the first session rule
  12. session required pam_selinux.so close
  13. session required pam_loginuid.so
  14. # pam_selinux.so open should only be followed by sessions to be executed in the user context
  15. session required pam_selinux.so open
  16. session required pam_namespace.so
  17. session optional pam_keyinit.so force revoke
  18. session include password-auth
  19. session include postlogin
  20. 注释auth required pam_securetty.so这一行
  21. 方法二:
  22. [root@newhostname 1372]# vim /etc/securetty
  23. 添加
  24. pts/0
  25. pts/1
  26. pts/2
  27. pts/3
  28. .
  29. .
  30. .
  31. pts/9
  32. 第一种修改方法是直接通过禁用该模块实现的
  33. 第二种方法则是修改pam的规则来实现的
  34. 关于如何获取修改pam模块的规则的方法,可以通过 man 模块名来获得

2、模块:pam_shells

功能:检查有效shell

例:

  1. 不允许使用/bin/csh的用户本地登录
  2. [root@newhostname 1372]# vim /etc/shells
  3. /bin/sh
  4. /bin/bash
  5. /sbin/nologin
  6. /usr/bin/sh
  7. /usr/bin/bash
  8. /usr/sbin/nologin
  9. /bin/tcsh
  10. /bin/csh
  11. 去掉 /bin/csh
  12. useradd –s /bin/csh testuser
  13. testuser将不可登录

3、模块:pam_nologin.so

功能:

如果/etc/nologin文件存在,将导致非root用户不能登陆
如果用户shell是/sbin/nologin 时,当该用户登陆时,会显示
/etc/nologin.txt文件内容,并拒绝登陆

4、模块:pam_limits.so

功能:在用户级别实现对其可使用的资源的限制,例如:可打
开的文件数量,可运行的进程数量,可用内存空间

修改限制的实现方式:

(1) ulimit命令,立即生效,但无法保存
-n 最多的打开的文件描述符个数
-u 最大用户进程数
-S 使用 soft(软)资源限制
-H 使用 hard(硬)资源限制

(2) 配置文件:/etc/security/limits.conf,
/etc/security/limits.d/*.conf

配置文件:每行一个定义;
<domain> <type> <item> <value>

<domain> 应用于哪些对象

Username 单个用户
@group 组内所有用户
* 所有用户

<type> 限制的类型

Soft 软限制,普通用户自己可以修改
Hard 硬限制,由root用户设定,且通过kernel强制生效
– 二者同时限定

<item> 限制的资源

nofile 所能够同时打开的最大文件数量,默认为1024
nproc 所能够同时运行的进程的最大数量,默认为1024

<value> 指定具体值

 

示例:pam_limits.so

  1. 限制用户最多打开的文件数和运行进程数
  2. 查看 /etc/pam.d/system-auth内是否存在“session required pam_limits.so”
  3. vim /etc/security/limits.conf
  4. * soft nofile 102400
  5. * hard nofile 102400
  6. * soft nproc 40960
  7. * hard nproc 40960
  8. 设置所有人最大打开的进程数为40960
  9. 设置虽有人最大打开的文件数为102400

 

四、总结

我们只是pam模块的使用户,不是开发者,每个模块的用法各不相同,所以我们要知道如何去寻找pam模块的帮助,我们可以通过man来查询模块的用法,这个是最快的途径,或者在官网上下载pam模块的文档也是一个不错的选择。

pam文档说明

/user/share/doc/pam-*
rpm -qd pam
man –k pam_模块名
man 模块名 如man rootok

pam模块手册《The Linux-PAM System Administrators’ Guide》

 

转载于:https://www.cnblogs.com/momenglin/p/8486069.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/250919.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

02 JSX学习

使用vite处理jsx vite引入的脚本必须是ESM的 npm init -y yarn add vite package.json 添加vite命令 index.html引入jsxJSX是什么 一种标签语法&#xff0c;在JS基础上进行的语法扩展不是字符串、也不是HTML是描述UI呈现与交互的直观的表现形式JSX被编译后会生成React元素 &am…

使用FreeCookies 控制浏览器cookies及修改http响应内容

FreeCookies 插件安装 1&#xff1a;您的计算机需要已经安装Fiddler &#xff08;如未安装&#xff0c;请至官网下载安装 http://docs.telerik.com/fiddler/configure-fiddler/tasks/configurefiddler&#xff09; 2&#xff1a;进入Fiddler安装目录下的Scripts目录下&#xff…

node --- 使用node连接mysql

1.确保下载了mysql,且mysql处于打开状态. 2.确保下载了node,并成功安装:https://nodejs.org/en/ (小黑窗 node -v 查看) 3.安装node操作mysql的依赖包: # 命令行 npm install --save -mysql# 注:如果没有package.json 建议先使用 npm init -y 初始化正题 // app.js// 1. 引…

03 渲染元素ReactDOM.render

React与ReactDOM是2个不同的库&#xff0c;根节点内的所有内容&#xff08;和DOM更新、渲染相关&#xff09;由ReactDOM来管理一个React应用只有一个根节点用ReactDOM.render将React元素渲染到根节点 ReactDOM.render 参数1 React元素&#xff08;React.createElement(类组件/…

javascript --- 异步按顺序执行

使用promise可以很优雅的封装一个异步函数,使其按指定顺序执行: // 异步读取文件操作 const fs require("fs"); function promiseReadFile(url) {return new Promise(function (resolve, reject) {fs.readFile(url, function(err, data) {if(err) {reject(err);} e…

web提高:负载均衡

1、集群 1、为什么建议在阿里云购买负载均衡 非常便宜&#xff0c;又好用&#xff0c;有稳定&#xff0c;有简单。自己搭建不了负载均衡&#xff0c;因为共有云不支持组播跑不了vrp协议。你不会集群的概念&#xff0c;你还是蒙蒙的。2、为什么使用集群&#xff1f; 1、小规模 …

node --- 一个很好用的包json-server

这个第三方包,可以将json文件暴露出来,用http获取. (data.json如下) 下载依赖: npm install --g json-server查看是否含有json-server json -sever --version启动json-server 参考:https://www.npmjs.com/package/json-server

利用ionic3进行上一行和左一行不动,中间移动的功能

首先在html中的写法是 <ion-header><ion-navbar><ion-title>历史数据</ion-title></ion-navbar></ion-header><ion-content ><div style"display:flex;width:625px;"><div class"head">地区</di…

jquery --- 阻止表单默认的提交行为,标准化表单的数据

表单如下: // .html <form id"topics_new_form" method"post" action"/topics/new"><div class"form-group"><label for"exampleInputEmail1">选择模块</label><selecet class"form-contr…

javascript --- spa初体验

首先使用express创建一个简单的服务器 创建文件夹 be-project # (确保安装了node,并配置好了环境) 在be-project目录下(命令行执行) npm init -y npm install --save express body-parse npm install --global nodemon// app.js const express require("express");…

python学习HTML之CSS(2)

1、边框的属性设置 PS&#xff1a;边框的高度和宽度可以采用百分比&#xff0c;但是高度方向的百分比基本无用&#xff0c;因为基数没定&#xff0c;参考没意义&#xff01;&#xff01; 2、内边距和外边距 3、在右下角添加一个“回顶部”的标签。 <div></div>中的…

06 事件处理函数绑定与事件对象

事件处理函数绑定 DOM事件处理 addEventListener or onclick function(){} 纯小写React元素也采用了类似DOM0标准中的事件属性定义的方法 小驼峰 JSX <button onClick{ this.doSth }></button>直接创建React元素 React.createElement(button,{onClick: { this.…

07、08 条件渲染、列表渲染

条件渲染 React没有像v-if、v-show这样的指令&#xff0c;需要使用JSX表达式组合而成 // 与运算 三目 // 判断表达式一定是false/null/undefined时才不会被渲染&#xff0c;0、空字符串、NaN会显示 // 如果render函数返回null&#xff0c;不会进行任何渲染 ......state {showL…

面向对象命名空间、组合

一 类命名空间与对象、实例的命名空间 创建一个类就会创建一个类的名称空间&#xff0c;用来存储类中定义的所有名字&#xff0c;这些名字称为类的属性 而类有两种属性&#xff1a;静态属性和动态属性 静态属性就是直接在类中定义的变量动态属性就是定义在类中的方法class Pers…

css --- 使用媒体查询当屏幕宽度小于某个值时,隐藏掉某个类

Bootstrap提供了一个封装好的类: .hidden-xs: 当屏幕宽度<768px时隐藏 .hidden-sm: 当屏幕768px < 宽度<992px时隐藏 .hidden-md: 当屏幕992px< 宽度<1200px时隐藏 .hidden-lg: 当屏幕宽度>1200px时隐藏 下面使用css3的 媒体查询来实现: media screen and…

css --- 伸缩布局,让图片居中

很明显,想要星星位于文字的正下方. // html <section id"lz_about" class"hidden-xs hidden-sm"><div class title text-center"><h1><strong>关于我</strong></h1><img src"./imgs/star.jpg" cla…

10 非受控组件以及受控与非受控的选择方案

含义 非受控组件&#xff1a;表单数据不受控与state的&#xff08;未绑定value&#xff09;&#xff0c;使用React ref从DOM节点中获取表单数据的组件提示refs弃用 class MyForm extends React.Component {constructor(props) {super(props)}submit (e) > {e.preventDef…

wampserver3.0.6 外网 不能访问

# 开始 今天在服务器上安装了wampserver3.0.6 然后在我的电脑浏览器上面打开服务器ip提示 Forbidden 下面一行小字提示没有权限访问"/"目录 # 解决 打开 httpd-vhost.conf 文件 修改成如下 # Virtual Hosts #<VirtualHost *:80>ServerName localhostServerAlia…

javascript --- 在linux上部署项目

最近对照视频,用bootstrap jquery 写了一个纯前端页面.想把它放在服务器上,供远程使用. 准备服务器和域名 我服务器和域名是在腾讯云上租的,网址: https://cloud.tencent.com/ 注: 域名很便宜,挑个好的哈哈哈… 服务器(阿里云有个学生价…但是我那个学生价的账号找不到了…)…

11 父子组件数据关系与状态提升

含义 状态提升&#xff1a;两个组件&#xff08;无父子关系&#xff09;共享一个数据并且同步数据变化类组件调用&#xff08;实例化&#xff09;的时候&#xff0c;组件内部的状态是唯一且独立的组件嵌套与调用&#xff0c;和是类组件&#xff08;render&#xff09;还是函数…