用户、用户组管理

用户、用户组管理

用户和组介绍

用户介绍

在Linux系统中,系统上每个进程(运行程序)都以特定用户身份运行。每个文件都有一个特定用户作为其所有者。文件所有权有助于系统对文件用户实施访问控制。正在运行的进程关联的用户确定该进程可访问的文件和目录。用户使用username标识并使其更易于使用。

在内部,系统通过分配给它们的唯一标识号,用户ID或UID来区分用户帐户。 如果用户使用用户

帐户,则通常会为其分配一个密码,用户在登录时将使用该密码来证明他们是实际的授权用户。

用户帐户主要有三种类型:

  • superuser:用于管理系统,用户名称为root,UID为0,对系统具有完全访问权限。

  • system users :系统具有系统用户帐户,由提供支持服务的进程使用。 这些进程或守护进程通常不需要以超级用户身份运行。 它们是非特权帐户,用户保护自己文件和其他资源。系统用户帐户不用于交互方式登录系统。

  • regular users:大多数用户拥有常规用户帐户,用于日常工作。

passwd文件

/etc/passwd 文件保存操作系统登录用户信息。每行包含一个登录用户信息,以冒号分隔七个

域。

格式:

bash 复制代码
name:password:UID:GID:GECOS:directory:shell

示例:

bash 复制代码
[whisky@localhost ~ 14:38:53] ✔ $cat /etc/passwd | grep whisky
whisky:x:1000:1000:whisky:/home/whisky:/bin/bash

解释如下:

  • name:用户登录名

  • password:用户密码,以x表示

  • UID:用户ID

  • GID:用户主组ID

  • GECOS:用户描述信息,通常为用户的真实姓名

  • directory:用户主目录,启动shell时的工作目录,默认位于/home/username

  • shell:用户打开终端时运行的程序,默认是shell。

对于system user,它的shell是/sbin/nologin。

示例:

bash 复制代码
[whisky@localhost ~ 16:29:38] ✔ $grep postfix /etc/passwd
postfix:x:89:89::/var/spool/postfix:/sbin/nologin

group文件

**组是用户的集合,组中用户继承组权限。**与用户一样,组具有组名称以使其更易于使用。系统通

过分配给它们的唯一标识号,组ID或GID来区分组。

/etc/group 文件保存操作系统组信息。每行包含一个组信息,以冒号分隔4个域。格式:

bash 复制代码
group_name:password:GID:user_list

示例:

bash 复制代码
[whisky@localhost ~ 16:32:33] ✔ $grep wheel /etc/group
wheel:x:10:whisky

解释如下:

  • group_name:组名称

  • password:组密码,用x表示

  • GID:组ID,唯一表示组

  • user_list:作为补充的成员

组的类型

  • 主要组:每个用户只有一个主要组,/etc/passwd 文件中的GID编号定义。 默认情况下,**用户创建的新文件组所有者为用户的主要组。**通常,在创建新的常规用户时,会创建一个与该用户同名的新组。该组用作新用户的主要组,该用户是此用户专用组的唯一成员,有助于简化文件权限管理。

  • 补充组:用户还可以拥有补充组。 补充组的成员资格由/etc/group文件确定。 根据用户的任何组是否具有访问权限,授予用户访问权限的权限。例如,如果用户user01具有主要组user01补充组wheel和webadmin,则该用户可以读取这三个组中任何一个组可读的文件。

bash 复制代码
# 查看用户信息
[whisky@localhost ~ 16:57:30] ✔ $id
uid=1000(whisky) gid=1000(whisky) 组=1000(whisky),10(wheel) 环境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
# 查看用户 uid
[whisky@localhost ~ 16:57:31] ✔ $id -u whisky
1000

本地用户管理

whoami命令

查看当前终端中的用户。

bash 复制代码
[whisky@localhost ~ 16:57:42] ✔ $whoami
whisky

who和w命令

查看当前系统中所有终端上的用户,以及用户登录的时间。

bash 复制代码
[whisky@localhost ~ 17:01:48] ✔ $who
root     pts/0        2025-12-23 13:54 (10.1.8.1)
root     pts/1        2026-04-01 15:41 (10.1.8.1)
root     pts/2        2025-12-23 09:59 (10.1.8.1)
whisky   pts/3        2025-12-23 10:01 (10.1.8.1)

[whisky@localhost ~ 17:02:50] ✔ $w
 17:04:21 up  7:54,  4 users,  load average: 0.00, 0.01, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    10.1.8.1         2312月25  1:23m  0.52s  0.13s -bash
root     pts/1    10.1.8.1         15:41   51:57   0.10s  0.10s -bash
root     pts/2    10.1.8.1         2312月25 49:41   0.84s  0.29s -bash
whisky   pts/3    10.1.8.1         2312月25  5.00s  0.22s  0.03s w

users命令

查看当前系统中所有终端上登录的用户名。

bash 复制代码
[whisky@localhost ~ 17:04:21] ✔ $users
root root root whisky whisky

useradd命令

作用:创建用户

bash 复制代码
[whisky@localhost ~ 18:19:45] ✔ $useradd user01
[whisky@localhost ~ 18:23:37] ✘ $grep user01 /etc/passwd
user01:x:1002:1002::/home/user01:/bin/bash
bash 复制代码
[root@localhost ~ 18:28:05] ✔ # useradd -u 1688 -d /opt/user02 -c "user for create test" -g wheel -s /sbin/nologin user02
# -u uid
# -d 用户的家目录
# -c 描述信息
# -g 用户的主组
# -s 用户shell程序

[whisky@localhost ~ 18:27:42] ✔ $grep user02 /etc/passwd
user02:x:1688:10:user for create test:/opt/user02:/sbin/nologin
[whisky@localhost ~ 18:30:32] ✔ $ls -d /opt/user02
/opt/user02

# 创建一个没有密码的账户,该用户在图形化界面中可以直接登录
[root@localhost ~ 18:28:13] ✔ # useradd -p '' Jerry

新用户家目录中的文件来源于/etc/skel/目录。

创建新用户的时候,用户属性默认参数配置在/etc/login.defs文件。

bash 复制代码
[root@localhost ~ 18:36:09] ✔ # vim /etc/login.defs
MAIL_DIR  /var/spool/mail
UMASK           077

PASS_MAX_DAYS 99999
PASS_MIN_DAYS 0
PASS_MIN_LEN  5
PASS_WARN_AGE 7

# Min/max values for automatic uid selection in useradd
UID_MIN                  1000
UID_MAX                 60000
# System accounts
SYS_GID_MIN               201
SYS_GID_MAX               999

...

usermod命令

作用:修改用户属性

bash 复制代码
[root@localhost ~ 10:46:17] ✔ # usermod user02 -u 1008 -md /home/user02 -s /bin/bash
# -m 移动家目录到新的位置
[root@localhost ~ 10:48:51] ✔ # grep user02 /etc/passwd
user02:x:1008:10:user for software manage:/home/user02:/bin/bash
 ls -d /home/user02
/home/user02
[root@localhost ~ 10:50:00] ✔ # su - user02

[user02@localhost ~ 10:52:36] ✔ $ usermod -aG user01 user02  
usermod:无法锁定 /etc/passwd,请稍后再usermod -aG user01 user-02q
[user02@localhost ~ 10:53:06] ✔ $ exit
登出
[root@localhost ~ 10:53:10] ✔ # usermod -aG user01 user02
[root@localhost ~ 10:53:18] ✔ # id user02
uid=1008(user02) gid=10(wheel) 组=10(wheel),1002(user01)
[root@localhost ~ 10:53:29] ✔ # useradd user03
[root@localhost ~ 10:53:42] ✔ # userdel user03
[root@localhost ~ 10:53:51] ✔ # userdel user02

userdel命令

bash 复制代码
#正常删除
[root@localhost ~ 18:53:44] ✘ # useradd user03
[root@localhost ~ 18:53:53] ✔ # userdel user03

#强制删除
[root@localhost ~ 18:54:10] ✔ # useradd user04
[root@localhost ~ 18:56:20] ✔ # userdel user04
userdel: user user04 is currently used by process 12235
#此处漏了一步,应用id user04校验

# 尽量不要强制删除,要找到无法删除的原因
[root@localhost ~ 18:57:15] ✘ # userdel -f user04
userdel: user user04 is currently used by process 12235
[root@localhost ~ 18:58:03] ✔ # id user04
id: user04: no such user

本地组管理

groupadd命令

bash 复制代码
# 创建名称为 admin 的组
[root@localhost ~ 19:01:02] ✔ # groupadd admin

#创建名称为sysadmin的组,组id为2000
[root@localhost ~ 19:02:50] ✔ # groupadd sysadmin -g 2000

#验证
[root@localhost ~ 19:02:53] ✔ # grep admin /etc/group
printadmin:x:997:
admin:x:8894:
sysadmin:x:2000:

groupmod命令

bash 复制代码
#修改组名称
[root@localhost ~ 20:21:34] ✔ # groupmod --new-name admins admin
# 修改组id
[root@localhost ~ 20:23:31] ✔ # groupmod -g 2002 admins
# 验证
[root@localhost ~ 20:23:57] ✔ # grep 'admins' /etc/group
admins:x:2002:

groupdel命令

bash 复制代码
[root@localhost ~ 20:24:34] ✔ # groupdel sysadmin 
[root@localhost ~ 20:33:09] ✔ # grep sysadmin /etc/group

groupmem命令

bash 复制代码
[root@localhost ~ 20:43:28] ✔ # groupmems --help
用法:groupmems [选项] [动作]

选项:
  -g, --group groupname         更改组 groupname,而不是用户的组(只 root)
  -R, --root CHROOT_DIR         chroot 到的目录

动作:
  -a, --add username            将用户 username 添加到组成员中
  -d, --delete username         从组的成员中删除用户 username
  -h, --help                    显示此帮助信息并推出
  -p, --purge                   从组中移除所有成员
  -l, --list                    列出组中的所有成员
  
#添加成员
[root@localhost ~ 20:43:50] ✔ # groupmems -g admins -a whisky
[root@localhost ~ 20:45:29] ✔ # groupmems -g admins -l
whisky 
[root@localhost ~ 20:45:41] ✔ # id whisky
uid=1000(whisky) gid=1000(whisky) 组=1000(whisky),10(wheel),2002(admins)

#删除成员
[root@localhost ~ 20:45:47] ✔ # groupmems -g admins -d whisky
[root@localhost ~ 20:46:45] ✔ # groupmems -g admins -l

#清空组中所有成员
[root@localhost ~ 20:46:48] ✔ # groupmems -g admins -a whisky
[root@localhost ~ 20:47:18] ✔ # groupmems -g admins -p

课后练习

  1. 创建developer组,组id为2000

    bash 复制代码
    [root@localhost ~ 11:31:58] ✔ #groupadd develop -g 2000
  2. 修改developer组名称为developers,组id为3000

    bash 复制代码
    [root@localhost ~ 11:32:47] ✔ #groupmod --new-name developers develop -g 3000
  3. 创建developer1用户,并添加到组developers

    bash 复制代码
    [root@localhost ~ 11:35:47] ✔ #useradd developer1 -g developers
  4. 将developer1用户从组developers中删除

    bash 复制代码
    [root@localhost ~ 11:37:37] ✔ #vim /etc/passwd
    developer1:x:8890:::/home/developer1:/bin/bash
    /etc/passwd
  5. 删除组developers

bash 复制代码
[root@localhost ~ 11:38:13] ✔ #groupdel developers

管理用户密码

shadow 文件

/etc/shadow 文件保存操作系统登录用户密码信息。

每行包含一个登录用户信息,以冒号分隔九个域。

示例:

bash 复制代码
[root@localhost ~ 20:47:23] ✔ # grep whisky /etc/shadow
whisky:$6$4VMTE63p$9OQMwRiF2ZQmzSln2hNS/ki83ANdlzcSh64RPewZRmE2tCeovqMSPunS8qHVmTuGBV2PXW1U0Crmq3Gdukgnf/:20440:0:99999:7:::

解释如下:

  • login name:用户登录名。

  • encrypted password:加密的密码。

  • date of last password change:上一次密码更改日期,以距离1970-1-1过去的天数表示。设置为0,强制用户下次登录时更改密码。

  • minimum password age:最小密码生命周期。设置为0,密码可以随时更改。

  • maximum password age:最大密码生命周期。

  • password warning period:密码过期前,提前多少天告警。设置为0,不提示过期。

  • password inactivity period:密码过期后,非活跃天数,在期间密码仍可以使用。

  • account expiration date:账户过期时间,以距离1970-1-1过去的天数表示。

  • reserved field:保留域。

chage 命令

bash 复制代码
# 查看用户密码信息
[root@localhost ~ 20:48:23] ✔ # chage -l whisky
最近一次密码修改时间					:12月 23, 2025
密码过期时间					:从不
密码失效时间					:从不
帐户过期时间						:从不
两次改变密码之间相距的最小天数		:0
两次改变密码之间相距的最大天数		:99999
在密码过期之前警告的天数	:7

# 修改用户密码要求
[root@localhost ~ 20:49:58] ✔ # chage -M 100 whisky
[root@localhost ~ 20:50:31] ✔ # chage -l whisky
最近一次密码修改时间					:12月 23, 2025
密码过期时间					:3月 28, 2026
密码失效时间					:从不
帐户过期时间						:从不
两次改变密码之间相距的最小天数		:0
两次改变密码之间相距的最大天数		:100

[root@localhost ~ 20:51:02] ✔ # chage -m 10 whisky
[root@localhost ~ 20:51:55] ✔ # chage -l whisky
最近一次密码修改时间					:12月 23, 2025
密码过期时间					:3月 28, 2026
密码失效时间					:从不
帐户过期时间						:从不
两次改变密码之间相距的最小天数		:10
两次改变密码之间相距的最大天数		:100
在密码过期之前警告的天数	:7

[root@localhost ~ 20:56:27] ✔ # chage -d 0 whisky
# 验证
[root@localhost ~ 20:57:18] ✔ # ssh whisky@localhost
whisky@localhost's password: 
You are required to change your password immediately (root enforced)
Last login: Mon Dec  23 20:57:18 2025 from localhost
WARNING: Your password has expired.
You must change your password now and login again!
更改用户 whisky 的密码 。
为 whisky 更改 STRESS 密码。
(当前)UNIX 密码:

# 设置用户密码过期时间是过去的一个时间,以便确保用户密码过期,登录时强制用户更改密码
# 设置为1,确保密码很久未改动
[root@localhost ~ 20:47:23] ✔ # chage -d 1 whisky

# 设置用户账户过期时间是过去的一个时间,以便锁定用户账户
[root@localhost ~ 20:47:23] ✔ # chage -E 1970-1-1 whisky

usermod -p 更改用户密码

bash 复制代码
# 更改whisky的密码与laowang一致
[root@centos7 ~]# grep laowang /etc/shadow
laowang:$6$dQcDSqtz$Nboi6QLMzscWSLvnnRO86gm3XI/qbgfnK5zVv2Ix13EktQ97vwNsqQlrfI2K/b1mVnHNgzmMNIb0P4HnTugog/:19304:0:99999:7:::
[root@centos7 ~]# usermod -p '$6$dQcDSqtz$Nboi6QLMzscWSLvnnRO86gm3XI/qbgfnK5zVv2Ix13EktQ97vwNsqQlrfI2K/b1mVnHNgzmMNIb0P4HnTugog/' whisky

# 删除用户密码 
[root@centos7 ~]# usermod -p '' whisky

usermod -s 限定用户shell

bash 复制代码
# 默认情况下,root用户可以切换到任何用户而且不需要密码
[root@centos7 ~]# su - laowang
上一次登录:一 12月  23 11:19:14 CST 2025tty1 上
[laowang@centos7 ~]$ 登出

# 更改用户shell为 /sbin/nologin
[root@centos7 ~]# usermod -s /sbin/nologin laowang
[root@centos7 ~]# su - laowang
上一次登录:一 12月  23 11:21:23 CST 2025pts/0 上
This account is currently not available.

# 将用户shell改为/bin/bash
[root@centos7 ~]# usermod -s /bin/bash laowang

usermod -L 锁定用户密码

等效于 passwd -l

bash 复制代码
[root@centos7 ~]# usermod -L laowang

# 输入正确的密码也无法登录
[whisky@centos7 ~]$ su - laowang
Password: 
su: Authentication failure
[whisky@centos7 ~]$ 

usermod -U 解锁用户密码

等效于 passwd -u

bash 复制代码
[root@centos7 ~]# usermod -U laowang

# 输入正确的密码登录
[whisky@centos7 ~]$ su - laowang
Password: 
[laowang@centos7 ~]$ 

passwd -d 删除密码

bash 复制代码
# 删除用户密码即可
[root@centos7 ~]# passwd -d laowang
清除用户的密码 laowang。
passwd: 操作成功

用户登录的时候,输入用户名即可登录。

设置账户过期

等效于 passwd -e

bash 复制代码
# 设置账户过期时间为过去的某一个日期
[root@centos7 ~]# usermod -e 2024-7-18 laowang

增加一个 uid 为 0 的用户

方法一
bash 复制代码
[root@centos7 ~]# vim /etc/passwd
# 将自己的用户id该为0,此时whisky用户可以行使root权限了
whisky:x:0:1000:whisky:/home/whisky:/bin/bash
方法二
bash 复制代码
[root@centos7 ~]# useradd -o -u 0 whisky
[root@centos7 ~]# id whisky
uid=0(root) gid=0(root) 组=0(root)

删除用户密码即可

root@centos7 \~\]# passwd -d laowang 清除用户的密码 laowang。 passwd: 操作成功 用户登录的时候,输入用户名即可登录。 ### 设置账户过期 等效于` passwd -e` ```bash # 设置账户过期时间为过去的某一个日期 [root@centos7 ~]# usermod -e 2024-7-18 laowang #### 增加一个 uid 为 0 的用户 ##### **方法一** ```bash [root@centos7 ~]# vim /etc/passwd # 将自己的用户id该为0,此时whisky用户可以行使root权限了 whisky:x:0:1000:whisky:/home/whisky:/bin/bash ``` ##### **方法二** ```bash [root@centos7 ~]# useradd -o -u 0 whisky [root@centos7 ~]# id whisky uid=0(root) gid=0(root) 组=0(root) ``` whisky 和 root 账户是两个不同的账户,但是whisky用户获得了root账户权限。

相关推荐
学Linux的语莫5 小时前
k8s知识点整体概览
java·linux·kubernetes
2301_767902645 小时前
Ansible 自动化运维入门到实战
运维·自动化·ansible
翼龙云_cloud6 小时前
阿里云渠道商:在更换阿里云 GPU 公网 IP 时,如何确保数据的安全性?
运维·服务器·tcp/ip·阿里云·云计算
Ghost Face...6 小时前
DQ与DQS相位关系详解:为什么是90°?
linux
爱喝水的鱼丶6 小时前
SAP-ABAP:通过接口创建生产订单报“没有工艺路线选中”错误解决办法详解
运维·开发语言·sap·abap·bapi·生产订单
山川而川-R6 小时前
在香橙派5pro上的ubuntu22.04系统烧录镜像_2_12.23
linux·运维·服务器
DeeplyMind6 小时前
linux drm子系统技术分析目录表
linux·驱动开发·drm
Howrun7776 小时前
Linux Makefile 完全教学:从入门到精通
linux·服务器
Run_Teenage6 小时前
Linux:进程程序替换
linux·运维·服务器