海思3536平台上使用pam.d模块实现密码强度功能

2023-11-11 14:40

本文主要是介绍海思3536平台上使用pam.d模块实现密码强度功能,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

  • 前言
  • 一、PAM模块介绍
  • 二、工具交叉编译及实现
    • 1.工具、模块交叉编译([打包的源码包下载地址](https://download.csdn.net/download/qq91551663/20217178))
        • 1. cracklib库
        • 2.pam模块
        • 3.pwquality 密码策略模块
        • 4.shadow命令包
    • 2.编译后文件整理
  • 三、运行时常见问题及解决
  • 四、密码安全功能(举例)
      • 1.密码多次错误后锁住登录一定时间,可以防暴力破解
      • 2.去掉缺省密码,第一次登录强制修改密码
      • 3.不能使用历史已用密码作为新密码


前言

海思sdk带的busybox,密码强度的功能非常简单(busybox-1.20.2、libbb/obscure.c文件),由于客户对密码强度、复杂度,密码修改的限制等有严格的要求,故加入pam.d模块,实现密码控制的需求。


一、PAM模块介绍

PAM(Pluggable Authentication Modules )是由Sun提出的一种认证机制。它通过提供一些动态链接库和一套统一的API,将系统提供的服务和该服务的认证方式分开,使得系统管理员可以灵活地根据需要给不同的服务配置不同的认证方式而无需更改服务程序,同时也便于向系统中添加新的认证手段。
PAM使用配置/etc/pam.d/下的文件,来管理对程序的认证方式,应用程序调用相应的配置文件,从而调用本地的认证模块,模块放置在/lib/security下,以加载动态库的形式进,像我们使用su命令时,系统会提示你输入root用户的密码.这就是su命令通过调用PAM模块实现的。
详细功能可参考 Linux下PAM模块学习总结

二、工具交叉编译及实现

1.工具、模块交叉编译(打包的源码包下载地址)

我的目录结构
在这里插入图片描述

1. cracklib库

Cracklib包 包含一个库,通过将用户选择的密码与所选单词列表中的单词进行比较,该库用于实施强密码。源码路径及安装、内容、命令解释~点这,这也是下载地址,

修改后交叉编译:

tar -zxf cracklib-2.9.7.tar.gz
cd cracklib-2.9.7/
./configure --host=arm-hisiv400-linux --prefix=$(pwd)/../../install CC=arm-hisiv400-linux-gcc AR=arm-hisiv400-linux-ar --disable-static --with-default-dict=/usr/share/cracklib
make ;make install

如果make的时候报man错,可以简单粗暴直接修改Makefile,去掉
SUBDIRS = po man(删掉) libmisc lib src

编译完成后,开始创建CrackLib字典(一些命令及路径需要root权限,我是在板子/home/上生成后再cp回服务器的编译目录),先下载cracklib-words-2.9.7.bz2(上文有下载地址)

1、mkdir -p /home/new_dict/dict/out/
2、cd /home/new_dict
3、install -v -m644 -D  cracklib-words-2.9.7.bz2 dict/cracklib-words.bz2
4、cd dict/
5、bunzip2 -v cracklib-words.bz2 (可能有些系统不支持bunzip2命令,这个可以挂载服务器,然后在本地执行解压)
6、ln -v -sf cracklib-words words
7、echo $(hostname) >> cracklib-extra-words
8、install -v -m755 -d /lib/cracklib
9、将交叉编译生成的命令create-cracklib-dict、cracklib-packer、cracklib-format(这个是脚本,有些交叉编译的gzip命令不支持-d参数,需删除不然报错)、cracklib-check拷贝到板子/sbin目录(或者有执行权限的其它目录)
10、执行 create-cracklib-dict --output out/ cracklib-words cracklib-extra-words
11、在out目录生成字典文件pw_dict.hwm、pw_dict.pwd、pw_dict.pwi,拷贝回至服务器编译目录的(你自己rootfs路径)/usr/share/cracklib/
2.pam模块

源码下载地址,编译也比较简单

tar -zxf Linux-PAM-1.3.1.tar.gz
cd Linux-PAM-1.3.1/
./configure --host=arm-hisiv400-linux --prefix=$(pwd)/../../install
make ;make install

编完之后,install/include 里面添加一个security目录,拷贝一份头文件到此处,后面用到。

3.pwquality 密码策略模块

Linux对应的密码策略模块有:pam_passwdqc 和 pam_pwquality 。其中pam_passwdqc模块对应的是/etc/login.defs,pam_pwquality对应的是/etc/security/pwquality.conf

模块的配置方法有两种:(配置文件解析可参考这里)
a、password required pam_pwquality.so dcredit=-1 ucredit=-1 ocredit=-1 lcredit=0
b、添加到/etc/security/pwquality.conf 中

这里我选择交叉编译生成pam_pwquality.so 来支持,密码复杂度功能,源码。

tar -zxf libpwquality-1.4.4.tar.gz
cd libpwquality-1.4.4/
./configure --host=arm-hisiv400-linux build=arm-hisiv400-linux --prefix=$(pwd)/../../install/ --enable-pam LIBS=-L$(pwd)/../../install/lib CFLAGS=-I$(pwd)/../../install/include/
make;make install
4.shadow命令包

源码及命令详解,主要包含了登录(login、su)、用户和组管理(chage、passwd、useradd、usermod、userdel、groupadd、groupdel)等等命令。
交叉编译的命令会与busybox自带的冲突,例如passwd,可以修改busybox的config文件,屏蔽passwd命令
# CONFIG_PASSWD is not set
# CONFIG_FEATURE_PASSWD_WEAK_CHECK is not set

tar -zxf shadow-4.8.tar.gz
cd shadow-4.8/
./configure --host=arm-hisiv400-linux --prefix=$(pwd)/../../install/ --with-libpam=yes --with-libcrack=yes LIBS=-L$(pwd)/../../install/lib/ LDFLAGS="-lpamc -lpam_misc -lpam"  CFLAGS=-I$(pwd)/../../install/include

2.编译后文件整理

编完之后在install目录会生成执行文件、头文件、库、文档、配置文件等,我们需要用到的大概有下面这些,拷贝到编译的rootfs目录下(注意lib目录有软链接,拷贝时需要加-a,保存软链接)。
在这里插入图片描述

整个编译目录打包下载在这,包括我们自己修改的modify目录,顶层Makefile文件,可以按不同编译器偷懒地一起编译。

三、运行时常见问题及解决

1.执行passwd时,报 "pam_unix(passwd:chauthtok): authentication failure"
添加SetUID(或者 s 权限),当一个具有执行权限的文件设置SetUID权限后,用户执行这个文件时将以文件所有者的身份执行,chmod 755 /usr/bin/passwdchmod u+s /usr/bin/passwd	2.不符合密码验证机制的话就修改不成功,会有各种报错:
“BAD PASSWORD: it's WAY too short”,这是报密码太短,不符合/etc/login.defs的设置;
“BAD PASSWORD: it is based on your username”,这是密码与帐号不能同名,这是不符合/etc/pam.d/passwd的设置;
“BAD PASSWORD: it is too simplistic/systematic"太简单/连贯的字符
“BAD PASSWORD: it is based on a dictionary word”这是因为出现了字典里的字符串。人名、地名,或者我们常用的单词,那么会被提示 it is based on a dictionary word 	也可以使用cracklib-check工具检测是否能用, root@hisi:#echo "Change_Me" | cracklib-checkChange_Me: it is based on a dictionary wordroot@hisi:#echo "wohenshuai123," | cracklib-checkwohenshuai123,: OK
3. 命令运行问题、登录问题可以通过查看日志文件定位出错位置(需要rsyslogd命令支持)
root@hisi:~# cat /var/log/secure                 
Jul 30 14:28:32 hisi login[1565]: pam_unix(login:session): session opened for user root by root(uid=0)
Jul 30 14:28:32 hisi login[3039]: ROOT LOGIN  on '/dev/ttyS000'
Jul 30 14:49:07 hisi sshd[9195]: pam_unix(sshd:account): expired password for user admin (root enforced)
Jul 30 14:49:07 hisi sshd[9195]: pam_unix(sshd:session): session opened for user admin by (uid=0)
Jul 30 14:49:23 hisi passwd[9200]: pam_unix(passwd:chauthtok): password changed for admin
Jul 30 14:49:23 hisi sshd[9195]: pam_unix(sshd:session): session closed for user admin
Jul 30 14:49:25 hisi sshd[9291]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh 	ruser= rhost=192.168.1.104  user=admin
Jul 30 14:49:34 hisi sshd[9291]: pam_unix(sshd:session): session opened for user admin by (uid=0)4.其它问题后续再补充....

四、密码安全功能(举例)

1.密码多次错误后锁住登录一定时间,可以防暴力破解

	ssh远程登录/etc/pam.d/sshd,在第一行后插入一行配置:#%PAM-1.0auth	required	pam_tally2.so even_deny_root deny=3 unlock_time=60串口/etc/pam.d/login ,在第一行下即#%PAM-1.0的下面添加: auth	required	pam_tally2.so even_deny_root deny=3 unlock_time=60  root_unlock_time=60当密码输入错误超过3次时,账户锁住,hisi login: rootAccount locked due to 4 failed logins可以用pam_tally2命令查看密码错误次数root@hisi:/#pam_tally2 --user adminLogin           Failures Latest failure     Fromadmin               5    03/10/21 20:02:07  192.168.1.104root用户下,可以用pam_tally2命令解锁锁住的用户root@hisi:/# pam_tally2 --user admin --resetLogin           Failures Latest failure     Fromadmin               5    03/10/21 20:02:07  192.168.1.104

2.去掉缺省密码,第一次登录强制修改密码

	1). 判断如果是第一次登陆系统,则去掉密码,并强制密码过期usermod -L root;passwd -d root;chage -d 0 root;usermod -U root2). 修改完密码后,可设置用户密码有效期chage -m 0 -M 365 -I 0 -W 7 root

chage命令用法可参考这
usermod命令用法可参考这

3.不能使用历史已用密码作为新密码

	修改/etc/pam.d/system-auth-local文件,加入下面一行,remember=5,即最近5次使用过的密码就不能再用作新密码password    required      pam_pwhistory.so use_authtok remember=5 enforce_for_root

其它需求功能可见这里

这篇关于海思3536平台上使用pam.d模块实现密码强度功能的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/390763

相关文章

Java实现字节字符转bcd编码

《Java实现字节字符转bcd编码》BCD是一种将十进制数字编码为二进制的表示方式,常用于数字显示和存储,本文将介绍如何在Java中实现字节字符转BCD码的过程,需要的小伙伴可以了解下... 目录前言BCD码是什么Java实现字节转bcd编码方法补充总结前言BCD码(Binary-Coded Decima

SpringBoot全局域名替换的实现

《SpringBoot全局域名替换的实现》本文主要介绍了SpringBoot全局域名替换的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录 项目结构⚙️ 配置文件application.yml️ 配置类AppProperties.Ja

Java使用Javassist动态生成HelloWorld类

《Java使用Javassist动态生成HelloWorld类》Javassist是一个非常强大的字节码操作和定义库,它允许开发者在运行时创建新的类或者修改现有的类,本文将简单介绍如何使用Javass... 目录1. Javassist简介2. 环境准备3. 动态生成HelloWorld类3.1 创建CtC

使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解

《使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解》本文详细介绍了如何使用Python通过ncmdump工具批量将.ncm音频转换为.mp3的步骤,包括安装、配置ffmpeg环... 目录1. 前言2. 安装 ncmdump3. 实现 .ncm 转 .mp34. 执行过程5. 执行结

Python实现批量CSV转Excel的高性能处理方案

《Python实现批量CSV转Excel的高性能处理方案》在日常办公中,我们经常需要将CSV格式的数据转换为Excel文件,本文将介绍一个基于Python的高性能解决方案,感兴趣的小伙伴可以跟随小编一... 目录一、场景需求二、技术方案三、核心代码四、批量处理方案五、性能优化六、使用示例完整代码七、小结一、

Java实现将HTML文件与字符串转换为图片

《Java实现将HTML文件与字符串转换为图片》在Java开发中,我们经常会遇到将HTML内容转换为图片的需求,本文小编就来和大家详细讲讲如何使用FreeSpire.DocforJava库来实现这一功... 目录前言核心实现:html 转图片完整代码场景 1:转换本地 HTML 文件为图片场景 2:转换 H

Java使用jar命令配置服务器端口的完整指南

《Java使用jar命令配置服务器端口的完整指南》本文将详细介绍如何使用java-jar命令启动应用,并重点讲解如何配置服务器端口,同时提供一个实用的Web工具来简化这一过程,希望对大家有所帮助... 目录1. Java Jar文件简介1.1 什么是Jar文件1.2 创建可执行Jar文件2. 使用java

C#使用Spire.Doc for .NET实现HTML转Word的高效方案

《C#使用Spire.Docfor.NET实现HTML转Word的高效方案》在Web开发中,HTML内容的生成与处理是高频需求,然而,当用户需要将HTML页面或动态生成的HTML字符串转换为Wor... 目录引言一、html转Word的典型场景与挑战二、用 Spire.Doc 实现 HTML 转 Word1

C#实现一键批量合并PDF文档

《C#实现一键批量合并PDF文档》这篇文章主要为大家详细介绍了如何使用C#实现一键批量合并PDF文档功能,文中的示例代码简洁易懂,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言效果展示功能实现1、添加文件2、文件分组(书签)3、定义页码范围4、自定义显示5、定义页面尺寸6、PDF批量合并7、其他方法

SpringBoot实现不同接口指定上传文件大小的具体步骤

《SpringBoot实现不同接口指定上传文件大小的具体步骤》:本文主要介绍在SpringBoot中通过自定义注解、AOP拦截和配置文件实现不同接口上传文件大小限制的方法,强调需设置全局阈值远大于... 目录一  springboot实现不同接口指定文件大小1.1 思路说明1.2 工程启动说明二 具体实施2