需求:修改linux默认登录账号是root
理论知识:
- 系统启动登录主要由两个进程来完成
getty : 获取用户名 , 检查用户是否合法 , 传递用户名给login进程
login : 接受getty进程穿过来的用户名, 提示输入密码,检查密码是否正确。
getty功能:
1 打开指定的tty
2 提示用户登录
3 获取登录用户名和密码
4 把用户名穿递给login命令
login功能:
1 检查是不是超级用户
2 提示用户输入密码
3 检查密码并检查是否quiet登录
4 设置登录的用户id和组id,并设置相应的环境变量。
- linux文件系统启动过程及login的实现
linux启动过程:
1 启动内核。 在这个阶段,内核装入内存并初始化每个设备驱动器
2 执行程序init。内核初始化后,挂在根文件系统,运行init程序。init程序处理所有程序的启动。
包括系统程序和其他指定在启动时装入的软件。
- 文件系统启动过程: 已经挂在文件系统后 /
init进程是1 ,从这一点就能看出,init进程是系统所有进程的起点,init程序首先读取inittab配置文件,
主要实现各个阶段需要执行的进程。以此自举实现整个系统的进程启动弄个。
inittab文件分析:
每一项由4列组成。
ID:runlever:action:process
id:入口标识符,用于识别每一个登记项
runlever:运行级别。 说明该等级项适用于哪一个运行级。
为空表示使用于所有级别
0~6以及S或s
0 、1 、6运行级别被系统保留。
0 作为halt动作, 1 表示重启至单用户模式 ,6 表示重启
S和s意义相同,表示单用户模式,切无需inittab文件
可以使用多个值并列
action: 定义init命令应该向进程实施什么动作。
respawn:无论何时他终止,均重新启动
once:运行命令一次
2)启动对应运行级别的守护进程
解析完inittab后,启动对应的运行级别的守护进程。
3)建立终端
创建终端,启动getty进程。
4)登录系统,启动完成
getty进程接受到用户名后,启动login进程getty将用户名传递到login进程。login进程要求输入口
令。验证成功 后,login启动shell,shell进程根据/etc/password中的shell类型,启动相应的
shell,并启动/etc/profile和$HOME/.bash_profile文件,最后出现shell提示符,等待用户输入命令