Geeks_Z の Blog Geeks_Z の Blog
首页
  • 学习笔记

    • 《HTML》
    • 《CSS》
    • 《JavaWeb》
    • 《Vue》
  • 后端文章

    • Linux
    • Maven
    • 汇编语言
    • 软件工程
    • 计算机网络概述
    • Conda
    • Pip
    • Shell
    • SSH
    • Mac快捷键
    • Zotero
  • 学习笔记

    • 《数据结构与算法》
    • 《算法设计与分析》
    • 《Spring》
    • 《SpringMVC》
    • 《SpringBoot》
    • 《SpringCloud》
    • 《Nginx》
  • 深度学习文章
  • 学习笔记

    • 《PyTorch》
    • 《ReinforementLearning》
    • 《MetaLearning》
  • 学习笔记

    • 《高等数学》
    • 《线性代数》
    • 《概率论与数理统计》
  • 增量学习
  • 哈希学习
GitHub (opens new window)

Geeks_Z

AI小学生
首页
  • 学习笔记

    • 《HTML》
    • 《CSS》
    • 《JavaWeb》
    • 《Vue》
  • 后端文章

    • Linux
    • Maven
    • 汇编语言
    • 软件工程
    • 计算机网络概述
    • Conda
    • Pip
    • Shell
    • SSH
    • Mac快捷键
    • Zotero
  • 学习笔记

    • 《数据结构与算法》
    • 《算法设计与分析》
    • 《Spring》
    • 《SpringMVC》
    • 《SpringBoot》
    • 《SpringCloud》
    • 《Nginx》
  • 深度学习文章
  • 学习笔记

    • 《PyTorch》
    • 《ReinforementLearning》
    • 《MetaLearning》
  • 学习笔记

    • 《高等数学》
    • 《线性代数》
    • 《概率论与数理统计》
  • 增量学习
  • 哈希学习
GitHub (opens new window)
  • Linux

    • 学习资源
    • 常用命令
    • 帮助信息查看
    • Linux开机、重启和用户登录注销
    • 用户管理
      • 1. Linux 用户管理要点
      • 2. 命令常见用法
        • 2.1. groupadd
        • 2.2. groupdel
        • 2.3. groupmod
        • 2.4. useradd
        • 2.5. userdel
        • 2.6. usermod
        • 2.7. passwd
        • 2.8. su
        • 2.9. sudo
        • 2.9.1. 给普通用户授权 sudo
        • 2.9.2. 免密码授权 sudo
        • 关键配置文件
      • 创建删除设置用户
      • 查询切换用户
      • 用户组
        • 增加/删除组、创建特定组的用户
        • 用户和组的相关文件
    • 实用指令
    • 组管理和权限管理
    • 定时任务调度
    • Linux 磁盘分区和挂载
    • Linux网络配置
    • 进程管理
    • RPM和YUM软件管理
    • Linux服务器超级实用的Shell脚本
    • 文件解压缩
  • Git

  • ProgramNotes
  • Linux
Geeks_Z
2022-12-26
目录

用户管理

关键词:groupadd, groupdel, groupmod, useradd, userdel, usermod, passwd, su, sudo

1. Linux 用户管理要点

  • 创建用户组 - 使用 groupadd
  • 删除用户组 - 使用 groupdel
  • 修改用户组信息 - 使用 groupmod
  • 创建用户 - 使用 useradd
  • 删除用户 - 使用 userdel
  • 修改用户信息 - 使用 usermod
  • 设置用户认证信息 - 使用 passwd
  • 切换用户 - 使用 su
  • 当前用户想执行没有权限执行的命令时,使用其他用户身份去执行 - 使用 sudo

2. 命令常见用法

2.1. groupadd

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

常用选项:

  • -g GID:指定组 ID(默认自动分配)。
  • -r:创建系统组(ID 范围通常为 0-999)。
  • -f:强制创建(组已存在时忽略错误)。

示例:

groupadd -g 1000 developers  # 创建组 ID 为 1000 的组 "developers"
groupadd -r systemgroup      # 创建系统组
1
2

2.2. groupdel

groupdel 命令用于删除指定的用户组,本命令要修改的系统文件包括 /ect/group 和 /ect/gshadow。若该群组中仍包括某些用户,则必须先删除这些用户后,方能删除群组。

示例:

$ groupadd damon  # 创建damon用户组
$ groupdel damon  # 删除这个用户组
1
2

2.3. groupmod

用途:修改组属性(如组名或 GID)。
语法:

groupmod [选项] 组名
1

常用选项:

  • -g GID:修改组 ID。
  • -n 新组名:重命名组。

示例:

groupmod -g 1001 developers  # 修改组 ID 为 1001
groupmod -n devs developers  # 将组名从 "developers" 改为 "devs"
1
2

2.4. useradd

useradd 命令用于 Linux 中创建的新的系统用户。useradd 可用来建立用户帐号。帐号建好之后,再用 passwd 设定帐号的密码.而可用 userdel 删除帐号。使用 useradd 指令所建立的帐号,实际上是保存在 /etc/passwd 文本文件中。

语法:

useradd [选项] 用户名
1

常用选项:

  • -u UID:指定用户 ID。
  • -g 组名:指定主组(需已存在)。
  • -G 附加组:指定附加组(逗号分隔)。
  • -d 目录:设置家目录(默认/home/用户名)。
  • -s shell:指定登录 Shell(如/bin/bash)。
  • -m:自动创建家目录(-k 可指定模板目录)。
  • -r:创建系统用户(无家目录)。

示例:

# 新建用户加入组
$ useradd –g sales jack –G company,employees    # -g:加入主要组、-G:加入次要组

# 建立一个新用户账户,并设置 ID
$ useradd caojh -u 544

useradd -u 1001 -g developers -G docker,web -m -s /bin/bash alice
# 创建用户 alice,UID=1001,主组为 developers,附加组为 docker 和 web,自动创建家目录
1
2
3
4
5
6
7
8

2.5. userdel

userdel 命令用于删除给定的用户,以及与用户相关的文件。若不加选项,则仅删除用户帐号,而不删除相关文件。

语法:

userdel [选项] 用户名
1

常用选项:

  • -r:同时删除家目录和邮件池。

示例:

userdel 命令很简单,比如我们现在有个用户 linuxde,其 home 目录位于/var目录中,现在我们来删除这个用户:

$ userdel linuxde       # 删除用户linuxde,但不删除其家目录及文件;
$ userdel -r linuxde    # 删除用户linuxde,其 home 目录及文件一并删除;
1
2

2.6. usermod

usermod 命令用于修改用户的基本信息。usermod 命令不允许你改变正在线上的使用者帐号名称。当 usermod 命令用来改变 user id,必须确认这名 user 没在电脑上执行任何程序。你需手动更改使用者的 crontab 档。也需手动更改使用者的 at 工作档。采用 NIS server 须在 server 上更动相关的 NIS 设定。

语法:

usermod [选项] 用户名
1

常用选项:

  • -l 新用户名:修改用户名。
  • -g 组名:修改主组。
  • -G 附加组:覆盖原有附加组(用-aG追加附加组)。
  • -L:锁定用户(禁用登录)。
  • -U:解锁用户。

示例:

# 将 newuser2 添加到组 staff 中
$ usermod -G staff newuser2

# 修改 newuser 的用户名为 newuser1
$ usermod -l newuser1 newuser

# 锁定账号 newuser1
$ usermod -L newuser1

# 解除对 newuser1 的锁定
$ usermod -U newuser1

usermod -l alice_new alice      # 将用户名从 alice 改为 alice_new
usermod -aG sudo alice         # 将 alice 追加到 sudo 组
usermod -L alice               # 锁定 alice 账户
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

2.7. passwd

passwd 命令用于设置用户的认证信息,包括用户密码、密码过期时间等。系统管理者则能用它管理系统用户的密码。只有管理者可以指定用户名称,一般用户只能变更自己的密码。

语法:

passwd [选项] [用户名]
1

常用选项:

  • -l:锁定用户密码。
  • -u:解锁用户密码。
  • -e:强制用户下次登录修改密码。
  • -d:删除密码(危险!允许无密码登录)。

示例:

# 如果是普通用户执行 passwd 只能修改自己的密码。
# 如果新建用户后,要为新用户创建密码,则用 passwd 用户名,注意要以 root 用户的权限来创建。
$ passwd linuxde    # 更改或创建linuxde用户的密码;
Changing password for user linuxde.
New UNIX password:          # 请输入新密码;
Retype new UNIX password:   # 再输入一次;
passwd: all authentication tokens updated successfully. # 成功;

# 普通用户如果想更改自己的密码,直接运行 passwd 即可,比如当前操作的用户是 linuxde。
$ passwd
Changing password for user linuxde. # 更改linuxde用户的密码;
(current) UNIX password:   # 请输入当前密码;
New UNIX password:         # 请输入新密码;
Retype new UNIX password:  # 确认新密码;
passwd: all authentication tokens updated successfully. # 更改成功;

# 比如我们让某个用户不能修改密码,可以用`-l`选项来锁定:
$ passwd -l linuxde    # 锁定用户linuxde不能更改密码;
Locking password for user linuxde.
passwd: Success           # 锁定成功;

$ su linuxde   # 通过su切换到linuxde用户;
$ passwd      # linuxde来更改密码;
Changing password for user linuxde.
Changing password for linuxde
(current) UNIX password:          # 输入linuxde的当前密码;
passwd: Authentication token manipulation error     # 失败,不能更改密码;

$ passwd -d linuxde  # 清除linuxde用户密码;
Removing password for user linuxde.
passwd: Success                         # 清除成功;

$ passwd -S linuxde    # 查询linuxde用户密码状态;
Empty password.                         # 空密码,也就是没有密码;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34

2.8. su

su 命令用于切换当前用户身份到其他用户身份,变更时须输入所要变更的用户帐号与密码。

语法:

su [选项] [用户名]
1

常用选项:

  • - 或 -l:模拟登录(加载目标用户的环境变量)。
  • -c 命令:以目标用户执行单条命令后退出。

示例:

# 变更帐号为 root 并在执行 ls 指令后退出变回原使用者:
$ su -c ls root

# 变更帐号为 root 并传入`-f`选项给新执行的 shell:
$ su root -f

# 变更帐号为 test 并改变工作目录至 test 的家目录:
$ su -test
1
2
3
4
5
6
7
8

2.9. sudo

sudo 命令用来以其他身份来执行命令,预设的身份为 root。在 /etc/sudoers 中设置了可执行 sudo 指令的用户。若其未经授权的用户企图使用 sudo,则会发出警告的邮件给管理员。用户使用 sudo 时,必须先输入密码,之后有 5 分钟的有效期限,超过期限则必须重新输入密码。

语法:

sudo [选项] 命令
1

常用选项:

  • -u 用户名:以指定用户身份执行(默认为 root)。
  • -i:模拟目标用户的登录环境。
  • -l:列出当前用户的 sudo 权限。

示例:

# 指定用户执行命令
$ sudo -u userb ls -l
# 列出目前的权限
$ sudo -l
# 显示sudo设置
$ sudo -L
sudo apt update              # 以 root 身份更新软件包
sudo -u alice touch /tmp/test  # 以 alice 身份创建文件
sudo -i                      # 切换到 root 的登录环境
1
2
3
4
5
6
7
8
9

2.9.1. 给普通用户授权 sudo

假设要给普通用户 mary 配置 sudo 权限:

  1. /etc/sudoers 文件存放了 sudo 的相关用户,但是默认是没有写权限的,所以需要设为可写:chmod u+w /etc/sudoers
  2. 在该文件中添加 mary ALL=(ALL) ALL ,保存并退出,让 mary 具有 sudo 的所有权限
  3. 再将 /etc/sudoers 的权限恢复到默认状态:chmod u-w /etc/sudoers

2.9.2. 免密码授权 sudo

与给普通用户授权 sudo 类似,区别仅在于第 2 步:mary ALL=(ALL) NOPASSWD: ALL。

关键配置文件

  • 用户信息:/etc/passwd
  • 密码哈希:/etc/shadow
  • 组信息:/etc/group
  • sudo 权限:/etc/sudoers(使用visudo编辑)

以下为韩顺平老师讲解

创建删除设置用户

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

  • 添加用户默认该用户的家目录在/home/username,username 是用户的名称,也可以指定目录,但没必要

    useradd milan #添加milan这个用户
    passwd milan #更改milan这个用户的密码
    userdel milan #删除用户milan,但是保留home家目录
    userdel -r milan #删除用户milan的所有信息,包括家目录
    
    1
    2
    3
    4
  • 关于保留家目录的讨论

    • 建议保留
    • 除非不再需要该用户的任何贡献代码、记录
  • pwd:该命令显示当前所在目录全程

查询切换用户

  • 查询基本语法——id 用户名;当不存在改用户时,返回无此用户。

    [root@iZbp1978lespq45h0qv20aZ home]# id jack
    id: jack: no such user
    [root@iZbp1978lespq45h0qv20aZ home]# id root
    uid=0(root) gid=0(root) groups=0(root)
    [root@iZbp1978lespq45h0qv20aZ home]# id milan
    uid=1000(milan) gid=1000(milan) groups=1000(milan)
    [root@iZbp1978lespq45h0qv20aZ home]#
    
    1
    2
    3
    4
    5
    6
    7
  • 切换基本语法——su 用户名;exit返回原用户;从权限高的用户切换到权限低的用户,不需要密码;反之需要。

  • 查看当前登录用户语法——whoami或者who am i。值得注意的是whoami返回当前使用的用户,who am i返回第一次登录服务器的信息。

    [root@iZbp1978lespq45h0qv20aZ home]# ls
    milan
    [root@iZbp1978lespq45h0qv20aZ home]# su milan
    [milan@iZbp1978lespq45h0qv20aZ home]$ whoami
    milan
    [milan@iZbp1978lespq45h0qv20aZ home]$ exit
    exit
    [root@iZbp1978lespq45h0qv20aZ home]# whoami
    root
    [root@iZbp1978lespq45h0qv20aZ home]# who am i
    root     pts/0        2022-02-20 16:45 (43.227.139.42)
    [root@iZbp1978lespq45h0qv20aZ home]# su milan
    [milan@iZbp1978lespq45h0qv20aZ home]$ who am i
    root     pts/0        2022-02-20 16:45 (43.227.139.42)
    [milan@iZbp1978lespq45h0qv20aZ home]$ whoami
    milan
    [milan@iZbp1978lespq45h0qv20aZ home]$ exit
    exit
    [root@iZbp1978lespq45h0qv20aZ home]#
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19

用户组

增加/删除组、创建特定组的用户

  • 移动用户到另外的组

  • 示例

    [root@iZbp1978lespq45h0qv20aZ home]# groupadd wudang
    [root@iZbp1978lespq45h0qv20aZ home]# groupdel wudang
    [root@iZbp1978lespq45h0qv20aZ home]# ls
    milan
    [root@iZbp1978lespq45h0qv20aZ home]# groupadd wudang
    [root@iZbp1978lespq45h0qv20aZ home]# useradd -g wudang zwj
    [root@iZbp1978lespq45h0qv20aZ home]# ls
    milan  zwj
    [root@iZbp1978lespq45h0qv20aZ home]# id zwj
    uid=1001(zwj) gid=1001(wudang) groups=1001(wudang)
    [root@iZbp1978lespq45h0qv20aZ home]# groupadd mojiao
    [root@iZbp1978lespq45h0qv20aZ home]# usermod -g mojiao zwj
    [root@iZbp1978lespq45h0qv20aZ home]# id zwj
    uid=1001(zwj) gid=1002(mojiao) groups=1002(mojiao)
    [root@iZbp1978lespq45h0qv20aZ home]#
    
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16

用户和组的相关文件

  • cat /etc/group:查看所有的组,一般大于 1000 是自定义;
  • cat /etc/passwd:查看所有的用户及其相关信息。

  • 登录 shell 的含义

    • shell 是你(用户)和 Linux(或者更准确的说,是你和 Linux 内核)之间的接口程序。你在提示符下输入的每个命令都由 shell 先解释然后传给 Linux 内核。也称 shell 为外壳。

    • shell 是一个命令语言解释器(command-language interpreter)。拥有自己内建的 shell 命令集。此外,shell 也能被系统中其他有效的 Linux 实用程序和应用程序(utilities and application programs)所调用。

    • bash 是 shell 的一种,是大多数 Linux 发行版默认的 shell,除 bash shell 外还有 c shell 等其它类型的 shell。

#Linux
上次更新: 2025/06/25, 11:25:50
Linux开机、重启和用户登录注销
实用指令

← Linux开机、重启和用户登录注销 实用指令→

最近更新
01
帮助信息查看
06-08
02
常用命令
06-08
03
学习资源
06-07
更多文章>
Theme by Vdoing | Copyright © 2022-2025 Geeks_Z | MIT License
京公网安备 11010802040735号 | 京ICP备2022029989号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式