Busybox 如何进入系统
两种方式
一种不需要用户名密码验证 A
一种需要用户名密码验证 B
一种输入任何用户名都可以自动登录,且获取root C
一种只需要用户名验证 D
方式A
在/etc/inittab 中添加如下
console::askfirst:-/bin/sh
方式D
在/etc/inittab 中添加如下
console::respawn:/sbin/getty -L console 0 vt100
$ cat etc/passwd // 仅有root用户的passwd文件
root:x:0:0:root:/root:/bin/sh
$ cat etc/shadow // 无密码的shadow
root::0::::::
输入 账户root 可以直接登陆,不需要输入密码,配置如下
#
# Login/Password Management Utilities
#
CONFIG_FEATURE_SHADOWPASSWDS=y
CONFIG_USE_BB_PWD_GRP=y
CONFIG_USE_BB_SHADOW=y
CONFIG_USE_BB_CRYPT=y
CONFIG_USE_BB_CRYPT_SHA=y
CONFIG_ADD_SHELL=y
CONFIG_REMOVE_SHELL=y
CONFIG_ADDGROUP=y
CONFIG_FEATURE_ADDUSER_TO_GROUP=y
CONFIG_ADDUSER=y
# CONFIG_FEATURE_CHECK_NAMES is not set
CONFIG_LAST_ID=60000
CONFIG_FIRST_SYSTEM_ID=100
CONFIG_LAST_SYSTEM_ID=999
CONFIG_CHPASSWD=y
CONFIG_FEATURE_DEFAULT_PASSWD_ALGO="des"
CONFIG_CRYPTPW=y
CONFIG_MKPASSWD=y
CONFIG_DELUSER=y
CONFIG_DELGROUP=y
CONFIG_FEATURE_DEL_USER_FROM_GROUP=y
CONFIG_GETTY=y
CONFIG_LOGIN=y
# CONFIG_LOGIN_SESSION_AS_CHILD is not set
CONFIG_LOGIN_SCRIPTS=y
CONFIG_FEATURE_NOLOGIN=y
CONFIG_FEATURE_SECURETTY=y
CONFIG_PASSWD=y
CONFIG_FEATURE_PASSWD_WEAK_CHECK=y
CONFIG_SU=y
CONFIG_FEATURE_SU_SYSLOG=y
CONFIG_FEATURE_SU_CHECKS_SHELLS=y
# CONFIG_FEATURE_SU_BLANK_PW_NEEDS_SECURE_TTY is not set
CONFIG_SULOGIN=y
CONFIG_VLOCK=y
方式B
-
Busybox 没有提供 /etc/passwd /etc/shadow
-
但是提供了 /sbin/getty 来验证 用户名和密码,验证过程请参考这里
-
如果我们要用用户名登录的方式 所以需要自己做 这两个文件
我们可以先 用其他方式(ACD) 进入系统
passwd root 会做出
一个带密码的passwd文件 : 当 shadow 文件不存在或者 shadow存在但是语法不正确
或者
一个带密码的shadow文件 : 当 shadow 文件存在且语法正确
-------------------------------------------------------------------------
分享 4条 带密码的passwd文件内容,他们的 用户名都是root,密码都是root
root:Lu3xcmVKWnfxs:0:0:root:/root:/bin/sh
root:y7eQC7vErb646:0:0:root:/root:/bin/sh
root:iufFiKkykDzms:0:0:root:/root:/bin/sh
root:lySCmJ.1txm4M:0:0:root:/root:/bin/sh
分享 1条 带密码的shadow文件内容,他们的 用户名都是root,密码都是root
此时passwd文件为 root:x:0:0:root:/root:/bin/sh
root:P7EOI0G9KsVO6:0::::::
方式C
内核启动前,会将path 设置 为 /sbin:/usr/sbin:/bin:/usr/bin
busybox 中的配置,login的时候随便输入什么都可以进入,但是不能只是回车
$ cat etc/inittab
console::respawn:/sbin/getty -L console 0 vt100 -l /usr/autologin.profile
$ cat usr/autologin.profile
#!/bin/sh
/bin/login -f root
$ cat etc/passwd
root:x:0:0:root:/root:/bin/sh
最简版如下
$ cat etc/inittab
console::respawn:getty -L console 0 vt100 -l /usr/autologin.profile
$ cat usr/autologin.profile
login -f root
$ cat etc/passwd
root:x:0:0:root:/root:/bin/sh
------
注意 : /bin/sh 不可简写为 sh , 因为他最后要exec 这个 字符串"/bin/sh"
如果没有/root,会提示
login: can't change directory to '/root'
login[41]: root login on 'UNKNOWN'
/ # whoami
root
/ # echo $SHELL
/bin/sh
/ # pwd
/
其他账户登录也行,此时进入之后用户为test
$ cat etc/inittab
console::respawn:getty -L console 0 vt100 -l /usr/autologin.profile
$ cat usr/autologin.profile
login -f test
$ cat etc/passwd
root:x:0:0:root:/root:/bin/sh
test:x:700:1001::/home/test:/bin/sh