如何在Linux中添加、修改和删除用户?

在任何操作系统中,用户管理是系统管理员的基本日常任务之一。

对于基于Linux的操作系统,通常涉及创建用户账户,修改现有账户,如更改其主目录、默认shell,锁定/解锁一个或多个账户,以及删除用户账户。

在我们研究执行这些任务的命令和过程之前,让我们简要介绍一下如何在Linux中对用户账户进行分类。此外,请注意,除非明确指定,否则给出的命令将适用于大多数常见的Linux发行版。

用户类型

Root用户

root用户是具有执行操作的所有权限的操作系统管理员。通常,只有root可以安装/卸载或更新基本系统程序和库。它是唯一具有系统范围特权的用户账户。

因此,root用户是系统中权限最高的用户。

特殊用户

这些是没有登录的用户。他们没有root用户的所有特权。根据账户的不同,它们承担不同的专门角色。

这些账户在安装任何应用程序时会自动创建。 binsynclpmailoperatorsquid是特殊用户的一些示例。

普通用户

普通用户只在其工作目录中(通常是其家目录)具有完全权限。他们没有管理系统或安装软件的权限。除非通过sudo获得特殊权限,否则他们无法执行这些任务。

添加用户

Debian/Ubuntu

在基于Debian或Ubuntu的系统上,有几种选项可以通过CLI添加用户。第一个命令是adduser,它是一个Perl脚本,并在后台使用useradd命令,我们稍后会看到其用法。

由于添加用户是一个特权任务,您需要使用sudo作为前缀,并将username作为参数。其他详细信息可以按提示指定。除了用户名和密码,其余详细信息都是可选的。我们可以通过使用id命令来验证用户是否已被创建。

$ sudo adduser johndoe
Adding user `johndoe' ...
Adding new group `johndoe' (1003) ...
Adding new user `johndoe' (1003) with group `johndoe' ...
Creating home directory `/home/johndoe' ...
Copying files from `/etc/skel' ...
New password:
Retype new password:
passwd: password updated successfully
Changing the user information for johndoe
Enter the new value, or press ENTER for the default
        Full Name []: John Doe
        Room Number []:
        Work Phone []:
        Home Phone []:
        Other []:
Is the information correct? [Y/n] Y
$
$ id johndoe
uid=1003(johndoe) gid=1003(johndoe) groups=1003(johndoe)
$

CentOS/RHEL/Fedora (包括Debian/Ubuntu)

下一个命令useradd将适用于基于RHEL的操作系统发行版,并且在Ubuntu/Debian主机上同样适用。创建新用户的最简单语法(不带任何额外选项)如下所示:

$ sudo useradd 

示例:

$ sudo useradd janedoe

useradd命令支持多个选项,可以在创建用户时指定,最常见的是用户ID(UID),组ID(GID),默认shell和家目录等。下面是一个示例:

$ sudo useradd -s /bin/sh -d /data/newhome -c "Jane Doe" -u 1005 janedoe

可以使用id命令验证新创建的用户:

$ id janedoe
uid=1005(janedoe) gid=1005(janedoe) groups=1005(janedoe)
$

修改用户

根据组织需求、用户请求或系统迁移,通常需要修改现有用户的某些属性。尽管大多数这些属性很容易修改,但我们需要确保它们对用户环境和用户拥有或访问的文件的访问方式产生的影响。

默认Shell

默认Shell是用户在本地或通过链接_0启动新的CLI会话时创建的CLI Shell。大多数现代系统都有一个默认的用户Bash,尽管它可能会根据Linux发行版或用户的环境而有所变化。要修改用户的默认Shell,请使用以下命令:

$ sudo usermod -s <shell> <username>

示例:

$ getent passwd janedoe
janedoe:x:1005:1005::/data/newhome:/bin/sh
$ sudo usermod -s /bin/bash janedoe
$ getent passwd janedoe
janedoe:x:1005:1005::/data/newhome:/bin/bash
$

如上输出所示,已将用户janedoe的Shell从/bin/sh更改为/bin/bash。

主目录

与默认Shell类似,可以使用以下命令将用户的主目录修改为其他位置:

$ sudo usermod -d <new_directory_path> <username>

在下面的示例中,将用户janedoe的主目录更改为/data/janedoe:

$ getent passwd janedoe
janedoe:x:1005:1005::/data/newhome:/bin/bash
$ sudo usermod -d /data/janedoe janedoe
$ getent passwd janedoe
janedoe:x:1005:1005::/data/janedoe:/bin/bash
$

在切换之前,请确保新目录具有正确的所有权和权限。否则,用户在登录或在新主目录中工作时可能会遇到问题。

用户ID

可以使用以下命令更改现有用户的用户ID:

$ sudo usermod -u <new_uid> <username>

示例:

$ getent passwd janedoe
janedoe:x:1005:1005::/data/janedoe:/bin/bash
$ sudo usermod -u 1010 janedoe
$ getent passwd janedoe
janedoe:x:1010:1005::/data/janedoe:/bin/bash
$

再次强调,更改UID会更改Linux文件系统将所有权和权限映射到文件或目录的方式。请确保将用户的主目录及其内容以及系统中的所有其他文件(原始UID为旧UID的文件)更改为映射的UID。否则,用户在CLI会话和文件访问时可能会遇到问题。

默认组

默认组通常是用户的默认组ID,在用户创建时会自动创建,除非指定了其他GID。Linux还允许使用usermod命令修改用户的默认组。以下是使用的语法:

$ sudo usermod -g <new_gid or group_name> <username>

以下是一个示例:

$ getent passwd janedoe
janedoe:x:1010:1005::/data/janedoe:/bin/bash
$ sudo usermod -g 1001 janedoe
$ getent passwd janedoe
janedoe:x:1010:1001::/data/janedoe:/bin/bash
$

同样,确保新的组ID在用户的主目录、内容以及所有其他适用的文件或目录上设置,以正确迁移其所有权和权限。

添加/删除组

除了默认组外,Linux中的用户可以是辅助组的一部分。我们始终可以使用usermod命令添加或删除用户所属的其他组。

$ sudo usermod -a -G <group_id or group_name> <username>

示例:

同样地,要从其中一个辅助组中删除用户,请使用以下命令gpasswd

$ sudo gpasswd -d  

例子:

$ id janedoe
uid=1005(janedoe) gid=1005(janedoe) groups=1005(janedoe),1001(docker)
$ sudo gpasswd -d janedoe docker
Removing user janedoe from group docker
$ id janedoe
uid=1005(janedoe) gid=1005(janedoe) groups=1005(janedoe)
$

GECOS备注

/etc/passwd中的GECOS字段包含用户信息或备注。我们可以修改现有用户的此信息:

$ sudo usermod -c  

例子:

$ getent passwd janedoe
janedoe:x:1005:1005::/data/janedoe:/bin/bash
$ sudo usermod -c "Jane Doe - System Admin" janedoe
$ getent passwd janedoe
janedoe:x:1005:1005:Jane Doe - System Admin:/data/janedoe:/bin/bash
$

请注意,如果您的备注或用户详细信息包含空格,请使用引号将该字段括起来,就像上面的例子一样。

登录名

可以使用usermod命令使用-l标志更改用户的登录名:

$ sudo usermod -l  

例子:

$ id janedoe
uid=1005(janedoe) gid=1005(janedoe) groups=1005(janedoe)
$ sudo usermod -l jane_doe janedoe
$ id jane_doe
uid=1005(jane_doe) gid=1005(janedoe) groups=1005(janedoe)
$

记得根据新的用户名更新用户引用。即使在像id这样的命令中,也应该指定新用户名。

删除用户

可以使用userdel命令从Linux中删除用户。

$ sudo userdel 

例子:

$ id janedoe
uid=1005(janedoe) gid=1005(janedoe) groups=1005(janedoe)
$ sudo userdel janedoe
$ id janedoe
id: ‘janedoe’: no such user
$

要同时删除用户的家目录和邮件存储,也可以添加-r标志。

$ sudo userdel -r 

特别针对基于Ubuntu的系统,您还可以使用deluser命令删除用户:

$ sudo deluser 

同样,要同时删除家目录和邮件存储,请使用:

$ sudo deluser --remove-home 

有关详细信息和其他支持的选项,请参考各个命令的主页面:

$ man adduser
$ man useradd
$ man usermod
$ man deluser
$ man userdel

结论

本文介绍了Linux系统中用户管理的各个方面。这包括对各类用户的解释以及如何添加和删除用户。还涵盖了各种选项,可以帮助修改现有用户的参数。虽然它没有涵盖各种命令支持的所有可能性,但它涵盖了系统管理员在日常工作中会遇到的许多常见管理任务。

您可能还感兴趣阅读:如何xxxx。

类似文章