Linux密码破解步骤
- 重新启动系统
- 开机倒数时间内,敲任意键
- 按字母e去编辑
- 选择kernel 开头的行,再次按字母e 编辑 ,然后敲空格,输入数字1,再敲回车。进入单用户模式,破解密码。此模式绕过密码验证
- 按字母键b 去引导进入系统
- 直接passwd 修改root用户的密码
- 修改密码后,输入init 5或者init 3 进入系统,或者reboot重新启动系统
vim /etc/inittab(必记!!)
- 0 关机(不能把默认设置成这个);
- 1 单用户模式 —》破解密码的时候(单用户模式还是要登录root)(绕过了shadow文件)(相当于windows中进PE模式);
- 2 多用户模式。不能使用NFS功能(网络功能);
- 3 完全多用户模式,可以使用网络功能。纯字符界面;
- 4 unused 没有的;
- 5 图形界面;
- 6 重新启动(不能把默认设置成此项)。
所以,在终端输入:
- init 0 :关机 (/poweroff/halt/shutdown -h now都是关机)
- init 6 重新启动(/reboot/shutdown -r now)
- init 3 进入字符界面
runlevel 查看当前运行级别
会看到:1 S ---》1代表开机进入的运行级别 S 代表当前的运行级别
若是: S 3 ---》说明是从单用户切换到运行级别3
营救模式
(eg:删除了/etc/passwd文件,进不去系统)
如何进入营救模式?(rescue mode )
- 使用光盘进入
- 设置从光盘启动(快速按下ESC键,选择从光盘启动) 注意!按一次ESC即可,注意,不好按!太快了!
放入系统光盘;
选择rescue installed system 进入营救模式
(centos需要选择)rescue method –》local cd/dvd
(敲)
chroot /mnt/sysimage --》切换根环境到原来本身系统里的根
cp /etc/passwd- /etc/passwd
exit
reboot
小结:
单用户模式—》破解密码–》看/etc/passwd,不看/etc/shadow
营救模式–》进入不了系统了
写脚本
作业1:
写一个脚本新建5个用户,用户名的前缀为zhang 例如:zhang1 zhang2 到zhang5,5个用户的密码为123456zhang,家目录在/zhang目录下与用户名同名。
1.需求分析
1.使用什么命令来实现,什么功能算法
useradd 、passwd 、for
2.完善功能
3.开始给脚本起名字
create_user.sh
4.运行调试
方法一
#!/bin/bash
#function:create system user
#author:cali
#version:1.0
mkdir /zhang
for i in `seq 5`
do
useradd -d /zhang/zhang$i zhang$i
echo "123456zhang"|passwd zhang$i --stdin
done
方法二(加强版)
#!/bin/bash
echo "please input system user name"
read Name
[ -d /zhang ]&&echo "now,beginning to create user"||mkdir /zhang
for i in {1..5}
#for i in `seq 5`
#for i in $(seq 5)
do
if id $Name$i &>/dev/null
then
echo "sorry,user $Name$i is exist,please input name again"
exit
else
useradd -d /zhang/$Name$i $Name$i
echo "123456zhang"|passwd $Name$i --stdin &>/dev/null
echo "create $Name$i sucess!"
fi
done
计时小脚本900秒。
echo 实验开始
for i in `seq 900` ---》``反引号:优先执行反引号里面的命令:
do
echo 过去了$i秒
sleep 1 --》暂停一秒
done
echo timeover
awk是linux下的一个文本处理工具,主要用来截取想要的文本。
- -F : 是指定分割符号;
- $1 $2 是第几个
- cmd1 && cmd2 作用:如果cmd1命令执行成功就执行cmd2命令
- cmd1 || cmd2 作用:如果cmd1命令执行不成功就执行cmd2命令
- cmd1 &&cmd2 ||cmd3 作用:如果cmd1执行成功就执行cmd2,如果cmd1执行不成功就执行cmd3命令
- (mkdir aa mkdir bb mkdir ccc) 小括号的作用就是看做一个整体,只要括号内最后一条命令执行成功,则echo $? 就等于0.
if 命令
编写2个脚本
实现批量新建用户,可以自定义输入用户的名字、新建用户的数量、用户的密码。输入密码的时候不能显示出来。
if [ 条件];then
command1
command2
......
else
command1
command2
......
fi
[条件] 其实就是执行命令。当条件成立(命令执行成功),就执行第1个command1及后续命令;如果不成立,就执行else后面的command1及后续命令;
$? 是上一条命令的返回值,其中 0 代表命令执行成功,非零值代表不成功;
;分号是 命令连接符,不管前面的命令执行成功与否都会执行后面的命令!!!
执行脚本的方法
- bash abc.sh
- ./abc.sh
- . abc.sh
chmod +x adduser.sh 授予可执行权限
# bash -x useradd_feng.sh 调试脚本。可以看到每条命令的执行过程
练习:
1.编写脚本实现如下新建用户的功能:
1.接受用户输入的用户名,例如liu ,将liu作为用户名的前缀
2.接受用户输入的需要创建的用户数量,例如:20 ,意思就是要新建20个用户
3.接受用户输入的想要给所有用户设置的密码,例如:123456a
#!/bin/bash
read -p "please input username:" name
read -p "please input the number:" num
read -sp "please input the passwd:" passwd
for i in `seq $num`
do
useradd $name$i
if [ $? = 0 ]
then
echo "useradd $name$i is OK"
else
echo "useradd $name$i failed"
continue
fi
echo $num |passwd $name --stdin &>/dev/null
echo "passwd $name$i is ok!"
done
2.如果root的密码忘记了,如何破解?—–》虚拟机里完成,密码破解。
密码破解步骤
1.重新启动系统
2.开机倒数时间内,敲任意键
3.按字母e去编辑
4.选择kernel 开头的行,再次按字母e 编辑,然后敲空格 输入数字1,再敲回车。进入单用户模式,破解密码。此模式绕过密码验证
5.按字母键b 去引导进入系统
6.直接passwd 修改root用户的密码
7.输入init 5或者init 3 进入系统,或者reboot重新启动系统
3.编写删除用户的脚本。
1.接受用户输入的用户名,例如liu ,将liu作为用户名的前缀
2.接受用户输入的需要删除的用户数量,例如:20
3.要求有显示所有系统里用户的功能,删除前先显示下系统里所有的用户,然后接受用户输入的用户名,开始去删除。
4.如果用户不存在给予提醒,不能删除不存在的用户
#!/bin/bash
#function:To delete the user
#author:liupeng
#version:1.0
read -p "please input delete username:" name
read -p "please input the number:" num
for i in `seq $num`
do
userdel -r $name$i
if [ $? = 0 ]
then
echo "userdel $name$i is OK"
else
echo "userdel $name$i failed"
continue
fi
done
4.请编写一个脚本实现如下功能:
在屏幕上显示uid 大于500的用户的名字和uid号及家目录的位置,例如下面的格式输出
xiaoliu uid is 500 home directory is /home/xiaoliu
xiaohei uid is 600 home directory is /home/xiaohei
wuji uid is 900 home directory is /home/wuji
......
方法一:
#cat /etc/passwd| sort -n -k 3 -t:|cut -d : -f1,3,6|awk -F ':' '{if($2>=500)print "$1 " uid is "$2 " the home dir is "$3"}'
#cat /etc/passwd| sort -n -k 3 -t:|cut -d : -f1,3,6|awk -F ':' '$2>=500&&$2<=1000{print "$1 " uid is "$2 " the home dir is "$3"}'
方法二:
[root@teacher lianxi]# cat hecheng_gt500.sh
#!/bin/bash
#function:Statistics user uid great than 500
#author:naige
#version:1.0
cat passwd |cut -d ":" -f 1,3,4,6 |sort -n -t: -k2 >tongji.txt
cp -f /etc/passwd ./
#username
username=($(cat tongji.txt |cut -d: -f1))
#uid
home=($(cat tongji.txt |cut -d: -f4))
uid=($(cat tongji.txt |cut -d: -f2))
#gid
#gid=($(cat tongji.txt |cut -d: -f3))
#home
echo "${username[$i-1]} uid is ${uid[$i-1]} home directory is ${home[$i-1]}"
for i in `seq ${#username[@]}`
do
if (( ${uid[$i-1]} > 500 ))
then
fi
done