pam的重要文件如下:

/usr/lib/libpam.so.*         ## PAM核心库

/etc/pam.conf            ## PAM配置文件

/etc/pam.d/*             ## PAM各个模块的配置文件

/lib/security/pam_*.so     ## 可动态加载的PAM模块

PAM配置文件的每一行的格式:Module-type   Control-flag   Module-path   Arguments

模块类型         控制字符      模块路径         模块参数

Module-type:

auth:确定有关用户认证的两方面。第一,他确认用户就是他们自己,这通过应用程序提示用户输入密码 或者其他正式身份的办法。第二,这类模块会赋予成员资格。

account:处理非认证级的账号管理。典型的用法是基于一天的不同时间来限制、允许访问某服务。限制 当前可用的系统资源(最大用户数)或者限制特定用户—root只能从控制台登陆。

session:一系列有关动作,只在用户得到/失去服务时要做的事。这包括记录用户的登录/退出、挂载必要 的目录等。

password:设置密码。

Control-flag:

required:表示本模块必须返回成功才能通过认证,但是如果该模块返回失败的话,失败结果也不会立即  通知用户,而是要等到同一stack中的所有模块全部执行完毕再将失败结果返回给应用程序。可以认为是一个必           要条件。

requisite:与required类似,该模块必须返回成功才能通过认证,但是一旦该模块返回失败,将不再执行   同一stack内的任何模块,而是直接将控制权返回给应用程序。是一个必要条件。注:Solaris不支持。

sufficient:表明本模块返回成功已经足以通过身份认证的要求,不必再执行同一stack内的其它模块,但是 如果本模块返回失败的话可以忽略。可以认为是一个充分条件。

optional:表明本模块是可选的,它的成功与否一般不会对身份认证起关键作用,其返回值一般被忽略。

include,从字面就知道什么意思了。包含另外一个配置文件。

Module-path:

Debian的PAM module存放目录默认是在/lib/security。在各个模块的配置文件里,不用写绝对路径,直接   写这个默认目录下面的模块名就可以了。当然,也可以写绝对路径。

Arguments:

各个模块的参数都不一样,具体的要开发者的man手册。无效参数不会对结果有影响,但是会被日志记录 下来。首先,看看/lib/security有没有这个模块,再:man 模块名

下面开始介绍cracklib模块

pam_cracklib是一个PAM模块,用来检查密码是否违反密码字典,这个验证模块可以通过插入password堆 栈,为特殊的应用提供可插入式密码强度性检测。它的工作方式就是先提示用户输入密码,然后使用一个系统           字典和一套规则来检测输入的密码是否不能满足强壮性要求。密码的强度检测分二次进行,第一次只是检测密             码是否是提供的对比字典中的一部分,如果检测结果是否定的,那么就会提供一些附加的检测来进一步检测其             强度,例如检测新密码中的字符占旧密码字符的比例,密码的长度,所用字符大小写状况,以及是否使用了特             殊字符等等。(libpam-cracklib)

下面是cracklib模块的一些参数:

debug:将debug信息写入syslog

type=XXX:提示输入密码的文本内容。默认是"New UNIX password: " and "Retype UNIX password: ",可自定

retry=N:用户最多可以几次输入密码后报错。默认是1次。

difok=N:新密码有几个字符不能和旧密码相同,默认是5个。另外如果新密码有1/2的字符于旧不同,也会被接受。

diginore=N:默认当新密码有23个字符时,difok选项会被忽略。

minlen=N:最小密码长度。

dcredit=N:当N>=0时,N代表新密码最多可以有多少个阿拉伯数字。当N<0时,N代表新密码最少要有多少个阿拉伯数字。

ucredit=N:和dcredit差不多,但是这里说的是大写字母。

lcredit=N:和dcredit差不多,但是这里说的是小写字母。

ocredit=N:和dcredit差不多,但是这里说的是特殊字符。

use_authtok:在某个与密码相关的验证模块后使用此选项,例如pam_unix.so验证模块

pam_cracklib 模块式PAM配置接口的基本模块,在Debian系统中配置文件是 /etc/pam.d/common-password 但是在Redhat系统中配置文件是 /etc/pam.d/system-auth 他的配置看起来像以下这样:

password required pam_cracklib.so retry=3 minlen=6 difok=3

password required pam_unix.so md5 use_authtok

第一行是 pam_cracklib模块和设置的几个模块参数

第二行是 pam_unix模块,MD5表示采用MD5加密

pam_cracklib可以记录用户使用的历史密码,并且不允许用户重复使用旧的密码,实际上存储用户旧密码的是通过pam_unix模块实现的。

第一步是建立一个空文件用来存储旧密码/etc/security/opasswd,如果你没有建立文件却使用了历史密码记录功能的话,所有的密码更新都会失败,因为pam_unix模块会报错。

opasswd就像/etc/shadow文件,因为他记录用户密码的哈希

touch /etc/security/opasswd

chown root:root /etc/security/opasswd

chmod 600 /etc/security/opasswd

一旦建立了opasswd文件,就可以在pam_unix模块后面加上参数remember=N来开始记录旧密码,remember参数记录你想记录多少旧密码,他的最大值是400,如果你设置的值超过400会当做400来对待,例如:

password required pam_cracklib.so retry=3 minlen=12 difok=4

password required pam_unix.so md5 remember=12 use_authtok

opasswd文件内容格式如下:

hal:1000::,,...,

以‘:’分割,第一列是用户名,第二列是用户ID,第三列是目前记录了该用户多少个旧密码,hashN是每次密码的MD5值,opasswd在某些系统安装PAM模块时会自动建立。

密码字典检查

pam_cracklib 也可以检查用户设置的密码是不是违反系统内部的密码字典,在Debian系统中pam_cracklib的         密码字典在/var/cache/cracklib目录下,而且每天晚上update-cracklib脚本会自动的rebuild密码字典。

/etc/login.defs 文件设置密码过期时间等一系列参数,注意login.defs中设置的参数只有是用系统的useradd程序新建的一个用户时才会有login.defs中设置的属性,如果是用其他机器新建的用户,则没有以上属性,不过可以试用chage命令手动添加相关属性。

chage参数如下:

-m 密码可更改的最小天数。 为零时代表任何时候都可以更改密码。

-M 密码保持有效的最大天数。

-W 用户密码到期前,提前收到警告信息的天数。

-E 帐号到期的日期。过了这天,此帐号将不可用。

-d 上一次更改的日期

-i 停滞时期。如果一个密码已过期这些天,那么此帐号将不可用。

-l 例出当前的设置。由非特权用户来确定他们的密码或帐号何时过期。

嵌入式linux pam,Linux PAM 之cracklib模块相关推荐

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

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

  2. OpenWrt项目:针对嵌入式设备的Linux操作系统

    欢迎来到OpenWrt项目 OpenWrt项目是针对嵌入式设备的Linux操作系统.OpenWrt不会尝试创建单个静态固件,而是提供具有包管理功能的完全可写文件系统.这使您从供应商提供的应用程序选择和 ...

  3. 杭州嵌入式linux培训机构,杭州嵌入式培训|嵌入式软件培训|嵌入式编程|杭州linux培训-和盈...

    技术名称 知识要点 学习目的 Linux操作系统 Linux介绍与安装 Linux基本命令操作 文件系统管理 用户管理 权限管理 网络配置 常用文本处理工具 搭建Samba服务器 搭建FTP服务器 搭 ...

  4. linux添加hello驱动,Linux驱动之建立一个hello模块

    目标:在开发板上执行insmod hello.ko能在控制台打印出hello init:接着执行rmmod会在控制台打印出hello exit 建立一个hello模块的步骤如下: 1.建立一个hell ...

  5. 初探linux内核编程,参数传递以及模块间函数调用

    一.前言 我们一起从3个小例子来体验一下linux内核编程.如下: 1. 内核编程之hello world 2. 模块参数传递 3. 模块间函数调用 二.准备工作 首先,在你的linux系统上面安装l ...

  6. 嵌入式学习在linux下使用c语言对文件进行打开、读写操作。_2000字干货!单片机进阶嵌入式Linux要怎么学习……...

    文章字数:2000 干货指数:⭐⭐⭐⭐⭐ 导读:这篇文章我们来一起简单梳理嵌入式Linux的一些知识,方便一些想跟我一样想要由单片机进阶到嵌入式Linux的朋友做一些参考学习. 现在随着嵌入式Linu ...

  7. linux python 永久添加自己的模块路径

    Linux 环境变量配置 : https://blog.csdn.net/freeking101/article/details/81013045 linux python 永久添加自己的模块路径 添 ...

  8. 嵌入式linux基本指令,成都嵌入式开发之Linux常用命令大全

    原标题:成都嵌入式开发之Linux常用命令大全 Linux系统中有很多命令,使用Linux系统最常用的就是命令操作,而不是像Windows一样,使用鼠标操作.Linux中许多常用命令是必须掌握的,也有 ...

  9. linux设置板卡时间,嵌入式VS-RK3288板卡 Linux 修改BOOTDELAY介绍

    嵌入式VS-RK3288板卡 Linux 修改BOOTDELAY介绍 uboot进入kernel中间的延时时间可以通过BOOTDELAY这个宏来控制.修改uboot/common/Kconfig文件 ...

最新文章

  1. 2019年9月2日开学!寒假时间也定了……
  2. 个人计算机技术分享,一个计算机类本科毕业设计分享
  3. mac book file management system
  4. anaconda安装后只有几个文件,大量文件缺失,开始栏里没有图标的解决方法
  5. linux gnome3安装_Windows 10安装与管理WSL体验原生Linux系统
  6. jvm内存配置参数_性能测试连载 (23)jvm内存参数设置
  7. nginx启动期做了哪些事
  8. APP 文档服务器,app服务器
  9. 如何使create-react-app与Node Back-end API一起使用
  10. AGC008D K-th K
  11. Spring_day4
  12. fdisk添加分区引起的Linux Error: 22: Invalid argument
  13. DelphiXE环境认知(第一章 Project Options)
  14. 微软逆转互联网战局,错过了智能手机却君临游戏帝国
  15. 采用ATSC标准、欧洲DVB-T和日本ISDB-T标准的国家
  16. PHP反序列化-__wakeup()方法漏洞(CVE-2016-7124)
  17. 基于特征全埋点的精排ODL实践总结
  18. 字符串函数strtolower解析
  19. Dango Web 开发指南 学习笔记 1
  20. 日常生活中常用的五星级句子

热门文章

  1. 9.10 安卓常用工具类之一 权限 ---- PermissionUtil
  2. 收楼了心情忐忑不安,该花钱请验房师来验房吗?找一个验房师需要多少钱,验房标准价格是多少,验房师现场验收出二百多个问题值不值
  3. IDEA 打包 spark 程序 并在远程 hadoop HA 上运行测试
  4. 华为nova7se和华为nova7的区别 哪个好
  5. java中ws程序是什么意思_Java Web服务对象(JAX-WS)生命周期
  6. android 4.4 x86 iso,安卓x86 4.4 iso下载
  7. 培养意志力的黄金法则
  8. 【学习笔记】联邦计算
  9. python输出为什么会有b_【已解决】为什么Python打印数据显示为b‘XXX’格式
  10. 完全k叉树(CCPC-Wannafly Comet OJ 夏季欢乐赛(2019) A)