一、问题描述
1、实验环境
- Hisilicon HI3559AV100
- 设备正常启动,所有功能正常
2、实验目的
- 为了防止别人通过终端随便登录到设备,所以需要在通过telnet和串口连接到设备的时候输入密码
3、所遇问题及操作方法
- 操作方法:
- 通过telnet连接设备后命令行正常提示输入用户名和密码,但是通过串口连接后无需验证直接进入
- 问题现象:
- 通过串口连接后自动登录并有一条提示信息:Auto login as root … 如图
- 期望现象:
二、解决办法
1、修改rootfs/inittab文件
- 该修改是解决串口自动登录的问题
- 将-n后面的部分去掉
# Example of how to put a getty on a serial line (for a terminal)
#::respawn:/sbin/getty -L ttyS000 115200 vt100 -n root -I "Auto login as root ..."
::respawn:/sbin/getty -L ttyS000 115200 vt100
2、修改busyBox源码busybox-1.26.2\loginutils\getty.c
- 该修改是解决串口连接后,第一次登录只需要输入用户名就可以跳过密码验证进入系统
- 在getty_main函数中最后修改,将-f换为–:
//BB_EXECLP(G.login, G.login, "-f", logname, (char *)0);
BB_EXECLP(G.login, G.login, "--", logname, (char *)0);
三、修改解释
1、解决串口自动登录的问题
- inittab文件是init进程的配置文件,init是linux的0号进程,在该进程中会决定系统启动后需要做什么,怎么做等等。
- respawn:这个字段是不管何时终止重新进入某个进程,就比如我将命令终端退出了,再次进入就执行某某
- /sbin/getty:这个是打开终端,然后默认调用/bin/login进行登录
- -L:表示程序不等待DCD信号。DCD信号是串口通讯时的一个信号,表示Data Carrier Detected,一般是modem连通之后会发送回来的一个信号,表示数据载波OK,可以继续通信了。但是,在现在的串口通信中,特别是嵌入式开发的时候,开发板上的串口,DCD这个pin一般都不会连线的,一般只连tx/rx/cts/rts四根线就OK了。
- -n:不提示输入用户名,也就是自动通过root进行登录(还需要结合login -f root才能算完全自动登录)
- -I:打印信息
- respawn:/sbin/getty 就是重新进入后执行getty
2、解决只要输入用户名跳过密码验证问题
- 查看login的帮助信息可以知道,-f参数的意思就是跳过指定用户的密码校验,所以将getty_main中执行login的地方传入的-f参数换掉就可以了