linux用户登录过程浅析

发布时间:2019-08-08编辑:脚本学堂
系统启动过程,这里我们关注文件/etc/inittab中的如下几行:
# Run gettys in standard runlevels
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty

系统启动过程,这里我们关注文件/etc/inittab中的如下几行:
# Run gettys in standard runlevels
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6

这里告诉我们有6个字符终端,可以供我们使用,从tty1到tty6,第一个字段是终端序号,第二个代表系统运行级别,我现在运行在3下面,那我ps就可以看到可以登录的终端:
root 3385 0.0 0.0 1664 472 tty1 Ss+ 19:31 0:00 /sbin/mingetty
root 3386 0.0 0.0 1664 472 tty2 Ss+ 19:31 0:00 /sbin/mingetty
root 3387 0.0 0.0 1664 468 tty3 Ss+ 19:31 0:00 /sbin/mingetty
root 3388 0.0 0.0 1664 476 tty4 Ss+ 19:31 0:00 /sbin/mingetty
root 3389 0.0 0.0 1664 476 tty5 Ss+ 19:31 0:00 /sbin/mingetty
root 3390 0.0 0.0 1664 476 tty6 Ss+ 19:31 0:00 /sbin/mingetty

当我们使用终端登录进去后我们发现其中的一个进程消失了。
root 3993 1 0 May14 tty2 00:00:00 /sbin/mingetty tty2
root 3994 1 0 May14 tty3 00:00:00 /sbin/mingetty tty3
root 3995 1 0 May14 tty4 00:00:00 /sbin/mingetty tty4
root 3996 1 0 May14 tty5 00:00:00 /sbin/mingetty tty5
root 3997 1 0 May14 tty6 00:00:00 /sbin/mingetty tty6

tty1哪去了,实际上tty1 进程掉用了login程序,tty1退出了,我们通过ps我们可以看到login进程。
root 7735 1 0 11:09 ? 00:00:00 login -- root
root 7781 7735 0 11:17 tty1 00:00:00 _ -bash

我们看到login使用root用户,并且产生了子进程bash。
首先login的过程中,如果我们输入的用户名或者密码错误,那登陆就不会成功,这是显而易见的。
所以登陆过程分为3步:
1)、验证用户名密码
2)、获取初始化环境
3)、为用户启动shell,初始化shell环境

初始化shell环境主要做的事情:
1)、转到我们的home目录(chdir)
2)、把终端的所有权改成用户的(chown)
3)、改变终端的访问权限,以使用户可以读写
4)、通过setgid和initgroup来设置用户的group IDs
5)、用login所有的信息初始化环境: HOME, SHELL, USER LOGNAME, PATH
6)、改变我们的user ID(通过setuid), 同时触发登录的shell------execl("/bin/sh", "-sh", (char *)0);
至此,登陆完成。