无论在Windows还是在Linux系统中,对用户和组的管理都属于最基本的系统管理设置。
在计算机网络中,计算机和网络的服务对象是用户,而用户则是通过用户账号来访问计算机或网络上的资源,所以用户也就是账号,所谓的用户管理就是对用户账号的管理。组是用户账号的集合,一个组中的成员具有相同的属性,管理员可以通过组来对用户的权限进行统一设置,从而简化管理。
我们都知道,Windows系统中默认的本地用户账号有两个:administrator和guest,所有的本地用户账号的信息都存放在c:\windows\system32\config\sam文件中。Linux系统中的所有用户账号信息则都存放在/etc/passwd文件中,这个文件中的每一行就代表一个用户。可以执行wc命令统计“/etc/passwd”文件中的行数:
[root@localhost ~]# wc -l /etc/passwd
35 /etc/passwd
可以看到我这里有35行,也就是说在我的Linux系统里有35个用户账号。
除了根用户root之外,我在安装Linux系统时只创建了一个名为student的用户,其余那些用户是从哪里来的呢?这首先就要搞清楚Linux系统中用户账号的类型。
一、用户账号的类型
在Linux系统中,根据系统管理的需要将用户账号分为三种不同的类型:超级用户、普通用户、系统用户,每种类型的用户账号其拥有的权限、担任的角色都各不相同。
超级用户:root是Linux系统中默认的超级用户账号,对本主机拥有至高无上的完全权限,类似于Windows系统中的Administrator用户。由于权限太大,所以Linux系统默认是不建议用root用户登录系统的,只有当进行系统管理、维护任务时,才使用root用户登录,日常事务处理建议使用普通用户账号进行。
普通用户:普通用户账号需要由root用户或其他管理员用户创建,拥有的权限受到一定限制,一般只在用户自己的主目录中有完全权限。
系统用户:在安装Linux系统及部分应用程序时,会添加一些特定的低权限用户账号,这些用户一般不允许登录到系统,而仅用于维持系统或某个程序的正常运行。
明白了用户账号的类型之后,我们再来查看一下/etc/passwd文件的内容:
在我目前的/etc/passwd文件中,除了第一行的root用户和最后一行的student用户,其余的都是系统用户,系统用户用来支撑系统运行,不能登录,因而在以后我们一般可以不用去考虑这些系统用户。
二、用户组
用户组的主要用途是用于设置权限,同一个组中的用户具有相同的权限。
每一个用户账号至少属于一个组,这个组称为该用户的基本组。与Windows不同,在Linux系统中每创建一个用户账号就会自动创建一个与该账号同名的用户组,比如我们创建了一个名为“student”的用户账号,那么同时也自动创建一个名为“student”的用户组。“student”用户默认就属于“student”组,“student”组是“student”用户的基本组。
在Linux系统中,每个用户可以同时加入多个组(Windows中也是这样),用户又另外加入的组称为该用户的附属组(附加组)。
例如,将用户student再加入到邮件管理员组mailadm,那么student就同时属于student、mailadm组,student是其基本组,而mailadm是其附属组。
三、UID和GID
关于用户和组,还有一个基本概念就是UID和GID。
UID(用户ID)是Linux系统中每一个用户账号的唯一标识符,对于系统核心来说,UID是区分用户的基本依据(类似于咱们每个人的×××号)。root用户的UID为固定值0,系统用户账号的UID默认在1~499之间,500~60000的UID号默认分配给普通用户账号使用。
与UID相类似,每一个组也有一个数字形式的标识符,称为GID(组ID)。root组的GID为固定值0,而系统组账号的GID默认在1~499之间,普通组账号的GID默认为500~60000。
对于Linux系统来讲,她只认识UID和GID,至于用户账号和组账号这些名字其实只是为了方便人们记忆而已。
四、用户账号文件
Linux系统中的用户账号、密码等信息均保存在相应的配置文件中,直接修改这些文件或者使用用户管理命令都可以对用户账号进行管理。
与用户账号相关的配置文件主要有两个,分别是/etc/passwd、/etc/shadow。前者用于保存用户名称、主目录、登录Shell等基本信息,后者用于保存用户的密码、账号有效期等信息。
在这两个配置文件中,每一行对应一个用户账号,不同的配置项之间用冒号“:”进行分隔。
我们先来看一下/etc/passwd文件,这是个文本文件,任何用户都可以读取文件中的内容。
在passwd文件的开头部分,包括超级用户root及各系统用户的账号信息,系统中新增加的用户账号信息将保存到passwd文件的末尾。passwd文件的每一行内容中,包含了7个用冒号“:”分隔的配置字段。
下面我们以root用户为例,来了解一下这些配置字段的含义:
root:x:0:0:root:/root:/bin/bash
第1个字段:用户名。
第2个字段:密码占位符x。注意,所谓的密码占位符只是表示这是一个密码字段,但用户的密码却并不是存放在这里,而是存放在/etc/shadow文件中。之所以这样设计,是由于在早期的UNIX操作系统中,用户帐号的密码信息是保存在passwd文件中的,但这样不法用户可以很容易的获取密码字串并进行暴力破解,因此存在一定的安全隐患。所以后来经改进后,将密码转存入专门的shadow文件中,并严格控制权限,这样passwd文件中就仅保留密码占位符“x”。
我们查看一下/etc/shadow文件中root用户的相关行:
[root@localhost ~]# grep "root" /etc/shadow
root:$6$wRRWT6uS$bTPOf9Z5Si.CkoyIDrWHwyuDx3QxKWju.09D10tk0EdfaYe07UmjIImFzavMU/IKizXKzLEfR2Nf1FRd556DK/:15714:0:99999:7:::
这其中第2个字段里那一长串有如天书般的字符就是用户的密码,呵呵,这当然不会是密码的明文,而是经过MD5加密之后的密文。
第3个字段:用户的UID。root的UID默认为0。
第4字段:用户所属组的GID。root组的GID默认也为0.
第5字段:用户全名,可填写与用户相关的说明信息。这个字段是可选的,可以不设置。
第6字段:用户主目录,即用户登录后所在的默认工作目录。
第7字段:用户登录所用的shell类型,默认为/bin/bash。系统用户的默认shell为/sbin/nologin,意味着不允许登录。
基于系统运行和管理需要,所有用户都可以访问passwd文件中的内容,但是只有root用户才能进行更改
下面再来看看/etc/shadow文件中的内容。
shadow文件又被称为影子文件,主要用来存放各用户账号的密码信息,因而为了安全性,只有超级用户root才有权限读取shadow文件中的内容,普通用户是无法查看这个文件的,并且即使是root用户也不允许直接编辑该文件中的内容。
/etc/shadow文件的内容包括9个域,每个域之间用“:”分隔。其中第1个字段表示用户的名称;第2个字段是使用MD5加密的用户密码。如果有的用户在此字段中是“*”或“!!”,则表示此用户不能登录到系统。至于其它字段,由于很少用到,所以就不一一介绍了。
五、组账号文件
对于用户账号来说,对应的组账号可以分为基本组和附加组两种类型。每一个用户账号可以是多个组的成员,但是其基本组账号只有一个。在/etc/passwd文件中第4个字段记录的就是该用户的基本组GID号。通过id命令可以查看用户所属的基本组和附属组信息。
例:只执行id命令,是查看当前用户的身份标识信息。
[root@localhost ~]# id
uid=0(root) gid=0(root) 组=0(root)
执行id [用户名],是查看指定用户的身份信息。
[root@localhost ~]# id student
uid=500(student) gid=500(student) 组=500(student)
在id命令显示的结果中,“gid”部分表示的是用户的基本组,“组”部分表示的是用户所属的所有组,其中“组”中的第1个组账号为该用户的基本组,其他组账号为该用户的附属组。用户所属的基本组、附属组可以在创建用户账号时指定,或者是在后期使用usermod命令进行修改。
与组账号相关的配置文件也有两个,分别是/etc/group、/etc/gshadow。前者用于保存组账号名称、GID号、组成员等基本信息,后者用于保存组账号的加密密码字串等信息(但很少使用到)。某一个组账号包含有哪些成员,将会在/etc/group文件内每一行的最后一个字段中体现出来,多个组成员之间使用“,”分隔。
例如,查看一下adm组都有哪些成员:
[root@localhost ~]# grep "^adm" /etc/group
adm:x:4:adm,daemon
最后一个字段即显示的是adm组的成员列表,adm组中包括2个用户:adm、daemon。