Linux 系统的管理员之所以是 root,并不是因为名字叫 root,而是因为该用户的身份号码即 UID(User IDentification)的数值为 0。在 Linux 系统中 UID 就像我们的身份证号码一样具有唯一性,因此可通过用户的 UID 值来判断用户身份。在 RHEL 8 系统中,用户身份有下面这些。
为了方便管理属于同一组的用户,Linux 系统中还引入了用户组的概念。通过使用用户组号码(GID,Group IDentification),可以把多个用户加入到同一个组中,从而方便为组中的用户统一规划权限或指定任务。
Linux 系统中创建每个用户时,将自动创建一个与其同名的基本用户组,而且这个基本用户组只有该用户一个人。如果该用户以后被归纳到其他用户组,则这个其他用户组称之为扩展用户组。一个用户只有一个基本用户组,但是可以有多个扩展用户组,从而满足日常的工作需要。
基本用户组就像是原生家庭,是在创建账号(出生)时就自动生成的;而扩展用户组则像工作单位,为了完成工作,需要加入到各个不同的群体中,这是需要手动添加的。
id 命令用于显示用户的详细信息,语法格式为“ id 用户名 ”。
简单轻松地查看用户的基本信息,例如用户 ID、基本组与扩展组 GID,以便于我们判别某个用户是否已经存在,以及查看相关信息。
[root@servera ~]# id root
uid=0(root) gid=0(root) groups=0(root)
[root@servera ~]# id zhangxu
uid=1000(zhangxu) gid=1000(zhangxu) groups=1000(zhangxu)
useradd 命令用于创建新的用户账户,语法格式为“ useradd [参数] 用户名 ”。
使用该命令创建用户账户时,默认的用户家目录会被存放在/home 目录中,默认的 Shell 解释器为/bin/bash,而且默认会创建一个与该用户同名的基本用户组。
这些默认设置可以根据下表的 useradd 命令参数自行修改。
参数 | 作用 |
---|---|
-d | 指定用户的家目录,-m 选项可以自动创建主目录。 |
-e | 账户的到期时间,格式为 YYYY-MM-DD |
-u | 指定该用户的默认UID |
-g | 指定一个初始的用户基本组(必须已存在的) |
-G | 指定一个或多个扩展组 |
-N | 不创建与用户同名的基本用户组 |
-s | 指定该用户的默认Shell解释器 |
使用 useradd 命令创建一个名称为 zxbke 的用户,并使用 id 命令确认信息:
[root@servera ~]# useradd -m zxbke
[root@servera ~]# id zxbke
uid=1001(zxbke) gid=1001(zxbke) groups=1001(zxbke)
创建一个普通用户并指定家目录的路径、用户的 UID 以及 Shell 解释器。在下面的命令中,注意/sbin/nologin,它是终端解释器中的一员,与 Bash 解释器有着天壤之别。一旦用户的解释器被设置为 nologin,则代表该用户不能登录到系统中:
[root@servera ~]# useradd -d /home/ww -u 5678 -s /sbin/nologin wangwu
[root@servera ~]# id wangwu
uid=5678(wangwu) gid=5678(wangwu) groups=5678(wangwu)
groupadd 命令用于创建新的用户组,语法格式为“ groupadd [参数] 群组名 ”
为了能够更加高效地指派系统中各个用户的权限,在工作中常常会把几个用户加入到同一个组里面,这样便可以针对一类用户统一安排权限。
例如在工作中成立一个部门组,当有用户身份与文件权限新的同事加入时就把他的账号添加到这个部门组中,这样新同事的权限就自动跟其他同事一模一样了,从而省去了一系列烦琐的操作。
创建用户组的步骤非常简单,例如使用如下命令创建一个用户组 yunwei:
[root@servera ~]# groupadd yunwei
usermod 命令用于修改用户的属性,英文全称为“user modify”,语法格式为“ usermod [参数] 用户名 ”。
用户的信息保存在/etc/passwd 文件中,可以直接用文本编辑器来修改其中的用户参数项目,也可以用 usermod 命令修改已经创建的用户信息,比如用户的 UID、基本/扩展用户组、默认终端等。
usermod 命令的参数以及作用如表所示。
参数 | 作用 |
---|---|
-c | 填写用户账户的备注信息 |
-d -m | 参数 -m 与 -d 连用,可以重新指定用户的家目录并自动把旧的数据转移过去 |
-e | 账户的到期时间,格式为 YYYY-MM-DD |
-g | 变更所属用户组 |
-G | 变更扩展用户组 |
-L | 锁定用户禁止其登录系统 |
-U | 解锁用户,允许登录系统 |
-s | 变更默认终端 |
-u | 修改用户的UID |
将用户 zhangxu 加入到 root 用户组中,扩展组中则会出现 root 用户组的字样,而基本组不会受到影响:
[root@servera ~]# id zhangxu
uid=1000(zhangxu) gid=1000(zhangxu) groups=1000(zhangxu)
[root@servera ~]# usermod -G root zhangxu
[root@servera ~]# id zhangxu
uid=1000(zhangxu) gid=1000(zhangxu) groups=1000(zhangxu),0(root)
试用-u 参数修改 zhangxu 用户的 UID 号码值:1000 更改为了 9999
[root@servera ~]# id zhangxu
uid=1000(zhangxu) gid=1000(zhangxu) groups=1000(zhangxu),0(root)
[root@servera ~]# usermod -u 9999 zhangxu
[root@servera ~]# id zhangxu
uid=9999(zhangxu) gid=1000(zhangxu) groups=1000(zhangxu),0(root)
passwd 命令用于修改用户的密码、过期时间等信息,英文全称为“password”,语法格式为“ passwd [参数] 用户名 ”。
普通用户只能使用 passwd 命令修改自己的系统密码,而 root 管理员则有权限修改其他所有人的密码。
root 管理员在 Linux 系统中修改自己或他人的密码时不需要验证旧密码,这一点特别方便。既然 root 管理员能够修改其他用户的密码,就表示其完全拥有该用户的管理权限。passwd 命令中的参数以及作用如表所示。
参数 | 作用 | |
---|---|---|
-l | 锁定用户 | |
-u | 解除锁定,允许用户登录 | |
--stdin | 通过标准输入修改用户密码: echo "zx123456" \ | passwd --stdin zhangxu |
-d | 使该用户可用空密码登录系统 | |
-e | 强制用户在下次登录时修改密码 | |
-S | 显示用户的密码是否被锁定,以及密码所采用的加密算法名称 |
[root@servera ~]# echo "123456" | passwd --stdin zhangxu #更改zhangxu账户的密码
Changing password for user zhangxu.
passwd: all authentication tokens updated successfully.
[root@servera ~]# passwd -S zhangxu #还没锁定,查看状态为 PS
zhangxu PS 2022-09-23 0 99999 7 -1 (Password set, SHA512 crypt.)
[root@servera ~]# passwd -l zhangxu #将zhangxu用户锁定,查看状态
Locking password for user zhangxu.
passwd: Success
[root@servera ~]# passwd -S zhangxu #锁定状态为 LK
zhangxu LK 2022-09-23 0 99999 7 -1 (Password locked.)
userdel 命令用于删除已有的用户账户,英文全称为“user delete”,语法格式为“ userdel [参数] 用户名 ”。
如果确认某位用户后续不会再登录到系统中,则可以通过 userdel 命令删除该用户的所有信息。在执行删除操作时,该用户的家目录默认会保留下来,此时可以使用-r 参数将其删除。userdel 命令的参数以及作用如表所示。
参数 | 作用 |
---|---|
-f | 强制删除 |
-r | 同时删除用户及用户家目录 |
一般会建议保留他的家目录数据,以免有重要的数据被误删除。所以在使用 userdel 命令时可以不加参数,写清要删除的用户名称就行:
虽然此时该用户已被删除,但家目录数据会继续存放在/home 目录中,等确认未来不再使用时将其手动删除即可:
[root@servera ~]# userdel zhangxu
[root@servera ~]# ls -l /home/
total 0
drwx------. 4 9999 1000 150 Sep 24 02:43 zhangxu
[root@servera ~]# rm -rf /home/zhangxu/