跳至内容

用户管理

在本章中,您将学习如何管理用户。


目标:在本章中,未来的 Linux 管理员将学会如何

✔ 添加、删除或修改一个
✔ 添加、删除或修改一个用户
✔ 理解与用户和组相关的文件,并学习如何管理它们;
✔ 修改文件的所有者所属组
✔ 保护用户账户;
✔ 切换身份。

🏁 用户

知识⭐ ⭐
复杂度⭐ ⭐

阅读时间: 30 分钟


通用

每个用户都必须有一个与其同名的组,称为用户的主组

多个用户可以属于同一个组。

主组以外的组称为用户的附加组

注意

每个用户都有一个主组,并且可以被邀请加入一个或多个附加组。

组和用户由它们唯一的数字标识符GIDUID进行管理。

  • UID用户标识符。唯一的用户 ID。
  • GID组标识符。唯一的组 ID。

内核识别 UID 和 GID,这意味着超级管理员不一定是root用户,只要uid=0的用户就是超级管理员。

与用户/组相关的文件是

  • /etc/passwd
  • /etc/shadow
  • /etc/group
  • /etc/gshadow
  • /etc/skel/
  • /etc/default/useradd
  • /etc/login.defs

危险

您应始终使用管理命令,而不是手动编辑文件。

注意

本章中的一些命令需要管理员权限。按照惯例,当命令需要以管理员权限运行时,我们将指定 sudo 命令。为了使示例正常工作,请确保您的账户有权使用 sudo 命令。

组管理

修改文件,添加行

  • /etc/group
  • /etc/gshadow

groupadd 命令

groupadd 命令将一个组添加到系统中。

groupadd [-f] [-g GID] group

示例

sudo groupadd -g 1012 GroupeB
选项 描述
-g GID 定义要创建的组的GID
-f 如果指定的-g选项的 GID 已存在,系统将选择一个 GID。
-r 创建一个系统组,其GID介于SYS_GID_MINSYS_GID_MAX之间。这两个变量在/etc/login.defs中定义。

组命名规则

  • 不允许使用重音符或特殊字符;
  • 与现有用户或系统文件的名称不同。

注意

Debian中,管理员应使用 addgroupdelgroup 命令,而不是直接使用 groupaddgroupdel 命令(除非是用于跨 Linux 发行版的移植脚本)。具体请参考 man

$ man addgroup
DESCRIPTION
adduser and addgroup add users and groups to the system according to command line options and configuration information
in /etc/adduser.conf. They are friendlier front ends to the low-level tools like useradd, groupadd and usermod programs,
by default, choosing Debian policy conformant UID and GID values, creating a home directory with skeletal configuration,
running a custom script, and other features.

groupmod 命令

groupmod 命令允许您修改系统中现有的组。

groupmod [-g GID] [-n nom] group

示例

sudo groupmod -g 1016 GroupP

sudo groupmod -n GroupC GroupB
选项 描述
-g GID 要修改的组的新GID
-n name 新名称。

可以同时更改组的名称、GID 或两者。

修改后,属于该组的文件将拥有一个未知的GID。它们必须被重新分配到新的GID

sudo find / -gid 1002 -exec chgrp 1016 {} \;

groupdel 命令

groupdel 命令删除系统中存在的组。

groupdel group

示例

sudo groupdel GroupC

技巧

删除组时,可能出现两种情况:

  • 如果一个用户有唯一的(即只有该用户作为主组成员)主组,而您对此组执行 groupdel 命令,系统会提示您该组下有特定用户,无法删除。
  • 如果一个用户属于一个附加组(不是该用户的首要组),并且该组不是系统中另一个用户的首要组,那么 groupdel 命令将删除该组,而不会有额外的提示。

示例

$ sudo useradd test
$ id test
uid=1000(test) gid=1000(test) group=1000(test)
$ sudo groupdel test
groupdel: cannot remove the primary group of user 'test'

$ sudo usermod -g users -G test test
$ id test
uid=1000(test) gid=100(users) group=100(users),1000(test)
$ sudo groupdel test

技巧

当您使用 userdel -r 命令删除用户时,相应的首要组也会被删除。首要组的名称通常与用户名相同。

技巧

每个组都有唯一的GID。多个用户可以将一个组作为附加组使用。通常,超级管理员的 GID 是 0。保留给某些服务或进程的 GID 是 201-999,称为系统组或伪用户组。用户的 GID 通常大于或等于 1000。这些与/etc/login.defs稍后会讨论。

# Comment line ignored
shell > cat  /etc/login.defs
MAIL_DIR        /var/spool/mail
UMASK           022
HOME_MODE       0700
PASS_MAX_DAYS   99999
PASS_MIN_DAYS   0
PASS_MIN_LEN    5
PASS_WARN_AGE   7
UID_MIN                  1000
UID_MAX                 60000
SYS_UID_MIN               201
SYS_UID_MAX               999
GID_MIN                  1000
GID_MAX                 60000
SYS_GID_MIN               201
SYS_GID_MAX               999
CREATE_HOME     yes
USERGROUPS_ENAB yes
ENCRYPT_METHOD SHA512

技巧

由于用户必然属于一个组,因此最好在添加用户之前创建组。因此,一个组可能没有成员。

/etc/group 文件

此文件包含组信息(用:分隔)。

$ sudo tail -1 /etc/group
GroupP:x:516:patrick
  (1)  (2)(3)   (4)
  • 1: 组名。
  • 2: 组密码用x标识。组密码存储在/etc/gshadow中。
  • 3: GID。
  • 4: 组中的附加用户(不包括唯一的首要用户)。

注意

/etc/group 文件中的每一行对应一个组。首要用户信息存储在/etc/passwd中。

/etc/gshadow 文件

此文件包含组的安全信息(用:分隔)。

$ sudo grep GroupA /etc/gshadow
GroupA:$6$2,9,v...SBn160:alain:rockstar
   (1)      (2)            (3)      (4)
  • 1: 组名。
  • 2: 加密密码。
  • 3: 组管理员的名称。
  • 4: 组中的附加用户(不包括唯一的首要用户)。

警告

/etc/group/etc/gshadow 中的组名必须一一对应。也就是说,/etc/group 文件中的每一行必须在 /etc/gshadow 文件中有一个对应的行。

密码中的!表示已锁定。因此,没有任何用户可以使用密码来访问该组(因为组的成员不需要它)。

用户管理

定义

/etc/passwd文件中,用户定义如下:

  • 1: 登录名;
  • 2: 密码标识,x表示用户有密码,加密密码存储在/etc/shadow的第二个字段;
  • 3: UID;
  • 4: 首要组的 GID;
  • 5: 评论;
  • 6: 主目录;
  • 7: Shell(/bin/bash, /bin/nologin, ...)。

用户有三种类型:

  • root(uid=0):系统管理员;
  • 系统用户(uid 是 201~999 之一):用于系统管理应用程序的访问权限;
  • 普通用户(uid>=1000):用于登录系统的其他账户。

修改文件,添加行

  • /etc/passwd
  • /etc/shadow

useradd 命令

useradd 命令添加一个用户。

useradd [-u UID] [-g GID] [-d directory] [-s shell] login

示例

sudo useradd -u 1000 -g 1013 -d /home/GroupC/carine carine
选项 描述
-u UID 要创建的用户的UID
-g GID 首要组的GID。这里的GID也可以是组名
-G GID1,[GID2]... 附加组的GID。这里的GID也可以是组名。可以指定多个以逗号分隔的附加组。
-d directory 创建主目录。
-s shell 指定用户的 Shell。
-c COMMENT 添加注释。
-U 同时将用户添加到同名组。如果未指定,则创建用户时会创建同名组。
-M 不创建用户的家目录。
-r 创建系统账户。

创建时,账户没有密码,处于锁定状态。

用户必须设置密码才能解锁账户。

当调用 useradd 命令而不带任何选项时,新用户将设置以下默认值:

  • 创建与用户名同名的家目录;
  • 创建与用户名同名的首要组;
  • 为用户分配一个指向/bin/bash的默认 Shell;
  • 用户的 UID 和首要组 GID 值会自动推导。这通常是 1000 到 60,000 之间的唯一值。

注意

默认设置和值来自以下配置文件:

/etc/login.defs/etc/default/useradd

$ sudo useradd test1

$ tail -n 1 /etc/passwd
test1:x:1000:1000::/home/test1:/bin/bash

$ tail -n 1 /etc/shadow
test1:!!:19253:0:99999:7:::

$ tail -n 1 /etc/group ; tail -n 1 /etc/gshadow
test1:x:1000:
test1:!::

账户命名规则

  • 允许使用小写字母、数字和下划线;不允许使用星号、百分号和全角符号等其他特殊字符。
  • 虽然在 RockyLinux 中可以使用大写用户名,但不推荐这样做;
  • 不建议以数字和下划线开头,尽管您可能被允许这样做;
  • 与现有组或系统文件的名称不同;
  • 用户名最多可以包含 32 个字符。

警告

用户必须创建家目录,除了最后一个目录。

最后一个目录由 useradd 命令创建,该命令会顺便将/etc/skel中的文件复制到其中。

除了其首要组之外,用户还可以属于多个组。

示例

sudo useradd -u 1000 -g GroupA -G GroupP,GroupC albert

注意

Debian中,您必须指定 -m 选项来强制创建登录目录,或在/etc/login.defs文件中设置 CREATE_HOME 变量。在所有情况下,管理员都应使用 adduserdeluser 命令(请参考 man),除非是用于跨 Linux 发行版的移植脚本。

$ man useradd
DESCRIPTION
    **useradd** is a low-level utility for adding users. On Debian, administrators should usually use **adduser(8)**
     instead.

用户创建的默认值

修改 /etc/default/useradd 文件。

useradd -D [-b directory] [-g group] [-s shell]

示例

sudo useradd -D -g 1000 -b /home -s /bin/bash
选项 描述
-D 设置用户创建的默认值。
-b base_directory 定义用户主目录的基础目录。如果未指定此选项,则使用 /etc/default/useradd 文件中的 HOME 变量或 /home/。
-g group 设置默认组。
-s shell 设置默认 Shell。
-f 设置密码过期后禁用账户的天数。
-e 设置禁用账户的日期。

usermod 命令

usermod 命令允许修改用户。

usermod [-u UID] [-g GID] [-d directory] [-m] login

示例

sudo usermod -u 1044 carine

useradd 命令相同的选项。

选项 描述
-m -d 选项关联。移动旧登录目录的内容到新目录。如果旧家目录不存在,则不会创建新家目录;当新家目录不存在时,会创建新家目录。
-l login 修改登录名。修改登录名后,还需要修改家目录名以匹配。
-e YYYY-MM-DD 修改账户过期日期。
-L 永久锁定账户。也就是说,它在/etc/shadow的密码字段开头添加了!
-U 解锁账户。
-a 追加用户的附加组,必须与 -G 选项一起使用。
-G 修改用户的附加组,并覆盖之前的附加组。

技巧

要修改,用户必须已登出且没有正在运行的进程。

更改标识符后,属于该用户的文件的UID将未知。必须将其重新分配给新的UID

其中 1000 是旧UID1044 是新UID。示例如下:

sudo find / -uid 1000 -exec chown 1044: {} \;

用户账户的锁定和解锁。示例如下:

$ usermod -L test1
$ grep test1 /etc/shadow
test1:!$6$n.hxglA.X5r7X0ex$qCXeTx.kQVmqsPLeuvIQnNidnSHvFiD7bQTxU7PLUCmBOcPNd5meqX6AEKSQvCLtbkdNCn.re2ixYxOeGWVFI0:19259:0:99999:7:::

$ usermod -U test1

-aG 选项和 -G 选项之间的区别可以用下面的例子来解释:

$ sudo useradd test1
$ sudo passwd test1
$ sudo groupadd groupA ; sudo groupadd groupB ; sudo groupadd groupC ; sudo groupadd groupD
$ id test1
uid=1000(test1) gid=1000(test1) groups=1000(test1)

$ sudo gpasswd -a test1 groupA
$ id test1
uid=1000(test1) gid=1000(test1) groups=1000(test1),1002(groupA)

$ sudo usermod -G groupB,groupC test1
$ id test1 
uid=1000(test1) gid=1000(test1) groups=1000(test1),1003(groupB),1004(groupC)

$ sudo usermod -aG groupD test1
$ id test1
uid=1000(test1) gid=1000(test1) groups=1000(test1),1003(groupB),1004(groupC),1005(groupD)

userdel 命令

userdel 命令允许您删除用户账户。

sudo userdel -r carine
选项 描述
-r 删除用户的主目录和位于/var/spool/mail/目录下的邮件文件

技巧

要删除,用户必须已登出且没有正在运行的进程。

userdel 命令会删除/etc/passwd/etc/shadow/etc/group/etc/gshadow中相应的行。如上所述,userdel -r 也会删除用户对应的首要组。

/etc/passwd 文件

此文件包含用户信息(用:分隔)。

$ sudo head -1 /etc/passwd
root:x:0:0:root:/root:/bin/bash
(1)(2)(3)(4)(5)  (6)    (7)
  • 1: 登录名;
  • 2: 密码标识,x表示用户有密码,加密密码存储在/etc/shadow的第二个字段;
  • 3: UID;
  • 4: 首要组的 GID;
  • 5: 评论;
  • 6: 主目录;
  • 7: Shell(/bin/bash, /bin/nologin, ...)。

/etc/shadow 文件

此文件包含用户的安全信息(用:分隔)。

$ sudo tail -1 /etc/shadow
root:$6$...:15399:0:99999:7:::
 (1)    (2)  (3) (4) (5) (6)(7,8,9)
  • 1: 登录名。
  • 2: 加密密码。使用 SHA512 加密算法,由/etc/login.defsENCRYPT_METHOD定义。
  • 3: 上次更改密码的时间,时间戳格式,以天为单位。所谓时间戳是以 1970 年 1 月 1 日为基准时间。每天过去,时间戳 +1。
  • 4: 密码的最小生命周期。即两次密码更改之间的时间间隔(与第三个字段相关),以天为单位。由/etc/login.defsPASS_MIN_DAYS定义,默认为 0,即第二次更改密码时没有限制。但是,如果为 5,则表示 5 天内不允许更改密码,只能在 5 天后更改。
  • 5: 密码的最大生命周期。即密码的有效期限(与第三个字段相关)。由/etc/login.defsPASS_MAX_DAYS定义。
  • 6: 密码过期前的警告天数(与第五个字段相关)。默认为 7 天,由/etc/login.defsPASS_WARN_AGE定义。
  • 7: 密码过期后的宽限天数(与第五个字段相关)。
  • 8: 账户过期时间,时间戳格式,以天为单位。请注意,账户过期与密码过期不同。如果账户过期,用户将不允许登录。如果密码过期,用户将不允许使用其密码登录。
  • 9: 为将来使用而保留。

危险

/etc/passwd 文件中的每一行都必须在 /etc/shadow 文件中有一个对应的行。

有关时间戳和日期转换,请参考以下命令格式:

# The timestamp is converted to a date, "17718" indicates the timestamp to be filled in.
$ date -d "1970-01-01 17718 days" 

# The date is converted to a timestamp, "2018-07-06" indicates the date to be filled in.
$ echo $(($(date --date="2018-07-06" +%s)/86400+1))

文件所有者

危险

所有文件必然属于一个用户和一个组。

默认情况下,创建文件的用户的首要组是文件的所有者组。

修改命令

chown 命令

chown 命令允许您更改文件的所有者。

chown [-R] [-v] login[:group] file

示例

sudo chown root myfile

sudo chown albert:GroupA myfile
选项 描述
-R 递归地更改目录及其下所有文件的所有者。
-v 显示更改。

仅更改所有者用户

sudo chown albert file

仅修改所有者组

sudo chown :GroupA file

更改用户和所有者组

sudo chown albert:GroupA file

在下面的示例中,指定的组将是指定用户的首要组。

sudo chown albert: file

更改目录中所有文件的所有者和组

sudo chown -R albert:GroupA /dir1

chgrp 命令

chgrp 命令允许您更改文件的所有者组。

chgrp [-R] [-v] group file

示例

sudo chgrp group1 file
选项 描述
-R 递归地更改目录及其下所有文件的所属组。
-v 显示更改。

注意

可以根据另一个文件的所有者和所有者组来应用到文件。

chown [options] --reference=RRFILE FILE

例如

chown --reference=/etc/groups /etc/passwd

访客管理

gpasswd 命令

gpasswd 命令允许管理组。

gpasswd [option] group

示例

$ sudo gpasswd -A alain GroupA
[alain]$ gpasswd -a patrick GroupA
选项 描述
-a USER 将用户添加到组。对于添加的用户,该组是附加组。
-A USER,... 设置管理员用户的列表。
-d USER 将用户从组中移除。
-M USER,... 设置组的成员列表。

gpasswd -M 命令起到修改作用,而不是添加作用。

# gpasswd GroupeA
New Password:
Re-enter new password:

注意

除了使用 gpasswd -a 将用户添加到组之外,您还可以使用前面提到的 usermod -Gusermod -aG

id 命令

id 命令显示用户的组名。

id USER

示例

$ sudo id alain
uid=1000(alain) gid=1000(GroupA) groupes=1000(GroupA),1016(GroupP)

newgrp 命令

newgrp 命令可以选择用户附加组中的一个作为用户新的临时主组。newgrp 命令每次切换用户的主组时,都会有一个新的子 Shell(子进程)。请注意!子 Shellsub shell 是不同的。

newgrp [secondarygroups]

示例

$ sudo useradd test1
$ sudo passwd test1
$ sudo groupadd groupA ; sudo groupadd groupB 
$ sudo usermod -G groupA,groupB test1
$ id test1
uid=1000(test1) gid=1000(test1) groups=1000(test1),1001(groupA),1002(groupB)
$ echo $SHLVL ; echo $BASH_SUBSHELL
1
0

$ su - test1
$ touch a.txt
$ ll
-rw-rw-r-- 1 test1 test1 0 10月  7 14:02 a.txt
$ echo $SHLVL ; echo $BASH_SUBSHELL
1
0

# Generate a new child shell
$ newgrp groupA
$ touch b.txt
$ ll
-rw-rw-r-- 1 test1 test1  0 10月  7 14:02 a.txt
-rw-r--r-- 1 test1 groupA 0 10月  7 14:02 b.txt
$ echo $SHLVL ; echo $BASH_SUBSHELL
2
0

# You can exit the child shell using the `exit` command
$ exit
$ logout
$ whoami
root

安全设置

passwd 命令

passwd 命令管理密码。

passwd [-d] [-l] [-S] [-u] [login]

示例

sudo passwd -l albert

sudo passwd -n 60 -x 90 -w 80 -i 10 patrick
选项 描述
-d 永久删除密码。仅供 root (uid=0) 使用。
-l 永久锁定用户账户。仅供 root (uid=0) 使用。
-S 显示账户状态。仅供 root (uid=0) 使用。
-u 永久解锁用户账户。仅供 root (uid=0) 使用。
-e 永久使密码过期。仅供 root (uid=0) 使用。
-n DAYS 定义密码的最小生命周期。永久更改。仅供 root (uid=0) 使用。
-x DAYS 定义密码的最大生命周期。永久更改。仅供 root (uid=0) 使用。
-w DAYS 定义过期前的警告时间。永久更改。仅供 root (uid=0) 使用。
-i DAYS 定义密码过期后禁用账户的延迟时间。永久更改。仅供 root (uid=0) 使用。

使用 password -l,即在 /etc/shadow 中对应用户的密码字段开头添加 "!!"。

示例

  • Alain 更改他的密码
[alain]$ passwd
  • root 更改 Alain 的密码
sudo passwd alain

注意

登录到系统的用户可以使用 passwd 命令更改自己的密码(此过程需要请求用户的旧密码)。root (uid=0) 用户可以更改任何用户的密码。

更改密码需要遵守规定的安全策略,这涉及到 PAM(Pluggable Authentication Modules)知识。

通过 shell 脚本管理用户账户时,在创建用户后设置一个默认密码可能很有用。

这可以通过将密码传递给 passwd 命令来完成。

示例

sudo echo "azerty,1" | passwd --stdin philippe

警告

密码以明文形式输入,passwd 会对其进行加密。

chage 命令

chage 命令用于更改用户密码过期信息。

chage [-d date] [-E date] [-I days] [-l] [-m days] [-M days] [-W days] [login]

示例

sudo chage -m 60 -M 90 -W 80 -I 10 alain
选项 描述
-I DAYS 定义密码过期后禁用账户前的延迟天数。永久更改。
-l 显示策略详情。
-m DAYS 定义密码的最小生命周期。永久更改。
-M DAYS 定义密码的最大生命周期。永久更改。
-d LAST_DAY 定义上次更改密码以来的天数。可以使用天数时间戳格式或 YYYY-MM-DD 格式。永久更改。
-E EXPIRE_DATE 定义账户过期日期。可以使用天数时间戳格式或 YYYY-MM-DD 格式。永久更改。
-W WARN_DAYS 定义过期前的警告天数。永久更改。

示例

# The `chage` command also offers an interactive mode.
$ sudo chage philippe

# The `-d` option changes the password when logging in.
$ sudo chage -d 0 philippe

User account management with chage

高级管理

配置文件

  • /etc/default/useradd
  • /etc/login.defs
  • /etc/skel

注意

编辑 /etc/default/useradd 文件是通过 useradd 命令完成的。

其他文件需要使用文本编辑器进行修改。

/etc/default/useradd 文件

此文件包含默认数据设置。

技巧

如果创建用户时未指定选项,系统将使用 /etc/default/useradd 中定义的默认值。

此文件由 useradd -D 命令修改(不带其他选项的 useradd -D 会显示 /etc/default/useradd 文件的内容)。

Shell > grep -v ^# /etc/default/useradd 
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
参数 注释
GROUP 定义默认首要组 GID。
HOME 定义普通用户主目录的上一级目录路径。
INACTIVE 定义密码过期后的宽限天数。对应/etc/shadow文件的第 7 字段。-1值表示宽限期功能关闭。
EXPIRE 定义账户过期日期。对应/etc/shadow文件的第 8 字段。
SHELL 定义命令解释器。
SKEL 定义登录目录的骨架目录。
CREATE_MAIL_SPOOL 定义在/var/spool/mail/中创建邮箱。

如果您在创建用户时不希望拥有同名的首要组,可以这样做:

Shell > useradd -N test2
Shell > id test2
uid=1001(test2) gid=100(users) groups=100(users)

注意

GNU/Linux 有两种组机制:

  1. 公共组,其首要组为 GID=100
  2. 私有组,即添加用户时,创建一个与其同名的组作为其首要组。这种组机制通常被 RHEL 及其相关发行版使用。

/etc/login.defs 文件

# Comment line ignored
shell > cat  /etc/login.defs
MAIL_DIR        /var/spool/mail
UMASK           022
HOME_MODE       0700
PASS_MAX_DAYS   99999
PASS_MIN_DAYS   0
PASS_MIN_LEN    5
PASS_WARN_AGE   7
UID_MIN                  1000
UID_MAX                 60000
SYS_UID_MIN               201
SYS_UID_MAX               999
GID_MIN                  1000
GID_MAX                 60000
SYS_GID_MIN               201
SYS_GID_MAX               999
CREATE_HOME     yes
USERGROUPS_ENAB yes
ENCRYPT_METHOD SHA512

UMASK 022:这意味着创建文件的权限是 755 (rwxr-xr-x)。然而,出于安全考虑,GNU/Linux 对新创建的文件没有x权限。此限制适用于 root(uid=0) 和普通用户(uid>=1000)。例如:

Shell > touch a.txt
Shell > ll
-rw-r--r-- 1 root root     0 Oct  8 13:00 a.txt

HOME_MODE 0700:普通用户家目录的权限。不适用于 root 的家目录。

Shell > ll -d /root
dr-xr-x---. 10 root root 4096 Oct  8 13:12 /root

Shell > ls -ld /home/test1/
drwx------ 2 test1 test1 4096 Oct  8 13:10 /home/test1/

USERGROUPS_ENAB yes:“当您使用 userdel -r 命令删除用户时,相应的首要组也会被删除。”为什么?这就是原因。

/etc/skel 目录

当用户被创建时,他们的家目录和环境变量文件会被创建。您可以将/etc/skel/目录中的文件视为创建用户所需的模板文件。

这些文件会自动从/etc/skel目录复制。

  • .bash_logout
  • .bash_profile
  • .bashrc

放置在此目录下的所有文件和目录都会在创建用户时被复制到用户的树中。

身份切换

su 命令

su 命令允许您更改已连接用户的身份。

su [-] [-c command] [login]

示例

$ sudo su - alain
[albert]$ su - root -c "passwd alain"
选项 描述
- 加载用户的完整环境。
-c command 以用户的身份执行命令。

如果未指定登录名,则默认为root

普通用户需要输入新身份的密码。

技巧

您可以使用 exit/logout 命令退出已切换的用户。需要注意的是,切换用户后,不会产生新的child shellsub shell,例如:

$ whoami
root
$ echo $SHLVL ; echo $BASH_SUBSHELL
1
0

$ su - test1
$ echo $SHLVL ; echo $BASH_SUBSHELL
1
0

请注意!susu - 是不同的,如下例所示:

$ whoami
test1
$ su root
$ pwd
/home/test1

$ env
...
USER=test1
PWD=/home/test1
HOME=/root
MAIL=/var/spool/mail/test1
LOGNAME=test1
...
$ whoami
test1
$ su - root
$ pwd
/root

$ env
...
USER=root
PWD=/root
HOME=/root
MAIL=/var/spool/mail/root
LOGNAME=root
...

因此,当您想要切换用户时,请记住不要丢失-。因为必要的环境变量文件没有被加载,运行某些程序可能会出现问题。