3. 用户与用户组

3.1. 用户

用户,即系统的使用者。

这个概念我们在Windows上接触比较多,如经常遇到的administration(管理员)用户。有时候我们也会建立另一个Windows用户,并限制这个用户不能安装或卸载软件。这便是我们一般用到的用户权限管理。

实际上,无论是Windows、Linux还是Mac OS,用户管理都是系统极其重要的一个部分。它的意义在于,将每个不同的用户区分开,让他们互不干扰地工作。

以Linux为例,Linux是一个真实的、完整的多用户多任务操作系统。多用户多任务就是可以在系统上建立多个用户,而多个用户可以在同一时间内登录同一个系统执行各自不同的任务,而互不影响。比如,某台Linux服务器上有4个用户,分别是root、www、ftp和mysql,在同一时间内,root用户可能在查看系统日志,管理维护系统,www用户可能在修改自己的网页程序,ftp用户可能在上传软件到服务器,mysql用户可能在执行自己的数据库操作,每个用户互不干扰,有条不紊的进行着自己的工作。而且每个用户之间不能越权访问,比如www用户不能执行mysql用户的数据库查询操作,ftp用户也不能修改www用户的网页程序。

在Linux下用户是根据角色定义的,具体分为三种角色:

  • 超级用户

    相当于Windows的administration用户,拥有对系统的最高管理权限,默认用户名为root。

  • 普通用户

    只能对 自己目录下的文件 进行访问和修改,具有登录系统的权限,例如上面提到的www用户、ftp用户等。

  • 虚拟用户

    也叫“伪”用户,这类用户最大的特点是不能登录系统,它们的存在主要是方便系统管理,满足相应的系统进程对文件属主的要求。例如系统默认的bin、adm、nobody用户等,一般运行的web服务,默认就是使用的nobody用户,但是nobody用户是不能登录系统的。

这里需要解释一下,什么是登录系统?类似于Windows,我们在开机进入一个多用户的Windows系统时,系统会要求使用者点选自己的账户进入桌面。如果账户受密码保护,则登陆的时候还需要输入正确的密码。成功登陆后,Windows加载本用户的配置,然后进入桌面。于是,用户登录系统的过程可以简单理解为让系统加载自定义配置的过程。

与Windows一样,Linux的每个用户都必须拥有一个唯一的用户名和用户密码(一般不为空)。在登录系统时,只有正确输入了用户名和密码,才能进入系统和自己的主目录。


Linux下,每个用户名都对应了一个数字,叫UID(user identification)。我们使用用户名辨认用户,但在Linux系统内部,UID才是用户的真实表示。

每个用户的UID是唯一的,通常UID号占用两个字节,取值范围是0~65535。0是超级用户root的标识号,1~99由系统保留,作为管理账号,普通用户的标识号从100开始。

3.2. 用户组

用户组,即用户的组合

有时我们需要让多个用户具有相同的权限,比如查看、修改某一个文件的权限,一种方法是分别对多个用户进行文件访问授权。如果有10个用户的话,就需要授权10次,显然这种方法不太合理;另一种方法是建立一个组,让这个组具有查看、修改此文件的权限,然后将所有需要访问此文件的用户放入这个组中,那么所有用户就具有了和组一样的权限。这就是用户组。将用户分组是Linux系统中对用户进行管理及控制访问权限的一种手段。通过定义用户组,在很大程度上简化了管理工作。

这类似于学生和班级的关系。学生加入了某个班,他就具有了上某门课的权利。


用户组标识就是组的GID,与用户的UID类似,这个字段记录了用户所属的用户组。

3.3. 用户和组的关系

用户和用户组的对应关系有:一对一、一对多、多对一和多对多,下图展示了这种关系:

http://www.uplook.cn/data/uploads/day_110810/201108101916474392.png
  • 一对一

    即一个用户可以存在一个组中,也可以是组中的唯一成员。

  • 一对多

    即一个用户可以存在多个用户组中。那么此用户具有多个组的共同权限。

  • 多对一

    多个用户可以存在一个组中,这些用户具有和组相同的权限。

  • 多对多

    多个用户可以存在多个组中。其实就是上面三个对应关系的扩展。

3.4. 文件权限