Linux profile and inittab file
/etc/profile文件是每个用户登录时都会运行的环境变量设置,属于系统级别的环境变量,设置在里面的东西对所有用户适用。/etc/inittab文件是系统初始化进入busybox后跑的一个配置文件。
下面通过具体例子,来分析这两个文件。
1.profile文件
通过两个例子来说明profile的使用。
a.修改路径提示
在console后,会有前面的一段提示信息,如下:
root@OpenWrt:/#
root@OpenWrt:/# cd etc/init.d/
root@OpenWrt:/etc/init.d#
会提示路径等,那这些信息是在那边限制的呢,就是位于/etc/中的profile文件,里面有个参数PS1,如下:
export PS1='\u@\h:\w\$ '
- \u:当前用户名 ;
- @:显示@ ;
- \h:显示主机第一个名 ;
- \w:完整工作目录,
- $:显示$
b.添加初次进入console提示信息
在路由器开机完后,在console按下回车键,会跳出一串拼接而成的openwrt字样,如下:
# cat /etc/banner
_______ ________ __
| |.-----.-----.-----.| | | |.----.| |_
| - || _ | -__| || | | || _|| _|
|_______|| __|_____|__|__||________||__| |____|
|__| W I R E L E S S F R E E D O M
-----------------------------------------------------
CHAOS CALMER (Chaos Calmer, r49389)
-----------------------------------------------------
那上面那一串字符是哪里提供的呢?如果想使用自己特色的符号在怎么修改,下面就进行说明。
其实那一串字符是在/etc/banner里面
# cat /etc/banner
_______ ________ __
| |.-----.-----.-----.| | | |.----.| |_
| - || _ | -__| || | | || _|| _|
|_______|| __|_____|__|__||________||__| |____|
|__| W I R E L E S S F R E E D O M
-----------------------------------------------------
CHAOS CALMER (Chaos Calmer, r49389)
-----------------------------------------------------
那我们需要做的就是,把/etc/banner里面的内容改成我们需要的形状,然后在/etc/profile里面添加/etc/banner的调用即可。
如在/etc/banner文件下加入如下字形
cat /etc/banner
______ __
| ____|.----..----..----. | |_ .----..----.
| |____ | _|| -_|| | | _|| || _|
|______||__| |____||____|.|____||____||__|
C R E A T O R
-----------------------------------------------------
CHAOS CALMER (Chaos Calmer, r49389)
-----------------------------------------------------
在/etc/profile里面添加如下语句
[ -f /etc/banner ] && cat /etc/banner
在console上进行测试验证,看结果是否正确。
2.inittab文件
busybox的init进程的初始化被分解为一系列初始化活动来完成,这些初始化活动通常被写入inittab配置文件里,init进程通过调用inittab来执行这次活动。
a.inittab文件的含义格式
inittab配置文件中的每一条都被看做是一个初始化活动,busybox中定义了8种初始化活动供inittab文件使用,如下:
活动名称 | 含义 |
---|---|
sysinit | 为init进程提供初始化命令脚本 |
wait | 告诉init进程必须等到相应的进行执行完成之后,才能继续执行 |
once | 仅执行相应的进程一次 |
respawn | 当相应的进行终止之心时,重新启动该进行 |
askfirst | 与respawn类似,不过init进程先输出“Please press Enter to active this console”,等用户按回车键之后,才启动子程序 |
shutdown | 当系统关机时,执行相应的进程 |
restart | 当init进程重启时,执行相应的进程,通常此处执行的进程就是init本身 |
ctrlatldel | 当按Ctrl+Alt+Delete组合键时,执行相应的进程 |
openwrt下还有一个初始化活动就是askconsole,好像与askfirst是一样的意思。
inittab输入的格式如下:
每个字段的含义如下:
字段 | 含义 |
---|---|
id | 表示该进程要使用的控制台,省略则与init进程一样的控制台 |
runlevels | 对于busybox提供的init程序,这个字段没有意思,可以省略 |
action | 表示init进程如何控制该子进程 |
process | 要执行的程序,它可以是可执行程序,也可以是脚本 |
在busybox的init_main()
函数里会调用parse__inittab()
函数来解析inittab文件,如果没有inittab文件parse_inittab()
函数也会添加默认值。
b.添加console访问权限
如果用过cisco或huawei的部分路由器,为了安全性考虑,进行串口登入的时候也希望像ssh那样要求输入用户名和密码才能进入控制台,这样可以防止其他人员随意更改盗取路由信息。
console的访问权限与Linux桌面系统如Ubuntu的用户管理类似,所以需要先对Linux的用户管理有一定了解,简单说明就是,通过/etc/passwd和/etc/shadow文件进行匹配。
/etc/passwd文件存储账户信息,如root后面的x代表密码为隐性的,存在shadow里面。
cat /etc/passwd
root:x:0:0:root:/root:/bin/ash
daemon:*:1:1:daemon:/var:/bin/false
ftp:*:55:55:ftp:/home/ftp:/bin/false
network:*:101:101:network:/var:/bin/false
nobody:*:65534:65534:nobody:/var:/bin/false
/etc/shadow文件存储经过加密后的密码,如root后面的一大串字符。
cat /etc/shadow
root:$1$hPNSjUZA$7eKqEpqVYltt9xJ6f0OGf0:15533:0:99999:7:::
daemon:*:0:0:99999:7:::
ftp:*:0:0:99999:7:::
network:*:0:0:99999:7:::
nobody:*:0:0:99999:7:::
所以在嵌入式Linux上也类似,我们要做的就是对这几个文件的添加设置,下面就如何添加访问权限进行说明。
1.修改/etc/inittab
Linux文件系统的启动一般都要经过busybox,所以第一步就需要将inittab初始化活动进行修改,inittab脚本内容一般如下:
::sysinit:/etc/init.d/rcS
::shutdown:/bin/umount -a -r
::respawn:-/bin/sh
修改为
::sysinit:/etc/init.d/rcS
::shutdown:/bin/umount -a -r
::respawn:-/bin/login
2.将Ubuntu里面的/etc/passwd、/etc/group、/etc/shadow到rootfs/etc下
# cp /etc/passwd rootfs/etc
# cp /etc/group rootfs/etc
# cp /etc/shadow roofs/etc
对以下三个文件修改,只保存与root相关的项,根据具体情况内容会有所不同。
修改passwd为
root:x:0:0:root:/root:/bin/ash
,只保存与root相关项修改group为
root:x:0:root
,只保存与root相关项修改shadow为
root:$1$1$hPNSjUZA$7eKqEpqVYltt9xJ6f0OGf0:15533:0:99999:7:::
,只保存与root相关项
登陆开发板时需输入用户名密码,Ubuntu桌面系统的一致。
Linux profile file的分析就到这边,有感悟时会持续会更新。
注:以上内容都是本人在学习过程积累的一些心得,难免会有参考到其他文章的一些知识,如有侵权,请及时通知我,我将及时删除或标注内容出处,如有错误之处也请指出,进行探讨学习。文章只是起一个引导作用,详细的数据解析内容还请查看Linux相关教程,感谢您的查阅。