密码检查、生成随机密码

一、密码检查

1、下载地址:

官网:http://www.openwall.com/john/
连接:http://www.openwall.com/john/j/john-1.8.0.tar.gz 

2、安装:

tar zxvf john-1.8.0.tar.gz
cd  john-1.8.0/src
make clean linux-x86-64  ##安装
cd ../run/

3、使用:(复杂密码无法破解)

破解shadow文件:
./unshadow  /etc/passwd  /etc/shadow >linuxfan
cat  linuxfan
破解密码:
./john linuxfan  
查看已经破解的密码:
./john --show  linuxfan
cat ./john.pot  ##只有密码的密文和明文的对应

4、判断linux是否是弱密码

1)linux中采用pam pam_cracklib module来实现对密码强度的检测,可以通过配置让linux系统自动检测用户的密码是否为弱密码。也可以通过一些命令来判断密码是否为弱密码:

#rpm -qa|grep cracklib
cracklib-2.9.0-11.el7.x86_64
cracklib-dicts-2.9.0-11.el7.x86_64

2)如果没有安装,在centos上可以通过以下命令安装:

 yum install cracklib
#ubuntu上可以用以下命令
apt-get install libcrack2
#如果需要依赖此库做开发的话需要安装这个
yum install cracklib-devel

3)可以通过以下命令来判断密码的强弱性:--------打印OK的是说明密码强度是够的

[root@localhost ~]# echo "password" | cracklib-check
password: it is based on a dictionary word
[root@localhost ~]# echo "12345abc" | cracklib-check 
12345abc: it is too simplistic/systematic
[root@localhost ~]# echo "12345abAB&*c" | cracklib-check 
12345abAB&*c: it is too simplistic/systematic
[root@localhost ~]# echo "12345abABDGOK&*c" | cracklib-check 
12345abABDGOK&*c: OK

4)如果你是个系统管理员,希望用户的密码强度设置的更强些,在linux可以通过配置,调用cracklib进行相关检查: 在centos上配置文件为:/etc/pam.d/system-auth

 # pam_cracklib模块和设置的几个模块参数
password required pam_cracklib.so retry=3 minlen=6 difok=3
#pam_unix模块,MD5表示采用MD5做hash
password required pam_unix.so md5 use_authtok      

5)如果你想判断密码强度可以在linux上安装另外一个软件来判断密码强度:

安装:
yum install libpwquality
判断:
[root@localhost ~]#  echo "password" | pwscore
Password quality check failed:
The password fails the dictionary check - it is based on a dictionary word
[root@localhost ~]#  echo "passworD3&*d" | pwscore
72
[root@localhost ~]#  echo "passworD3ab3ioijij" | pwscore
100

6)以上方法虽然可以检测密码是否安全,但是会在shell的历史记录中,有可能会被泄露出去,这就需要另外一个命令:
#会进入交互模式,输入密码给出判断结果
#退出按Ctrl+D

[root@slave1 run]# cat | cracklib-check 
abc
abc: WAY 过短
Runstone@123
Runstone@123: OK

二、生成随机密码

1)密码生成
mkpasswd命令生成随机复杂密码,前提安装expect,然后执行mkpasswd命令即可生成随机的密码。

 #安装expect
yum install expect

#生成随机密码
mkpasswd

mkpasswd  -l 20 -d 5 -c 5 -C 5 -s 5
0u72G+G6j$@{PB2k+oqD
参数说明:
  -l #      (密码的长度定义, 默认是 9)
  -d #      (数字个数, 默认是 2)
  -c #      (小写字符, 默认是 3)
  -C #      (大写字符, 默认是 2)
  -s #      (特殊字符, 默认是  1)
  -v        (详细。。。)
  -p prog   (程序设置密码, 默认是 passwd)

2)加密自己的密码,其实也不能叫加密,只是用base64编码处理了下

echo -en 'jiaofan' | openssl base64
amlhb2Zhbg==
解密base64:
echo -en 'amlhb2Zhbg==' | base64  -d
http://www.stl56.com/base64/

3)使用字符串截取提取随机密码

提前定义好需要的字母,然后随机提取。

[root@www ~]# ./randpass.sh 6
Fl11K2
[root@www ~]# cat randpass.sh 
#!/bin/bash
#功能描述:使用字符串截取的方式生成随机密码

#定义变量:10个数字+52个字符
key="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#"

randpass(){
	if [ -z "$1" ];then
		echo "randpass 函数需要一个参数,用来指定提取的随机数个数。"
		return 127
	fi

#调用$1参数,循环提取任意个数据字符
#用随机数对65取余,返回结果为【0-64】
	pass=""
	for i in `seq $1`
	do
		num=$[RANDOM%${#key}]
		local tmp=${key:num:1}
		pass=${pass}${tmp}
	done
	echo $pass
}

randpass $1
[root@www ~]# 

4)使用命令生成随机数据

[root@www jiaofan]# uuidgen                    #<==生成16进制随机字符串
7d4bb5e4-1d7b-459b-9a61-5fca68c9ec64
[root@www jiaofan]# uuidgen
31fae921-c1c7-46aa-b619-57ea575523a4
[root@www jiaofan]# openssl rand -hex 1        #<==生成16进制随机字符串
43
[root@www jiaofan]# openssl rand -hex 2
d323
[root@www jiaofan]# openssl rand -base64 1     #<==生成含特殊字符的随机字符串
0Q==
[root@www jiaofan]# openssl rand -base64 10
HggBwV2ZK7Zk6g==
[root@www jiaofan]# openssl rand -base64 6
ac2Ki3Bc
[root@www jiaofan]# date +%s       #<==通过时间提取随机数字
1645513159
[root@www jiaofan]# date +%s       #<==1970-1-1 到当前的秒数
1645513199
[root@www jiaofan]# date +%s%N     #<==1970-1-1 到当前的纳秒数
1645513167058821650
[root@www jiaofan]# 

5)使用设备文件生成随机数据

设备上提供了两个生成随机数的设备文件,如果cat 这两个文件,需要用 ctrl+C组合键才能中断文件,由于这两个文件会提供多余数据,所以可以使用cut、head 等工具截取有用数据。

  • /dev/random
  • /dev/urandom
[root@www jiaofan]# tr -cd '_a-zA-Z0-9' < /dev/urandom | head -c 10
XCxnnroaje

6)通过Hash 值生成随机数据

Hash 可以把任意长度的输入数据通过散列算法变换成固定长度的输出,输出值也叫散列值。linux 系统自带很多支持散列算法的工具:md5sum、sha1sum、sha256sum、sha512sum等,通过这些工具可以生成随机数据。需要注意的是,这种方式提取的随机数据都是十六进制数,也就是随机数据的范围是0-9A-F

[root@www jiaofan]# echo a | md5sum
60b725f10c9c85c70d97880dfe8191b3  -
[root@www jiaofan]# echo a | md5sum | cut -d' ' -f1
60b725f10c9c85c70d97880dfe8191b3
[root@www jiaofan]#  md5sum  /etc/passwd | cut -d' ' -f1
c49bef4dd54dade2b3901fee25c01e40
[root@www jiaofan]# 

7)使用进程号或进程数量生成随机数

这主要是我们编写脚本时用到的临时文件名,临时文件名可以采用进程号、进程个数、文件行数或者文件个数之类的方式生成。

[root@www jiaofan]# cat randfile.sh 
#!/bin/bash
#功能表述:生成随机临时文件

#根据进程号生成随机文件
touch /tmp/$$.tmp

#根据进程数量生成随机文件
pnum=$(ps -aux | wc -l)
touch /tmp/$pnum.tmp

#根据文件数量生成随机文件
fnum=`find /etc | wc -l`
touch /tmp/$fnum.tmp

#根据文件行数生成随机文件
cnum=`cat /var/log/messages | wc -l`
touch /tmp/$cnum.tmp

你可能感兴趣的:(linux,shell,核心编程,linux,bash,centos,运维,服务器)