基于U-Boot的Linux强制改变密码

前提条件:

  1. 可以进入U-Boot,一般需要调试串口 使用minicom连接相应串口,在Hit any key to stop autoboot时按下按键

特别的如果minicom中按键没有作用,需要调整minicom的流控设置

sudo minicom -s

选择Serial port setup

将 Hardware Flow Control改为No

U-Boot一般情况下都未设置密码,此处是一个安全隐患

  1. 进入U-Boot核心思路为改变bootargs的参数,在参数后增加single init=/bin/sh参数

先尝试使用查找bootargs参数

u-boot=> printenv bootargs
bootargs=XXXXX
u-boot=> setenv bootargs "XXXXX single init=/bin/sh"
u-boot=> saveenv

操作完毕后这里要记得改回去

如果未查找到bootargs参数大概率使用了间接定义例如我这个

u-boot=> print
XXXX
mmcargs=setenv bootargs ${jh_clk} console=${console} root=${mmcroot}
netargs=setenv bootargs ${jh_clk} console=${console} root=/dev/nfs ip=dhcp nfsrp
XXXX

首先确定我是使用mmc启动所以更改mmcargs参数

u-boot=> setenv mmcargs "setenv bootargs ‘${jh_clk}‘ console=‘${console}‘ root=‘${mmcroot}‘ single init=/bin/sh"
u-boot=> saveenv

这里需要注意显示为${console}的在设置时需要加”否则会直接将值带入中

  1. 重启

可以正常进入命令行,使用passwd命令修改相关用户密码

  1. 修改完毕后记得恢复U-Boot相关环境变量的值