linux 密码复杂度,用PAM 搞定Linux 平台密码复杂度问题

用PAM 搞定Linux 平台密码复杂度问题

星期五, 十二月 27, 20130

60d1c39dcdcb3d31040199f65a9c2113.png

作为一个PAM的一个模块,pam_cracklib可以被用来检查密码是否违反密码字典,这个验证模块可以通过插入password堆栈,为特殊的应用提供可插入式密码强度性检测,能够很好地解决Linux平台密码复杂度的问题。

身边很多人有这样的困惑,无论是在做安全检查还是在做日常运维规范,对于管理员设置的密码是否达到要求比较头疼,往往只能通过观察管理员在登录的时候手指的活动区域,进而判断是否有数字、大小写、特殊字符。

Windows 平台一般管理员都比较熟悉,有专门配置复杂度的地方,如下图所示:

6edbc0a7d47e5d75b30a3e70fa2972e5.png

但是对于Linux平台却无从下手,做的好的企业会对/etc/login.defs文件进行配置,但是此文件根本解决不了密码复杂度的问题。真正解决问题的是/lib/security/pam_cracklib.so 这个文件,此文件是RedHat 开发的默认会安装,如系统中不存在,可以考虑通过YUM的方式安装cracklib-* 这个包。

仅仅一个密码复杂度的问题在pam_cracklib.so中有很多参数可以选择,具体配置如下:

debug此选为记录Syslog日志。

type=safe输入新密码的时候给予的提示。

retry=N改变输入密码的次数,默认值是1。就是说,如果用户输入的密码强度不够就退出。可以使用这个选项设置输入的次数,以免一切都从头再来。

difok=N默认值为10。这个参数设置允许的新、旧密码相同字符的个数。

difignore=N多少个字符的密码应收到difok将被忽略。默认为23

minlen=N新的最低可接受的大小密码。除了在新密码的字符数。此参数的默认值是9,它是一个老式的UNIX密码的字符相同类型的所有好,但可能过低,利用一个MD5的系统增加安全性。

dcredit=N限制新密码中至少有多少个数字。

ucredit=N限制新密码中至少有多少个大写字符。

lcredit=N限制新密码中至少有多少个小写字符。

ocredit=N限制新密码中至少有多少个其它的字符。此参数用于强制模块不提示用户的新密码,但以前使用的堆叠模块提供的密码之一。

dictpath=/path/to/dict //注:密码字典,这个是验证用户的密码是否是字典一部分的关键

cracklib密码强度检测过程:

首先检查密码是否是字典的一部分,如果不是,则进行下面的检查

密码强度检测过程–>

新密码是否旧密码的回文–>

新密码是否只是就密码改变了大小写–>

新密码是否和旧密码很相似–>

新密码是否太短–>

新密码的字符是否是旧密码字符的一个循环 例如旧密码:123 新密码:231 –>

这个密码以前是否使用过

password required pam_cracklib.so \

difok=3 minlen=15 dcredit=2 ocredit=2

允许有3个新、旧密码相同字符的

最小长度15位 和至少包含2数字、至少包含2个特殊字符数

password required pam_cracklib.so \

dcredit=-1 ucredit=-1 ocredit=-1 lcredit=0 minlen=8

最小长度为8和至少1位数字,1位大写字母,和另外1个字符的密码

注意这个设置对于root没有作用。只针对普通用户

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

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

相关文章

for循环,定时器,闭包混合一块的那点事。

1&#xff0c;对于一个基本的for循环&#xff0c;顺序输出变量值。 for(var i 1; i < 4; i){console.log(i);//结果不多说了吧} 2&#xff0c;如果for循环中有定时器&#xff0c;如下代码。 for (var i 1; i < 4; i) {setTimeout(function() {console.log(i);//3个4}, …

前端学习(2309):react之同级传值

Home,js import React, {Component} from react; import News from "./News"; class Home extends Component {constructor(props) {super(props);this.state{text:我是默认值}}dataFun(text)>{console.log(text)this.setState({text})}render() {return (<di…

ie6/7 position relative overflow

ie6/7父容器overflow:auto;子容器position:relative;时子容器下面超出的部分会显示在父容器的外边。解决办法&#xff1a;父容器也加position:relative

linux基于域的虚拟目录,RHELAS4.0 apache配置之我的小结(虚拟目录,虚拟主机)

说明一下几个基本的Listen 80ServerName localhost:80ServerAdmin rootlocalhostServerRoot /etc/httpd #apache运行所在目录DirectoryRoot /var/www/htmlOptions FollowSymLinksAllowOrride NoneOrder allow,denyAllow from all#在httpd.conf上打上这些是不能启动apache的&…

11.SolrJ索引操作

创建索引 说明&#xff1a;根据id&#xff08;唯一约束&#xff09;域来更新Document的内容&#xff0c;如果根据id值搜索不到id域则会执行添加操作&#xff0c;如果找到则更新。 public void testCreateIndex() throws SolrServerException, IOException { SolrServer solrSer…

common lisp 学习第四天 变量、宏

//变量//引入变量&#xff1a;变量作用域括号内(let ((x 10) (y 20) z)...)引入变量列表中的变量(let* ((x 10) (y ( x 10))...)//全局变量之前有没有值都可以赋值(defparameter *count*变量名0值"doc描述")变量未定以才可以赋值&#xff0c;也可以不给定值(defvar *…

前端学习(2310):数据请求和json-server

app.js import React from react;import ./App.css; import Home from ./components/Home.js import World from "./components/World"; function App() {return (<div className"App">你好<World/></div>); }export default App;worl…

对Linux课程内容的建议,Linux课程笔记 Day01 课程内容总结(示例代码)

系统安装&#xff1a;引导项简单介绍&#xff1a;在“boot:”提示后&#xff1a;直接回车(Enter)——图形界面安装模式linux text——字符界面安装模式linux askmethod——提示用户选择安装方法(例如&#xff1a;nfs、ftp、http远程安装)linux rescue——救援模式&#xff0c;…

CommonJs、AMD、CMD模块化规范

/*** CommonJS 模块化规范* CommonJS规范加载模块是同步的&#xff0c;也就是说&#xff0c;只有加载完成&#xff0c;才能执行后面的操作*//*-------Node.js遵循Commonjs规范---------*///写法1.var exportsmodule.exports;exports.name"leyi";exports.fnfunction()…

前端学习(2311):react中处理跨域问题

proxy:{"/api":{target:"http://www.weather.com.cn/data/cityinfo/101320101.html",changeOrigin:true,"pathRewrite":{"^/api":"/"}}}

mysql显示行号

显示行号set intIndex 0;select (intIndex : intIndex 1) as RowNum ,* from table;

linux密码stdin怎么用,如何使ssh接收来自stdin的密码

根据这篇文章&#xff0c;您可以执行以下操作&#xff1a;创建一个使用SSH_ASKPASS打开ssh会话的命令(在man ssh上查找SSH_ASKPASS )$ cat > ssh_session <export SSH_ASKPASS"/path/to/script_returning_pass"setsid ssh "your_user""your_hos…

Dev Express Report 学习总结(五)在分组中使用聚集表达式AggregateExpression

聚集表达式AggregateExpression主要包括几种&#xff1a;Avg(),Count(),Exists(),Max(),Min(),Single()和Sum()。其中对于Sum()&#xff0c;在我看来主要有两种用法&#xff0c;一种是Group时的合计&#xff0c;另一种是整个页面某个列的值的合计。但是对于Count(),由于以前对D…

RavenDb中的Task异步应用.Net4

internal partial class RavenService : ServiceBase{ private RavenDbServer server; private Task startTask; public RavenService() { InitializeComponent(); } protected override void OnStart(string[] args) { //单独开启一个线程启动服务 startTask Task.Factory…

linux 线程间传送消息,Linux 多线程同步-消息队列

消息队列是消息的链表&#xff0c;存放在内核中并有消息队列标示符标示。msgget用于创建一个新队列或打开一个现存的队列。msgsnd将新消息加入到消息队列中&#xff1b;每个消息包括一个long型的type&#xff1b;和消息缓存&#xff1b;msgrcv用于从队列中取出消息&#xff1b;…

RTF文件格式

RTF1.8白皮书 http://www.microsoft.com/downloads/details.aspx?FamilyIDac57de32-17f0-4b46-9e4e-467ef9bc5540&displaylangen //标签 name为自定义标签名称{\*\bkmkstart name} //文本头部\rtf1RTF版本\ansi字符集\ansicpg936简体中文//字体表{\fonttbl{\f0字体0\fmode…

linux6.8安装图形桌面,图形/文本界面安装CentOS 6.8系统详解

2. anaconda的工作过程前面提到&#xff0c;使用anaconda安装CentOS系统有两种方式&#xff0c;默认使用的是图形界面(GUI)安装&#xff0c;要求主机内存至少有512MB内存。而使用基于文本配置接口(TUI)来安装CentOS则需要显示指定&#xff0c;指定方式可以是在菜单界面按ESC键&…

C#位图算法

在处理表格合并等问题时&#xff0c;可以考虑采用位图算法实现二维存储对象的处理通过Map.Set设置点值或Map.Fill填充区域。判断各点值时通过Map.Get获取扩展Point属性可以改成3维或更多维实现多维存储对象的处理/// <summary>/// 二维图形算法/// 王洪岐 121226/// <…

从零开始学JavaWeb

引言 记得上学时,有位导师说过一句很经典的话:"编程语言只是工具,最重要的是掌握思想。" 笔者一直主要从事.net领域的开发工作。随着工作阅历的丰富&#xff0c;越来越深刻的理解当年导师说的那句话的意义。 "他山之石,可以攻玉",相互借鉴,然后为我所用,无…