1 什么是用户账户和组 ?
1.1 用户
Linux操作系统是多用户多任务的操作系统,允许多个用户同时登录到系统,使用系统资源。用户账户是用户的身份标识。用户通过用户账户可以登录到系统,并且访问已经被授权的资源。系统依据账户来区分属于每个用户的文件、进程、任务,并给每个用户提供特定的工作环境(例如,用户的工作目录、shell版本以及图形化的环境配置等),使每个用户都能各自不受干扰地独立工作。
Linux系统下的用户账户分为两种:
- 普通用户账户:在系统中只能进行普通工作,只能访问他们拥有的或者有权限执行的文件。
- 超级用户账户(root):也叫管理员账户,它的任务是对普通用户和整个系统进行管理。超级用户账户对系统具有绝对的控制权,能够对系统进行一切操作。
1.2 组
在Linux系统中,为了方便管理员管理和用户工作,产生了组的概念。
组群是具有相同特性的用户的逻辑集合,使用组群有利于系统管理员按照用户的特性组织和管理用户,提高工作效率。有了组群,在做资源授权时可以把权限赋予某个组群,组群中的成员即可自动获得这种权限。一个用户账户可以同时是多个组群的成员,其中某个组群是该用户的主组群(私有组群),其他组群为该用户的附属组群(标准组群)。
概 念 | 描 述 |
用户名 | 用来标识用户的名称,可以是字母、数字组成的字符串,区分大小写 |
密码 | 用于验证用户身份的特殊验证码 |
用户标识(UID) | 用来表示用户的数字标识符 |
用户主目录 | 用户的私人目录,也是用户登录系统后默认所在的目录 |
登录shell | 用户登录后默认使用的shell程序,默认为/bin/bash |
组群 | 具有相同属性的用户属于同一个组群 |
组群标识(GID) | 用来表示组群的数字标识符 |
注意:root用户的UID为:系统用户的UID从1到999;普通用户的UID可以在创建时由管理员指定,如果不指定,用户的UID默认从1 000开始顺序编号。在Linux系统中,创建用户账户的同时也会创建一个与用户同名的组群,该组群是用户的主组群。普通组群的GID默认也是从1 000开始编号。
2 用户账户文件
用户账户信息和组群信息分别存储在用户账户文件和组群文件中。
2.1 /etc/passwd文件
在Linux系统中,所创建的用户账户及其相关信息(密码除外)均放在/etc/passwd配置文件中。用vim编辑器(或者使用cat /etc/passwd)打开passwd文件,内容格式如下:
编辑
文件中的每一行代表一个用户账户的资料,可以看到第一个用户是root。然后是一些标准账户,此类账户的shell为/sbin/nologin,代表无本地登录权限。
passwd文件的每一行用“:”分隔为7个域,各域的内容如下:
用户名:加密口令:UID:GID:用户的描述信息:主目录:命令解释器(登录shell)
passwd文件中的各字段的含义如下表所示,其中少数字段的内容是可以为空的,但仍需使用“:”进行占位来表示该字段。
字 段 | 说 明 |
用户名 | 用户账号名称,用户登录时所使用的用户名 |
加密口令 | 用户口令,考虑系统的安全性,现在已经不使用该字段保存口令,而用字母“x”来填充该字段,真正的密码保存在shadow文件中 |
UID | 用户号,唯一表示某用户的数字标识 |
GID | 用户所属的私有组号,该数字对应group文件中的GID |
用户描述信息 | 可选的关于用户全名、用户电话等描述性信息 |
主目录 | 用户的宿主目录,用户成功登录后的默认目录 |
命令解释器 | 用户所使用的shell,默认为“/bin/bash” |
2.2 /etc/shadow文件
由于所有用户对/etc/passwd文件均有读取权限,为了增强系统的安全性,用户经过加密之后的口令都存放在/etc/shadow文件中。/etc/shadow文件只对root用户可读,因而大大提高了系统的安全性。shadow文件的内容形式如下(cat /etc/shadow)
编辑
shadow文件保存投影加密之后的口令以及与口令相关的一系列信息,每个用户的信息在shadow文件中占用一行,并且用“:”分隔为9个域,各域的含义如下表所示。
字 段 | 说 明 |
1 | 用户登录名 |
2 | 加密后的用户口令,*表示非登录用户,!!表示没设置密码 |
3 | 从1970年1月1日起,到用户最近一次口令被修改的天数 |
4 | 从1970年1月1日起,到用户可以更改密码的天数,即最短口令存活期 |
5 | 从1970年1月1日起,到用户必须更改密码的天数,即最长口令存活期 |
6 | 口令过期前几天提醒用户更改口令 |
7 | 口令过期后几天账户被禁用 |
8 | 口令被禁用的具体日期(相对日期,从1970年1月1日至禁用时的天数) |
9 | 保留域,用于功能扩展 |
3 组群文件
组群账户的信息存放在/etc/group文件中,而关于组群管理的信息(组群口令、组群管理员等)则存放在/etc/gshadow文件中。
3.1 /etc/group文件
group文件位于“/etc”目录,用于存放用户的组账户信息,对于该文件的内容任何用户都可以读取。每个组群账户在group文件中占用一行,并且用“:”分隔为4个域。每一行各域的内容如下(使用cat /etc/group):
组群名称:组群口令(一般为空,用x占位):GID:组群成员列表
group文件的内容形式如下:
编辑
可以看出,root的GID为0,没有其他组成员。group文件的组群成员列表中如果有多个用户账户属于同一个组群,则各成员之间以“,”分隔。在/etc/group文件中,用户的主组群并不把该用户作为成员列出,只有用户的附属组群才会把该用户作为成员列出。
3.2 /etc/gshadow文件
/etc/gshadow文件用于存放组群的加密口令、组管理员等信息,该文件只有root用户可以读取。每个组群账户在gshadow文件中占用一行,并以“:”分隔为4个域。每一行中各域的内容如下:
组群名称:加密后的组群口令(没有就用!):组群的管理员:组群成员列表
gshadow文件的内容形式如下:
编辑
接下来我们进行用户的添加、以及群组的添加练习。
4 用户账户及组创建
用户账户管理包括新建用户、设置用户账户口令和用户账户维护等内容。
4.1 新建用户
在系统新建用户可以使用useradd或者adduser命令。useradd命令的格式是:
useradd [选项] <username>
useradd命令有很多选项,如下表所示。
选 项 | 说 明 |
-c comment | 用户的注释性信息 |
-d home_dir | 指定用户的主目录 |
-e expire_date | 禁用账号的日期,格式为YYYY-MM-DD |
-f inactive_days | 设置账户过期多少天后用户账户被禁用。如果为0,账户过期后将立即被禁用;如果为-1,账户过期后,将不被禁用 |
-g initial_group | 用户所属主组群的组群名称或者GID |
-G group-list | 用户所属的附属组群列表,多个组群之间用逗号分隔 |
-m | 若用户主目录不存在则创建它 |
-M | 不要创建用户主目录 |
-n | 不要为用户创建用户私人组群 |
-p passwd | 加密的口令 |
-r | 创建UID小于500的不带主目录的系统账号 |
-s shell | 指定用户的登录shell,默认为/bin/bash |
-u UID | 指定用户的UID,它必须是唯一的,且大于499 |
4.2 删除用户账户
要删除一个账户,可以直接删除/etc/passwd和/etc/shadow文件中要删除的用户所对应的行,或者用userdel命令删除。userdel命令的格式为
userdel [-r] 用户名
如果不加-r选项,userdel命令会在系统中所有与账户有关的文件中(例如/etc/passwd,/etc/shadow,/etc/group)将用户的信息全部删除。
如果加 -r 选项,则在删除用户账户的同时,还将用户主目录以及其下的所有文件和目录全部删除掉。另外,如果用户使用E-mail的话,同时也将/var/spool/mail目录下的用户文件删掉。
4.3 创建组
创建组群和删除组群的命令与创建、维护账户的命令相似。创建组群可以使用命令groupadd或者addgroup。
例如,创建一个新的组群,组群的名称为testgroup,可用以下命令:
groupadd testgroup
4.4 删除组
要删除一个组可以用groupdel命令,例如删除刚创建的testgroup组时可用以下命令:
groupdel testgroup