linux的多用户

晨曦之光 发布于 2012/04/10 15:00
阅读 1K+
收藏 0

linux继承了unix的很大一部分东西,自设计开始就是多用户的,那么这个多用户到底体现在什么地方呢?多用户和linux操作系统的设计又有何关联呢?

首先看看原始的多用户,所谓多用户就是有很多人公用一台机器,这在计算机开始的年代是很必要的,那个时候机器资源紧缺。于是一种对于计算机的新的使用方式开始流行,在那以前,机器的运作和操作员的使用是一体的,也就是说像织布机一样,一个工人操作一台织布机,当计算真的变成一种资源以后,共享的概念就出来了,大家不再像使用织布机那样使用计算机,而是把计算机当成一种共享的资源来使用,于是,机器的运作和操作员的操作分离开来,于是终端出现了,终端代表的是操作员,它其实和操作员交互,每个操作员拥有一个终端,不再拥有整个机器,操作员只需要和终端交互,然后终端代理操作员和计算机交互,计算机分离成了主机加终端的形式,每个终端上的操作员都会认为自己拥有整个机器,此时还有一个创举就是多道程序设计,这里先不谈。多用户操作系统的历史开始了。用户一开始就和终端有着血肉关联,于是直到现在的类unix操作系统比如linux上的多用户也和终端相关。

有人会有疑问,当时因为计算机稀缺才引入多用户,现在几乎是人手一台,还有必要多用户吗?事实上如果就PC而言是有点没有必要,正因如此,windows的多用户就没有linux的多用户来的更纯粹;但是在大型服务器上多用户还是必要的,既然是服务器,那么它运行的任务就是多样的,复杂的,运行很多服务是很正常的,一个用户从配置到管理所有服务是不现实的,对于数据库服务器而言更是如此,需要不同的用户来管理和配置不同的功能,这样的话,多用户是必须的;对于安全来说多用户也是必要的,将整台机器的所有权限随意交给一个人是危险的,更多的用户使用机器仅仅需要一部分子功能而不需要整个权限,这时更需要多用户。前面说过用户和终端是血肉关联的,现在老式的终端已经很少了,显示器和键盘取代了它们,对于显示器而言,现代的linux和unix提供了虚拟终端,Alt+Fn切换的就是虚拟终端,可能这里的术语不太准确,总之Alt+Fn切换的控制台的功能就是原来终端的功能。

以上就是unix以及类unix操作系统多用户的表象,那么其操作系统架构是怎么对其进行支持的呢?linux操作系统将用户id(uid)作为一个属性赋予进程,记住,进程在unix中十分重要,在计算机的原始阶段,进程就代表一个用户任务,而计算机的功能就是完成用户任务,在多道程序设计的年代,进程更升华成操作系统下的一个同等重要的概念。在linux中进程几乎就是一切,进程拥有了uid,操作系统的多用户就是必然结果了,参见我前面的文章《linux的自动登录--理解linux的方式》和《Linux守护进程--依然是进程》可以看出linux开始就以/sbin/init进程运行,用户是root用户,那么init进程的uid肯定就是root用户的uid了,接下来由init进程启动的进程都是root的,除非调用了setuid改变之,而改变uid的行为就在非root的普通用户登录时。继承传统unix终端的思想,shell就是终端上运行的代表进程,既然shell某种意义上代表了终端,那么一个shell启动的所有程序就代表了一个会话,这就是会话期的由来,一般意义上,一个shell启动的所有进程共享一个会话,实际上也正是这样,这样不同的shell区分了不同的用户或者同一用户的不同会话。记住linux上的用户的实质就是会话,其实也就是一个终端shell,还记得前面文章谈守护进程时说的吗,守护进程不属于任何用户,那么它就要单独占用一个会话。

linux的进程架构使得上述的多用户得以简单的实现,理解了linux的进程架构就等于理解了linux的多用户,linux的多用户是基于进程的,我们说不同的进程可能属于不同的用户,那个用户的shell运行的进程就属于哪个用户,因为运行进程是靠fork/exec完成的,在fork时会继承调用者的uid,就是这么简单。会话是终端的,因为不同的终端可能由同一个用户登录,但是却是不同的会话,因此在linux上,根本不存在windows上的一些问题,比如经常有人问在XP下如何多个用户同时登录或者相同的用户同时登录,然后回答就是很繁琐的修改注册表之类的,其实windows也是多用户的,但是其实现却没有linux的这么直接和简单,windows的多用户是基于角色的,而不是基于进程的,在windows server 2003上,看起来几乎和linux一样实现了真正的多用户多会话管理机制,但是其实现却是堆积而成的,不像linux继承于unix,而后者在设计的时候就设计成支持多个终端,多终端最终和由此而成的fork/exec以及uid/gid/sid的进程架构成就了真正的多用户操作系统。


原文链接:http://blog.csdn.net/dog250/article/details/5303660
加载中
返回顶部
顶部