Chinaunix首页 | 论坛 | 博客
  • 博客访问: 306973
  • 博文数量: 79
  • 博客积分: 1480
  • 博客等级: 上尉
  • 技术积分: 848
  • 用 户 组: 普通用户
  • 注册时间: 2009-06-11 15:29
文章分类

全部博文(79)

文章存档

2012年(1)

2011年(5)

2010年(19)

2009年(54)

我的朋友

分类: C/C++

2009-09-18 14:15:24

1、Terminal Logins

Fig.1 Terminal Logins
注1:终端登录的简略过程,不在乎终端是字符,图形模拟字符还是图
    形终端
注2:系统启动程序结束后,内核创建进程ID为1的init进程。init
     读取终端配置文件,为每一个终端做1个fork,跟随一个exec
     启动getty允许登录
注3:getty打开终端进行读写(设置fd0,1,2),输出类似login:
     的字符等待用户输入用户名。最后getty读取/etc/inittab
     触发login程序,有点像: execle(“/bin/login",
     "login", "-p", username, (char *)0, envp); 并读
     取/etc/inittab初始化环境变量
注4:因为原始的init拥有超级用户权限ID为1,所以init,getty,
    login也继承了这些特性
注5:login程序,它有了用户名之后,会调用getpwnam获取密码
    文件入口;调用getpass在终端显示字符串 Password: 并读取
    输入的密码;调用crypt加密密码与shadow密码的pw_passwd比
    较;
    如果登录错误,login会调用exit(1),终端会通知父进程init
    init会做另外一个fork,exec,getty再来一次
    如果登录成功,login会
    调用chdir登录到home目录
    调用chown把终端归属给该用户,并改变终端的访问权限供用户
                             读写
    调用setgid和initgroups设置group IDs
    初始化环境变量$HOME $SHELL $USER $LOGINAME $PATH等
    调用setuid改变到登录用户ID并触发login shell
    (execl("/bin/sh", "-sh", (char *)0);)
注6:login shell读取自启动文件.bashrc等改变和设置环境变量

2、Network Logins


Fig.2 Network Logins
注1:通过serial terminal和通过network登录系统最大的不同是
     终端和计算机之间不是点到点的;通过网络的时候,login只是
     一个可以获取的服务,就像其他FTP STMP服务一样
注2:网络登录时,所有的登录都是通过内核的network interface
    drivers(e.g.,The Ethernet driver);为了让相同的软件
    既能通过网络,也能通过终端登录,一个叫pseudo terminal
    的软件驱动被用于模仿serial terminal的behavior并映射终
    端操作和网络操作
注3:系统启动时,init触发shell并执行shell脚本/etc/rc,
     /etc/rc脚本中会触发叫xinetd的daemon,脚本结束xinetd
     的父进程就是init
注4:xinetd等待到达该主机的TCP/IP连接请求,有连接的时候用
    fork和exec处理并启动相应程序
阅读(740) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~