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,一经查实,立即删除!

相关文章

【原创】Android之修改AlertDialog对话框及使用系统Holo风格

前一阵子在做伪装密码的功能&#xff0c;需要使用系统的对话框&#xff0c;对话框需要加长按事件等等。哈&#xff0c;直接上代码&#xff0c;我是比较喜欢直接看代码的。 1. 获取AlertDialog的Title final int alertTitleId getResources().getIdentifier( "alertTitle…

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;就可以创建密码框。密码框和单行文本框…

Java设计模式笔记(6)观察者模式

观察者模式&#xff0c;也叫发布订阅模式&#xff0c;定义对象之间的一种一对多的依赖关系&#xff0c;使得每当一个对象改变状态&#xff0c;则所有依赖于它的对象都会得到通知并被自动更新。 观察者模式的几个角色&#xff1a; Subject被观察者&#xff1a;定义被观察者必须…

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

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

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

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

循环所有数据库执行脚本

这里仅仅提供一个事例&#xff0c;抛砖引玉&#xff0c;如果对您起到丁点作用&#xff0c;那是在下的荣幸 select name into #dbname from sys.databases where name like edb_a% and name not like %_dw select name,ROW_NUMBER() over (order by name asc) from #dbname d…

Java设计模式笔记(7)适配器模式

适配器模式定义&#xff1a;将一个类的接口变成客户端所期待的另一种接口&#xff0c;从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。适配器模式&#xff08;Adapter Pattern&#xff09;&#xff0c;适配器模式又叫做变压器模式&#xff0c;也叫做包装模式&…

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

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

Java设计模式笔记(8)装饰模式

装饰模式&#xff1a;动态地给一个对象添加一些额外的职责&#xff08;以对客户端透明的方式扩展对象的功能&#xff09;&#xff0c;就增加功能来说&#xff0c;装饰模式相比生成子类更为灵活&#xff0c;是继承关系的一个替代方案。 装饰模式的四个角色&#xff1a; 抽象构…

python中的引用怎么理解_python 引用和对象理解

今天浏览博客的时候看到这么一句话&#xff1a; python中变量名和对象是分离的&#xff1b;最开始的时候是看到这句话的时候没有反应过来。决定具体搞清楚一下python中变量与对象之间的细节。&#xff08;其实我感觉应该说 引用和对象分离 更为贴切&#xff09; 从最开始的变量…

取MapString,sitemap中的全部key

Map<String,Site> siteMap conference.getSiteList(); Set<String> keyList siteMap.keySet();//得到key集合 Iterator<String> it keyList.iterator();//遍历key while(it.hasNext()){ ConfModelVsDept ConfModelVsDept new ConfModelVsDept(); String …

AIDL Service,跨进程调用Services

一、AIDL Service简介 Android系统中&#xff0c;各个应用都运行在自己的进程中&#xff0c;进程之间一般无法直接进行通信&#xff0c;为了实现进程通信&#xff0c;Android提供了AIDL Service&#xff1b; 二、与本地Service不同 本地Service&#xff1a;直接把IBinder对象…

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

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

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

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

python每周小测验答案_python第一周小测验答案Centos下更新Python版本

Centos下更新Python版本&#xff0c;有需要的朋友可以参考下。 注意&#xff1a;更新python千万不要把老版本的删除&#xff01;新老版本是可以共存的&#xff0c;很多基本的命令、软件包都要依赖预装的老版本python的&#xff0c;比如yum。 更新python&#xff1a; 第1步&…

【复习】使用 SQLiteDatabase 操作 SQLite 数据库

Android提供了一个名为SQLiteDatabase的类&#xff0c;该类封装了一些操作数据库的API&#xff0c;使用该类可以完成对数据进行添加(Create)、查询(Retrieve)、更新(Update)和删除(Delete)操作&#xff08;这些操作简称为CRUD&#xff09;。对SQLiteDatabase的学习&#xff0c;…

grep, egrep, fgrep笔记

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

python可以开多少线程_python多线程详解

python多线程详解 一、线程介绍 什么是线程 线程&#xff08;Thread&#xff09;也叫轻量级进程&#xff0c;是操作系统能够进行运算调度的最小单位&#xff0c;它被包涵在进程之中&#xff0c;是进程中的实际运作单位。线程自己不拥有系统资源&#xff0c;只拥有一点儿在运行中…

android 设置线程优先级

1. android.os.Process.setThreadPriority &#xff08;int priority&#xff09;或 android.os.Process.setThreadPriority &#xff08;int tid&#xff0c; int priority&#xff09; priority&#xff1a;【-20&#xff0c; 19】&#xff0c;高优先级 -> 低优先级…