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 等工具截取有用数据。
[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