海思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

相关文章

C#借助Spire.XLS for .NET实现在Excel中添加文档属性

《C#借助Spire.XLSfor.NET实现在Excel中添加文档属性》在日常的数据处理和项目管理中,Excel文档扮演着举足轻重的角色,本文将深入探讨如何在C#中借助强大的第三方库Spire.... 目录为什么需要程序化添加Excel文档属性使用Spire.XLS for .NET库实现文档属性管理Sp

Python+FFmpeg实现视频自动化处理的完整指南

《Python+FFmpeg实现视频自动化处理的完整指南》本文总结了一套在Python中使用subprocess.run调用FFmpeg进行视频自动化处理的解决方案,涵盖了跨平台硬件加速、中间素材处理... 目录一、 跨平台硬件加速:统一接口设计1. 核心映射逻辑2. python 实现代码二、 中间素材处

python中的flask_sqlalchemy的使用及示例详解

《python中的flask_sqlalchemy的使用及示例详解》文章主要介绍了在使用SQLAlchemy创建模型实例时,通过元类动态创建实例的方式,并说明了如何在实例化时执行__init__方法,... 目录@orm.reconstructorSQLAlchemy的回滚关联其他模型数据库基本操作将数据添

Spring配置扩展之JavaConfig的使用小结

《Spring配置扩展之JavaConfig的使用小结》JavaConfig是Spring框架中基于纯Java代码的配置方式,用于替代传统的XML配置,通过注解(如@Bean)定义Spring容器的组... 目录JavaConfig 的概念什么是JavaConfig?为什么使用 JavaConfig?Jav

Java数组动态扩容的实现示例

《Java数组动态扩容的实现示例》本文主要介绍了Java数组动态扩容的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1 问题2 方法3 结语1 问题实现动态的给数组添加元素效果,实现对数组扩容,原始数组使用静态分配

Python实现快速扫描目标主机的开放端口和服务

《Python实现快速扫描目标主机的开放端口和服务》这篇文章主要为大家详细介绍了如何使用Python编写一个功能强大的端口扫描器脚本,实现快速扫描目标主机的开放端口和服务,感兴趣的小伙伴可以了解下... 目录功能介绍场景应用1. 网络安全审计2. 系统管理维护3. 网络故障排查4. 合规性检查报错处理1.

Python轻松实现Word到Markdown的转换

《Python轻松实现Word到Markdown的转换》在文档管理、内容发布等场景中,将Word转换为Markdown格式是常见需求,本文将介绍如何使用FreeSpire.DocforPython实现... 目录一、工具简介二、核心转换实现1. 基础单文件转换2. 批量转换Word文件三、工具特性分析优点局

Springboot3统一返回类设计全过程(从问题到实现)

《Springboot3统一返回类设计全过程(从问题到实现)》文章介绍了如何在SpringBoot3中设计一个统一返回类,以实现前后端接口返回格式的一致性,该类包含状态码、描述信息、业务数据和时间戳,... 目录Spring Boot 3 统一返回类设计:从问题到实现一、核心需求:统一返回类要解决什么问题?

Java使用Spire.Doc for Java实现Word自动化插入图片

《Java使用Spire.DocforJava实现Word自动化插入图片》在日常工作中,Word文档是不可或缺的工具,而图片作为信息传达的重要载体,其在文档中的插入与布局显得尤为关键,下面我们就来... 目录1. Spire.Doc for Java库介绍与安装2. 使用特定的环绕方式插入图片3. 在指定位

Springboot3 ResponseEntity 完全使用案例

《Springboot3ResponseEntity完全使用案例》ResponseEntity是SpringBoot中控制HTTP响应的核心工具——它能让你精准定义响应状态码、响应头、响应体,相比... 目录Spring Boot 3 ResponseEntity 完全使用教程前置准备1. 项目基础依赖(M