centos删除文件夹_等保测评主机安全之centos密码长度

密码长度,作为等级保护主机测评项里中密码复杂度要求之一,是必须要查的。

在《等级测评师初级教程》里,对于密码长度的设置指向了/etc/login.defs里的PASS_MIN_LEN字段。

#  PASS_MIN_LEN    Minimum acceptable password length.PASS_MIN_LEN    5

简单明了,对新密码的长度最小值做出了限制。

不过,实际上这个参数是无效的,至少在centos6以及以上版本里,这个参数对新密码长度没有一点点的制约。

比如大家可以试一试,给PASS_MIN_LEN设一个值,再用非root账户去改改密码,看看对新密码长度有没有影响。甚至,还可以直接删除login.defs文件,试一试。

反正,我的测试结果是:这个参数没有起到作用。

结果是出来了,至于原因,我没找到,网上也没有相关的资料。或许该参数在centos以前的某个老版本里是有作用的,但随着版本更新,特别估计是开始使用PAM认证机制后,该参数就无效化了,仅仅作为一个迷惑人的参数放置在login.defs文件里。

实际上真正起作用的,是一个pam模块,具体点,也就是pam_cracklib.so模块。

PAM认证机制个人感觉就是一个模块化、组件化的机制,一些人把一些认证、验证以及其他功能实现好了,然后上层的应用去调用配置文件(接口),而配置文件呢再调用底层的实现,大概就是下图这个样子:

f7e1f711dac798dd6e7e4553b21ee966.png

所谓的应用程序,就包括在linux里使用的命令,好,回到密码长度这个话题。

修改密码时对于密码的一系列验证由pam_cracklib.so模块实现,那么谁去调用?那当然就是passwd了(修改密码的命令)。

passwd怎么调用的?是通过配置文件(接口)做到的。

在centos6以及以上版本中,这个配置文件就是/etc/pam.d中与passwd同名的文件,也就是/etc/pam.d/passwd

顺便一提,/etc/pam.d中基本都是这类同名文件:

[root@centos01 ~]# ls /etc/pam.datd               fingerprint-auth-ac  password-auth      smtp            system-config-authenticationauthconfig        gdm                  password-auth-ac   smtp.postfix    system-config-dateauthconfig-gtk    gdm-autologin        polkit-1           smtp.sendmail   system-config-kdumpauthconfig-tui    gdm-fingerprint      poweroff           sshd            system-config-keyboardchfn              gdm-password         ppp                sshd~           system-config-networkchsh              gnome-screensaver    reboot             ssh-keycat      system-config-network-cmdconfig-util       halt                 remote             su              system-config-userscrond             ksu                  run_init           sudo            vmtoolsdcups              login                runuser            sudo-i          xservercvs               login~               runuser-l          su-ldovecot           newrole              setup              system-autheject             other                smartcard-auth     system-auth~fingerprint-auth  passwd               smartcard-auth-ac  system-auth-ac

/etc/pam.d/passwd的内容如下:

[root@centos01 ~]# cat /etc/pam.d/passwd#%PAM-1.0auth       include    system-authaccount    include    system-authpassword   substack    system-auth-password   optional    pam_gnome_keyring.so

对于配置文件,具有一定的规范,第一列代表模块类型,类型分为4种:

auth: 用来对用户的身份进行识别.如:提示用户输入密码,或判断用户是否为root

account:对帐号的各项属性进行检查.如:是否允许登录,是否达到最大用户数,或是root用户是否允许在这个终端登录等

session:这个模块用来定义用户登录前的,及用户退出后所要进行的操作.如:登录连接信息,用户数据的打开与关闭,挂载文件系统等.

passwd:使用用户信息来更新.如:修改用户密码.

这里,由于是修改密码,所以会使用passwd类型的模块。

配置文件是可以互相调用的,passwd文件里的第三行

password   substack    system-auth

就调用了system-auth配置文件。

这里的substack和include都是引用的意思,只是稍微有点区别(具体百度就知道了)。

然后这个system-auth文件也在/etc/pam.d的文件夹中,内容为

[root@centos01 ~]# cat /etc/pam.d/system-auth#%PAM-1.0# This file is auto-generated.# User changes will be destroyed the next time authconfig is run.auth        required      pam_env.soauth        sufficient    pam_fprintd.soauth        sufficient    pam_unix.so nullok try_first_passauth        requisite     pam_succeed_if.so uid >= 500 quietauth        required      pam_deny.soaccount     required      pam_unix.soaccount     sufficient    pam_localuser.soaccount     sufficient    pam_succeed_if.so uid < 500 quietaccount     required      pam_permit.sopassword    requisite     pam_cracklib.so try_first_pass retry=3 type=password    sufficient    pam_unix.so sha512 shadow nullok try_first_pass use_authtokpassword    required      pam_deny.sosession     optional      pam_keyinit.so revokesession     required      pam_limits.sosession     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uidsession     required      pam_unix.so

其中,具体被引用(使用)到的是:

password    requisite     pam_cracklib.so try_first_pass retry=3 type=password    sufficient    pam_unix.so sha512 shadow nullok try_first_pass use_authtokpassword    required      pam_deny.so

pam_cracklib.so模块有不少参数,主要常用的有这几个(摘抄于网上):

minlen=N:最小密码长度。dcredit=N:当N>=0时,N代表新密码最多可以有多少个阿拉伯数字。当N<0时,N代表新密码最少要有多少个阿拉伯数字。ucredit=N:和dcredit差不多,但是这里说的是大写字母。lcredit=N:和dcredit差不多,但是这里说的是小写字母。ocredit=N:和dcredit差不多,但是这里说的是特殊字符。

似乎到这里就差不多了,因为都找到了实际控制新密码最小长度的地方了,但其实还没完呢。

因为网上关于pam_cracklib模块中这几个参数的解释,可以说,基本上都是不准确的。

那当然,我都这么说了,我这里自然会给一个准确的解释(我觉得这应该是全网唯一清楚且准确的中文解释了,因为我自己在查找资料的时候完全没有搜到,有些资料比较接近,但实际还是没说清楚)。

准确的解释来man命令输出的说明文档:https://linux.die.net/man/8/pam_cracklib

其实写得还是比较清楚的,但是还是有点抽象,我稍微解释下。

minlen确实有最小长度的意思,但是当dcredit、ucredit、lcredit、ocredit的值(N)大于等于零的时候,情况就不同了。

N大于零的时候,完全不是网上说的“最多可以有多少个数字或大小写字母或特殊字符”的意思,而是计算长度的时候会有变化。

比如ocredit(特殊字符)的值是2的时候,就代表有最多有2个特殊字符的长度额外能加1。

当你设置的密码是:@#¥,它的长度被算作是5,而不是3。因为有2个特殊字符的长度被看做是2(额外加了个1),而第3个特殊字符没有此类变化,长度仍被视作是1,所以总共长度时(2+2)+1=5。

所以,如果ocredit的值是4,那么@#¥%&的长度就是(4+4)+1=9。

其余的大小写字母和数字的值大于零时,也是这个意思。而他们的默认值都是1,也就是会有1个字符的长度额外加1。

所以如果你什么都不设置,就设置minlen=8的话,理论上你的新密码只要4类字符都包含,那么4个字符就够了,比如:1Aa@

当然,如果你真这么设置,实际上是不行的,因为除了minlen对长度有限制,cracklib内部有代码对其有限制,而且优先级高于minlen。

解释如下:Note that there is a pair of length limits in Cracklib itself, a “way too short” limit of 4 which is hard coded in and a defined limit (6) that will be checked without reference to minlen。

大概的代码如下:

#define MINLEN 6  char *  FascistLook(pwp, instring)   PWDICT *pwp;   char *instring;  {   int ii;   char *ptr;   char *jptr;   char junk[STRINGSIZE];   char *password;   char rpassword[STRINGSIZE];   int32 notfound;   notfound = PW_WORDS(pwp);   /* already truncated if from FascistCheck() */   /* but pretend it wasn't ... */   strncpy(rpassword, instring, TRUNCSTRINGSIZE);   rpassword[TRUNCSTRINGSIZE - 1] = '';   password = rpassword;   if (strlen(password) < 4)   {   return ("it's WAY too short");   }   if (strlen(password) < MINLEN)   {   return ("it is too short");   }   jptr = junk;   *jptr = '';   for (ii = 0; ii < STRINGSIZE && password[ii]; ii++)   {   if (!strchr(junk, password[ii]))   {   *(jptr++) = password[ii];   *jptr = '';   }   }   if (strlen(junk) < MIND

所以说,如果长度小于4,会输出it’s WAY too short,如果大于4小于6,会输出it is too short。

当然,超过了6之后,就是由minlen控制了。

嗯……扯了这么久,大概把修改密码时密码长度的事情说完了。

正如前言所说,和等保关系不大。

不过如果在检查的时候看到PASS_MIN_LEN    8 的时候,是给这1分还是不给分呢?

我想大家在心里都是有答案的,嘿嘿。

另外,这个pam认证机制还是经常会碰到的,比如在登录失败处理功能中,是用pam_tally或者pam_tally2模块去实现。

所以聪明的你一定知道具体应该去哪个配置文件里查看是否进行设置了。

比如远程ssh连接的登录失败处理功能,自然就是去pam.d文件夹中的sshd文件查看,sshd又引用passwd-auth,所这两个文件都可以实现失败处理(所以初级教程让你去system-auth里查看配置,其实是管不了ssh远程连接登录的,实际上管的是本地tty终端登录)。

而本地tty终端登录,也就是使用login命令,是去pam.d文件夹中的login文件查看,login则引用system-auth文件,同理,这两个文件都可以实现。

至于su命令和图形化界面窗口登录(比如gdm-password)也是按照这种方法去查看有效配置文件在哪儿。

就先写到这了,以后有空再写一写其他的。

*本文原创作者:起于凡而非于凡,本文属FreeBuf原创奖励计划,未经许可禁止转载

ee15686087ca03c189a49ebb0c7438a0.gif

精彩推荐

be9aa5d18650b90a6b8f9ffc1467ebf2.png38f707e957b7f533b92c5c05b4511f9a.png291656a88565099110ea5e9ae596d646.png8cbe61bdb290a0cecd1904ffbb45c783.pngd550d15cf811b351a00114085deca4fc.gif4694316c67996a79f7fe15c4839e5094.gif

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

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

相关文章

Activity的四种启动模式-图文并茂

1、对于使用standard 模式的活动&#xff0c;系统不会在乎这个活动是否已经在返回栈中存在&#xff0c;每次启动都会创建该活动的一个新的实例。例如A启动A&#xff0c;A再接着启动A&#xff0c;A继续启动A&#xff0c;然后再分别出栈&#xff0c;如图所示2、当活动的启动模式指…

ajax如何提交多表单的值_25 HTML5表单基本控件(二)

成长是一辈子的事儿&#xff01;大家好&#xff01;我是时问新。分享前端、Python等技术&#xff0c;以及个人成长路上的那些事儿。密码框使用标签&#xff0c;把标签上的type属性的值&#xff0c;设置为"password"&#xff0c;就可以创建密码框。密码框和单行文本框…

android_studio上传svn的时候那些不提交

buid文件夹不需要提交 转载于:https://www.cnblogs.com/YangBinChina/p/5708510.html

python语音分割_用7行Python代码构建自己的有声读物

点击关注我哦欢迎关注 “小白玩转Python”&#xff0c;发现更多 “有趣”有声读物是我们可以通过音频听取一本书或者其他作品的内容&#xff0c;是现下一种很受欢迎的阅读方式。类似的APP有&#xff1a;喜马拉雅、得到和樊登读书等。但是如果你有一本pdf格式的书籍&#xff0c;…

stata生成脉冲响应图怎么导出_Stata:面板VAR模型(pvar2命令)

&#x1f308;2021年寒假Stata研讨班&#xff1a;高级计量经济学及Stata应用研讨班&#x1f449;2021空间计量研讨班&#xff1a;空间计量及Geoda、Stata、ArcGis、Matlab应用PVAR这个程序最初是由Inessa Love编写的。它允许用户估计面板向量自回归和产生方差分解和脉冲响应函数…

一台电脑同时启动多个java_如何在一台同时登录多个微信?

点击上方蓝字关注我相信大家对手机上的微信双开并不陌生&#xff0c;很多人由于工作需要&#xff0c;需要多开一个甚至多个微信。对于安卓手机来说&#xff0c;双开微信并不是什么难事。现在大部分国产安卓手机都自带微信双开功能(一般在设置里面搜索“分身”或者“双开”就能找…

利用Python进行数据分析(1) 简单介绍

一、处理数据的基本内容 数据分析 是指对数据进行控制、处理、整理、分析的过程。 在这里&#xff0c;“数据”是指结构化的数据&#xff0c;例如&#xff1a;记录、多维数组、Excel 里的数据、关系型数据库中的数据、数据表等。 二、说说 Python 这门语言 Python 是现在最受…

grep, egrep, fgrep笔记

grep, egrep, fgrep grep: 根据模式搜索文本&#xff0c;并将符合模式的文本行显示出来。Pattern: 文本字符和正则表达式的元字符组合而成匹配条件grep [options] PATTERN [FILE...] -i&#xff1a;不区分大小写 --color -v: 显示没有被模式匹配到的行 -o&#…

ArcGIS for Desktop入门教程_第八章_Desktop学习资源 - ArcGIS知乎-新一代ArcGIS问答社区...

ArcGIS for Desktop入门教程_第八章_Desktop学习资源 - ArcGIS知乎-新一代ArcGIS问答社区 原文:ArcGIS for Desktop入门教程_第八章_Desktop学习资源 - ArcGIS知乎-新一代ArcGIS问答社区1 学习资源用户在学习和应用过程中&#xff0c;可以参考的资源如下&#xff1a;1. ArcGIS资…

amd sata controller下载_AMD发布全新锐龙芯片组驱动:告别卡死、报错

AMD今天发布了全新的锐龙平台芯片组驱动&#xff0c;版本号2.04.04.111&#xff0c;从界面到功能都全面升级&#xff0c;并修复了此前存在的多个严重Bug。新驱动重新设计了安装界面&#xff0c;借鉴了Radeon Adrenalin 2020肾上腺素显卡驱动的诸多元素&#xff0c;更加时尚美观…

mysql数据库基础的简单操作指南

最近在学习mysql,本文是做的关于mysql学习的笔记&#xff0c;跟大家分享一下&#xff0c;希望对大家学习mysql知识有所助益。mysql现在几乎已经成了网站建设的主流数据库&#xff0c;很多php网站系统都采用了mysql数据库。比mssql最大的优势在于开源&#xff0c;免费。希望与大…

kill 进程_结束进程,查看后台进程

有一些进程想要结束怎么办呢&#xff1f;进程的优先是怎样的呢?如何查看后台正在运行的进程呢&#xff1f;下面我就来讲讲给进程发送信号(kill -l列出所有支持的信号)[rootqianfeng ~]# kill -l 编号 信号名1) SIGHUP 重新加载配置2) SIGINT 键盘中断CtrlC3) SIGQUIT 键盘退出…

软碟通

转载于:https://www.cnblogs.com/jcfxl/p/5739741.html

controller调用controller的方法_SpringCloud(5):Feign整合Ribbon和Hystrix来进行远程调用与服务熔断...

Feign前面我们虽然使用了Ribbon和Hystrix进行了负载均衡和服务熔断&#xff0c;但是我们的消费方代码中由于要调用提供方的服务&#xff0c;比如&#xff1a;String user this.restTemplate.getForObject("http://service-provider/user/" id, String.class);使用了…

vba excel 退出编辑状态_VBA小常识(15)—Application对象

VBA小常识&#xff08;15&#xff09;—Application对象学习自杨洋老师《全民一起学VBA》Application是位于最顶端的对象&#xff0c;代表excel程序本身&#xff0c;所有对象都属于它。1. application.cells当前处于激活状态的工作表&#xff0c;即“活动工作表”的单元格。此时…

c++ stack 遍历_划重点啦!带你解读图的两种遍历方式

01知识框架02图的遍历1深度优先遍历基本思想&#xff1a;首先访问图中起始顶点v&#xff0c;然后由v出发&#xff0c;访问与v邻接且未被访问的顶点再访问与v相邻且未被访问的顶点 w1...重复上述过程。当不能再继续向下访问时&#xff0c;依次退回到最近被的问的顶点&#xff0c…

for循环延时_单片机的独立按键学习,实现60秒循环数字的启动暂停与清零

想要学习单片机必须要准备单片机开发板一块&#xff0c;和单片机C语言版本的书籍&#xff0c;我会把每天录制视频的源代码到头条&#xff0c;并且录制相同文章名字视频到西瓜视频&#xff0c;如果你再学习独立按键这一块有不明白的地方可以点开我的头像&#xff0c;进入我的主页…

mysql创建全外连接的视图_关系型数据库 MySQL 表索引和视图详解

原创&#xff1a; JiekeXu JiekeXu之路 一、索引数据库索引通俗的讲就是和书本的目录一样&#xff0c;主要就是为了提高查询数据的效率。由于数据存储在数据库表中&#xff0c;所以索引是创建在数据库表对象上&#xff0c;由表中的一个字段或多个字段生成的键组成&#xff0c;这…

FatMouse's Speed hdu 1160(动态规划,最长上升子序列+记录路径)

http://acm.hdu.edu.cn/showproblem.php?pid1160 题意&#xff1a;现给出老鼠的体重与速度&#xff0c;要求你找出符合要求的最长子序列。 要求是 W[m[1]] < W[m[2]] < ... < W[m[n]]&#xff08;体重&#xff09; && S[m[1]] > S[m[2]] > ... > S[…

设计一个名为complex的类来表示复数_complex类java解决

作者&#xff1a;wzu_cza123出自&#xff1a;CSDN原文&#xff1a;blog.csdn.net/wzu_cza123/article/details/108857953?utm_mediumdistribute.pc_category.none-task-blog-hot-5.nonecase&depth_1-utm_sourcedistribute.pc_category.none-task-blog-hot-5.nonecase&…