Linux 系统中的用户账户管理
在任何操作系统中,用户管理都是系统管理员日常工作中的一项重要任务。对于基于 Linux 的系统,这通常涉及到创建新的用户账户、修改现有账户的属性(例如更改主目录、默认 Shell、锁定/解锁账户以及删除用户账户)等操作。
在深入研究执行这些任务的命令和流程之前,我们先来简要了解一下 Linux 中用户账户的分类。需要注意的是,除非特别说明,本文中提到的命令在大多数主流 Linux 发行版中都适用。
用户类型
根用户 (root user)
根用户是操作系统的超级管理员,拥有执行任何操作的全部权限。通常,只有根用户才能安装、卸载或更新基础系统程序和库。根用户是系统中唯一具有系统级权限的用户账户。因此,根用户是系统中权限最高的用户。
特殊用户 (special user)
这些用户通常不直接用于登录,它们不具备根用户的所有权限。根据账户的不同,它们承担着不同的专门角色。这些账户通常在安装某些应用程序时自动创建,例如 bin、sync、lp、mail、operator 和 squid 等。
普通用户 (regular user)
普通用户仅在自己的工作目录(通常是其主目录)中拥有完全权限。他们没有管理系统或安装软件的权限。除非通过 sudo 命令获取特殊权限,否则他们无法执行这些任务。
添加用户账户
Debian/Ubuntu 系统
在 Debian 或 Ubuntu 等基于 Debian 的系统上,有几种方法可以使用命令行 (CLI) 添加用户。最常用的命令是 adduser
,它是一个 Perl 脚本,在后台调用 useradd
命令。稍后我们将介绍 useradd
命令的用法。
由于添加用户是一项需要特权的任务,因此需要使用 sudo
作为前缀,并指定用户名作为参数。其他详细信息可以根据提示指定,除了用户名和密码外,其余详细信息都是可选的。我们可以使用 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 <username>
例如:
$ 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 是用户在本地或通过 SSH 启动新的命令行会话时使用的 Shell。大多数现代系统都将 Bash 作为默认 Shell,但这可能因 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 (UID):
$ 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 都已正确映射。否则,可能会导致用户在命令行会话和文件访问时出现问题。
默认组
默认组通常是用户在创建时被分配的组 ID (GID),除非指定了其他 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>
例如:
$ id janedoe
uid=1005(janedoe) gid=1005(janedoe) groups=1005(janedoe)
$ sudo usermod -a -G docker janedoe
$ id janedoe
uid=1005(janedoe) gid=1005(janedoe) groups=1005(janedoe),1001(docker)
$
要从某个辅助组中删除用户,请使用 gpasswd
命令,如下所示:
$ sudo gpasswd -d <username> <groupname>
例如:
$ 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 <comment> <username>
例如:
$ 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
$
请注意,如果您的注释或用户详细信息包含空格,请将该字段用引号括起来,如上面的示例所示。
登录名
可以使用带有 -l
标志的 usermod
命令来更改用户的登录名:
$ sudo usermod -l <new_username> <old_username>
例如:
$ 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 <username>
例如:
$ 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 <username>
对于基于 Ubuntu 的系统,还可以使用 deluser
命令来删除用户:
$ sudo deluser <username>
同样,要删除主目录和邮件假脱机,请使用:
$ sudo deluser --remove-home <username>
有关详细信息和其他支持的选项,请使用以下命令参考各个命令的帮助手册:
$ man adduser
$ man useradd
$ man usermod
$ man deluser
$ man userdel
结论
本文介绍了 Linux 系统中用户管理的各个方面,包括用户类型的分类、添加用户、删除用户以及修改现有用户参数的各种选项。虽然本文没有涵盖所有命令支持的全部可能性,但它涵盖了系统管理员在日常工作中会遇到的许多常见管理任务。
您可能还对以下文章感兴趣:如何在 Linux 中删除文件和目录?