写在前面
在做交换机Linux系统移植的过程中,发现进入shell的密码还是上一家的默认密码,还是改改吧。简单交代一下,ENOS上kernel加载完成之后应用的启动顺序如下如:
这里是不进入shell的,而是直接进入klish作为交换机的命令行交互界面,类似于quagga的vtysh。之后在configure
视图下面执行start shell
进入linux shell的。
在fnconvert里面会获取用户root
的密码,其实就是使用getspnam
获取passwd或者shadow
的口令。既然这玩意使用的是Linux的账户和密码,那就是修改/etc/passwd
文件了。
passwd文件简介
Linux中每个用户在/etc/passwd文件中都有一个对应的记录行,每一行被冒号:
分隔为7个字段,具体含义如下:
1 | 用户名:口令:用户标识号:组标识号:注释性描述:主目录:登陆shell |
发行版中口令字段一般是*或x
,*
表示账号锁定, x
表示密码存放在/etc/shadown
文件中(访问需要sudo权限,而passwd文件不需要),当然我们的嵌入式系统密文是直接放在passwd中,如下:
其它字段除了登陆shell
就没啥好玩的了,有些账号出于安全限制,并不会允许登陆进shell,而采用nologin
的方式可以让这些用户使用部分系统功能。
修改用户密码
常规的在linux命令行下面修改密码没啥好说的,直接敲passwd
然后输入新密码就行了,之后你会发现passwd或者shadow
中的口令发生变化了。这里介绍一下口令了列的组成,不同的特殊字符表示不同的特殊意义:
1 | 1. 该列留空,即"::",表示该用户没有密码。 |
我看自己的linux服务器上面都是使用SHA-512加密的,而嵌入式系统上面用的是MD5,使用命令
就可以生成密码了,将原来的口令字段替换掉即可完成密码的修改。
有个小问题,实验过程中,发现在嵌入式系统上直接在命令行中修改密码不是按照$id$salt$hashed
模式生成的口令,而是:
但是在发行版Linux上面是符合预期的,有可能是嵌入式系统的某些差异吧,这里留个记录!