串口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,ro3.修改登录密码:
打开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
然后生成: