# 用户和用户组管理

Linux 系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。

用户的账号一方面可以帮助系统管理员对使用系统的用户进行跟踪,并控制他们对系统资源的访问;另一方面也可以帮助用户组织文件,并为用户提供安全性保护。

# 用户

每个用户账号都拥有一个惟一的用户名和各自的口令。

用户在登录时键入正确的用户名和口令后,就能够进入系统和自己的主目录。

当前系统中所有用户的信息都存储在 /etc/passwd 文件中。

该文件中的每一行的内容都包含七列,分别以冒号进行隔开。

root:x:0:0:root:/root:/bin/bash
# 用户名 : 用户密码占位符 : 用户编号 : 用户组编号 : 用户注释信息 : 用户主目录 : Shell 类型

当前系统中所有用户的密码信息都被存储在 /etc/shadow 文件中。

其中的内容与用户信息文件的内容行行对应,同样每行七列,每列以冒号隔开。

root::::::::
# 账户名称 : 加密后的密码 : 最近改动密码的日期 : 密码不可被变更的天数 : 密码需要重新变更的天数 : 密码过期预警天数 : 密码过期的宽恕时间 : 账号失效日期 : 保留的

# USERADD

useradd 命令用于 Linux 中创建的新的系统用户。

# 语法

useradd [选项] [要创建的用户名]

# 常用选项

名称 描述
-c comment 指定一段注释性描述
-d 目录 指定用户主目录,如果此目录不存在,则同时使用 -m 选项,可以创建主目录
-g 用户组 指定用户所属的用户组
-G 用户组,用户组 指定用户所属的附加组
-s Shell 文件 指定用户的登录 Shell
-u 用户号 指定用户的用户号,如果同时有 -o 选项,则可以重复使用其他用户的标识号

# 实例

新建了一个用户 anani,该用户的登录 Shell/bin/bash,它属于 group 用户组,同时又属于 admroot 用户组,其中 group 用户组是其主组。

useradd -s /bin/bash -g group -G adm,root anani

# USERDEL

如果一个用户的账号不再使用,可以从系统中删除。删除用户账号就是要将 /etc/passwd 等系统文件中的该用户记录删除,必要时还删除用户的主目录。

userdel 可删除用户帐号与相关的文件。若不加参数,则仅删除用户帐号,而不删除相关文件。

# 语法

userdel [-r] [用户帐号]

使用 -r 参数会删除用户登入目录以及目录中所有文件。

# USERMOD

修改用户账号就是根据实际情况更改用户的有关属性,如用户号、主目录、用户组、登录 Shell 等。

修改已有用户的信息使用 usermod 命令。

# 语法

usermod [选项] [用户帐号]

# 常用选项

名称 描述
-l<帐号名称> 修改用户帐号名称
-c<备注> 修改用户帐号的备注文字
-g<群组> 修改用户所属的群组
-d<登入目录> 修改用户登入时的目录
-e<有效期限> 修改帐号的有效期限
-s<shell> 修改用户登入后所使用的 Shell
-G<群组> 修改用户所属的附加群组
-f<缓冲天数> 修改在密码过期后多少天即关闭该帐号
-u<uid> 修改用户 ID
-L 锁定用户密码,使密码无效
-U 解除密码锁定

# 实例

改变用户的 uid

usermod -u 777 root

# PASSWD

用户管理的一项重要内容是用户口令的管理。用户账号刚创建时没有口令,但是被系统锁定,无法使用,必须为其指定口令后才可以使用,即使是指定空口令。

指定和修改用户口令的 Shell 命令是 passwd。超级用户可以为自己和其他用户指定口令,普通用户只能用它修改自己的口令。

# 语法

passwd [选项] [用户帐号]

# 常用选项

名称 描述
-f 强制执行
-S 显示密码信息
-d 删除密码
-l 停止账号使用
-u 启用已被停止的账户
-g 修改群组密码
-x 设置密码的有效期
-i 过期后停止用户账号
-k 更新只能发送在过期之后

# 实例

修改用户密码。

$ passed anani # 修改用户 anani 的密码
Enter new UNIX password: # 输入新密码,输入的密码无回显
Retype new UNIX password: # 确认密码
passwd: password updated successfully

# 用户组

每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理。

不同 Linux 系统对用户组的规定有所不同,如 Linux 下的用户属于与它同名的用户组,这个用户组在创建用户时同时创建。

用户组的管理涉及用户组的添加、删除和修改。组的增加、删除和修改实际上就是对 /etc/group 文件的更新。

该文件中的每一行的内容都包含四列,分别以冒号进行隔开。

root:x:0:
# 组名称 : 组密码占位符 : 组编号(root 所在组号为 0) : 组中的用户(仅一个与组名相同的用户或无用户时为空,多个用户则以逗号隔开)

组号从 1 到 499 属于系统预留的组编号,一般会被分配给安装在系统中的软件或服务,比如 MySQL。

当前系统中用户组的密码信息存储在 /etc/gshadow 文件中。

该文件中的内容与用户组信息文件中的内容行行对应,同样每行有四列,每列以冒号分隔开。

root:*::
# 组名称 : 组密码(*、!或为空皆表示无密码) : 组管理者(为空则表示组内用户都可以管理) : 组中的用户(仅一个与组名相同的用户或无用户时为空,多个用户则以逗号隔开)

# GROUPADD

groupadd 命令用于创建一个新的工作组,新工作组的信息将被添加到系统文件中。

# 语法

groupadd [选项] [新建工作组的组名]

# 常用选项

名称 描述
-g 指定新建工作组的 ID
-r 创建系统工作组,系统工作组的组 ID 小于 500
-K 覆盖配置文件 “/ect/login.defs”
-o 允许添加组 ID 号不唯一的工作组

# 实例

建立一个组 anani,并设置组 ID 加入系统。

groupadd -g 333 anani

# GROUPDEL

需要从系统上删除群组时,可用 groupdel(group delete) 指令来完成这项工作。

倘若该群组中仍包括某些用户,则必须先删除这些用户后,方能删除群组。

# 语法

groupdel [群组名称]

# 实例

删除一个群组 anani

groupdel anani

# GROUPMOD

需要更改群组的识别码或名称时,可用 groupmod 指令来完成这项工作。

# 语法

groupmod [-g <群组识别码> <-o>][-n <新群组名称>][群组名称]

# 常用选项

名称 描述
-g <群组识别码> 设置欲使用的群组识别码
-o 重复使用群组识别码
-n <新群组名称> 设置欲使用的群组名称

# 实例

修改组名 ananisharon

groupmod -n sharon anani

# GPASSWD

gpasswd 命令是 Linux 下工作组文件 /etc/group/etc/gshadow 管理工具。

# 语法

gpasswd [选项] [要管理的工作组]

# 常用选项

名称 描述
-a 添加用户到组
-d 从组删除用户
-A 指定管理员
-M 指定组成员和 -A 的用途差不多
-r 删除密码
-R 限制用户登入组,只有组中的成员才可以用 newgrp 加入该组

# 实例

添加一个用户到一个组,同时保留以前添加的组。

gpasswd -a user_name group_name

如果一个用户同时属于多个用户组,那么用户可以使用 newgrp <groupName> 在用户组之间切换,以便具有其他用户组的权限。

# 参考资料