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

相关文章

如何使用celery进行异步处理和定时任务(django)

《如何使用celery进行异步处理和定时任务(django)》文章介绍了Celery的基本概念、安装方法、如何使用Celery进行异步任务处理以及如何设置定时任务,通过Celery,可以在Web应用中... 目录一、celery的作用二、安装celery三、使用celery 异步执行任务四、使用celery

使用Python绘制蛇年春节祝福艺术图

《使用Python绘制蛇年春节祝福艺术图》:本文主要介绍如何使用Python的Matplotlib库绘制一幅富有创意的“蛇年有福”艺术图,这幅图结合了数字,蛇形,花朵等装饰,需要的可以参考下... 目录1. 绘图的基本概念2. 准备工作3. 实现代码解析3.1 设置绘图画布3.2 绘制数字“2025”3.3

Jsoncpp的安装与使用方式

《Jsoncpp的安装与使用方式》JsonCpp是一个用于解析和生成JSON数据的C++库,它支持解析JSON文件或字符串到C++对象,以及将C++对象序列化回JSON格式,安装JsonCpp可以通过... 目录安装jsoncppJsoncpp的使用Value类构造函数检测保存的数据类型提取数据对json数

python使用watchdog实现文件资源监控

《python使用watchdog实现文件资源监控》watchdog支持跨平台文件资源监控,可以检测指定文件夹下文件及文件夹变动,下面我们来看看Python如何使用watchdog实现文件资源监控吧... python文件监控库watchdogs简介随着Python在各种应用领域中的广泛使用,其生态环境也

el-select下拉选择缓存的实现

《el-select下拉选择缓存的实现》本文主要介绍了在使用el-select实现下拉选择缓存时遇到的问题及解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录项目场景:问题描述解决方案:项目场景:从左侧列表中选取字段填入右侧下拉多选框,用户可以对右侧

Python中构建终端应用界面利器Blessed模块的使用

《Python中构建终端应用界面利器Blessed模块的使用》Blessed库作为一个轻量级且功能强大的解决方案,开始在开发者中赢得口碑,今天,我们就一起来探索一下它是如何让终端UI开发变得轻松而高... 目录一、安装与配置:简单、快速、无障碍二、基本功能:从彩色文本到动态交互1. 显示基本内容2. 创建链

springboot整合 xxl-job及使用步骤

《springboot整合xxl-job及使用步骤》XXL-JOB是一个分布式任务调度平台,用于解决分布式系统中的任务调度和管理问题,文章详细介绍了XXL-JOB的架构,包括调度中心、执行器和Web... 目录一、xxl-job是什么二、使用步骤1. 下载并运行管理端代码2. 访问管理页面,确认是否启动成功

Java中的密码加密方式

《Java中的密码加密方式》文章介绍了Java中使用MD5算法对密码进行加密的方法,以及如何通过加盐和多重加密来提高密码的安全性,MD5是一种不可逆的哈希算法,适合用于存储密码,因为其输出的摘要长度固... 目录Java的密码加密方式密码加密一般的应用方式是总结Java的密码加密方式密码加密【这里采用的

使用Nginx来共享文件的详细教程

《使用Nginx来共享文件的详细教程》有时我们想共享电脑上的某些文件,一个比较方便的做法是,开一个HTTP服务,指向文件所在的目录,这次我们用nginx来实现这个需求,本文将通过代码示例一步步教你使用... 在本教程中,我们将向您展示如何使用开源 Web 服务器 Nginx 设置文件共享服务器步骤 0 —

Java中switch-case结构的使用方法举例详解

《Java中switch-case结构的使用方法举例详解》:本文主要介绍Java中switch-case结构使用的相关资料,switch-case结构是Java中处理多个分支条件的一种有效方式,它... 目录前言一、switch-case结构的基本语法二、使用示例三、注意事项四、总结前言对于Java初学者