为基于Linux嵌入式系统的串口shell开启用户名/密码登录功能

串口shell给开发带来很多便利,但量产的产品为了安全性考虑,进行串口登入的时候也希望像ssh那样要求输入用户名和密码才能进入控制台。

一、客制化busybox
make menuconfig
Login/Password Management Utilities —>
[*] login (NEW)

二、修改启动脚本
vim /etc/inittab
::askconsole:/bin/ash –login
改为
::askconsole:/bin/login

三、root密码默认设置
package/base-files/files/etc/shadow //可以通过webui设置好,查看/etc/shadow文件,再写到源码。

官网wiki

http://wiki.openwrt.org/doc/howto/serial.console.password

步骤

步骤
确认开启busybox的login
CONFIG_BUSYBOX_CONFIG_LOGIN=y

修改/etc/inittab
把原来的
::askconsole:/bin/ash –login
改成
::askconsole:/bin/login

这个地方是依情况而定的,比如我的7620A固件是这样的

ttyS0::askfirst:/bin/ash –login
ttyS1::askfirst:/bin/ash –login

相应的改成

ttyS0::askfirst:/bin/login
ttyS1::askfirst:/bin/login

即可。
禁用单用户模式

Single user mode is available through GRUB and allows to boot without password. An attacker is then able to change root password and reboot.

A solution would be to lock-down OpenWRT booloader process, to make sure that booting in linux single user mode is impossible. This has to be discussed and this is not yet documented.

禁用单用户模式可以做到串口一个用户名和密码,root一个用户名和密码,不冲突。

禁用串口写入

如果像禁用串口的写操作,可以将::askconsole:/bin/login这个一行注释掉,用#注释即可。

 

 

以上为参考文章,实际应用以自己的系统版本为准,比如我的开发平台:

 

1.busybox中没有login这一项的设置,于是置之不理;

 

2.
修改/etc/inittab,原来的:

::sysinit:/etc/init.d/rcS
#ttyS0::respawn:/sbin/getty 115200 ttyS0
#-/bin/sh means a login shell
::askfirst:/bin/sh
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount ar
::shutdown:/bin/mount / o remount,ro

 

改成:

::sysinit:/etc/init.d/rcS
#ttyS0::respawn:/sbin/getty 115200 ttyS0
#-/bin/sh means a login shell
::askfirst:/bin/login
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount ar
::shutdown:/bin/mount / o remount,ro

3.修改登录密码:

打开etc/shadow:

root:1zopmh9fRspg5skhBiAD10n6Zp0Pu.1:14610:0:99999:7:::

上面表示:登录用户名为root,密码为1zopmh9fRspg5skhBiAD10n6Zp0Pu.1

 

加密后密码可以用下面的命令生成:

openssl passwd -1 -salt (< /dev/urandom tr -dc '[:alnum:]' | head -c 32)

Password: # input your password,比如123456
然后生成:1zopmh9fRspg5skhBiAD10n6Zp0Pu.1