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

相关文章

Qt spdlog日志模块的使用详解

《Qtspdlog日志模块的使用详解》在Qt应用程序开发中,良好的日志系统至关重要,本文将介绍如何使用spdlog1.5.0创建满足以下要求的日志系统,感兴趣的朋友一起看看吧... 目录版本摘要例子logmanager.cpp文件main.cpp文件版本spdlog版本:1.5.0采用1.5.0版本主要

Java中使用Hutool进行AES加密解密的方法举例

《Java中使用Hutool进行AES加密解密的方法举例》AES是一种对称加密,所谓对称加密就是加密与解密使用的秘钥是一个,下面:本文主要介绍Java中使用Hutool进行AES加密解密的相关资料... 目录前言一、Hutool简介与引入1.1 Hutool简介1.2 引入Hutool二、AES加密解密基础

使用Python将JSON,XML和YAML数据写入Excel文件

《使用Python将JSON,XML和YAML数据写入Excel文件》JSON、XML和YAML作为主流结构化数据格式,因其层次化表达能力和跨平台兼容性,已成为系统间数据交换的通用载体,本文将介绍如何... 目录如何使用python写入数据到Excel工作表用Python导入jsON数据到Excel工作表用

SpringBoot实现微信小程序支付功能

《SpringBoot实现微信小程序支付功能》小程序支付功能已成为众多应用的核心需求之一,本文主要介绍了SpringBoot实现微信小程序支付功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作... 目录一、引言二、准备工作(一)微信支付商户平台配置(二)Spring Boot项目搭建(三)配置文件

鸿蒙中@State的原理使用详解(HarmonyOS 5)

《鸿蒙中@State的原理使用详解(HarmonyOS5)》@State是HarmonyOSArkTS框架中用于管理组件状态的核心装饰器,其核心作用是实现数据驱动UI的响应式编程模式,本文给大家介绍... 目录一、@State在鸿蒙中是做什么的?二、@Spythontate的基本原理1. 依赖关系的收集2.

Python基础语法中defaultdict的使用小结

《Python基础语法中defaultdict的使用小结》Python的defaultdict是collections模块中提供的一种特殊的字典类型,它与普通的字典(dict)有着相似的功能,本文主要... 目录示例1示例2python的defaultdict是collections模块中提供的一种特殊的字

基于Python实现高效PPT转图片工具

《基于Python实现高效PPT转图片工具》在日常工作中,PPT是我们常用的演示工具,但有时候我们需要将PPT的内容提取为图片格式以便于展示或保存,所以本文将用Python实现PPT转PNG工具,希望... 目录1. 概述2. 功能使用2.1 安装依赖2.2 使用步骤2.3 代码实现2.4 GUI界面3.效

MySQL更新某个字段拼接固定字符串的实现

《MySQL更新某个字段拼接固定字符串的实现》在MySQL中,我们经常需要对数据库中的某个字段进行更新操作,本文就来介绍一下MySQL更新某个字段拼接固定字符串的实现,感兴趣的可以了解一下... 目录1. 查看字段当前值2. 更新字段拼接固定字符串3. 验证更新结果mysql更新某个字段拼接固定字符串 -

java实现延迟/超时/定时问题

《java实现延迟/超时/定时问题》:本文主要介绍java实现延迟/超时/定时问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java实现延迟/超时/定时java 每间隔5秒执行一次,一共执行5次然后结束scheduleAtFixedRate 和 schedu

Java Optional避免空指针异常的实现

《JavaOptional避免空指针异常的实现》空指针异常一直是困扰开发者的常见问题之一,本文主要介绍了JavaOptional避免空指针异常的实现,帮助开发者编写更健壮、可读性更高的代码,减少因... 目录一、Optional 概述二、Optional 的创建三、Optional 的常用方法四、Optio