任何操作系统中的用户管理都是系统管理员的基本日常任务之一。
对于基于 Linux 的操作系统,它通常涉及创建用户帐户、修改现有帐户(例如更改其主目录、默认 shell、锁定/解锁一个或多个帐户以及删除用户帐户)。
在我们研究执行这些任务的命令和进程之前,让我们简要地研究一下如何在 Linux 中对用户帐户进行分类。 另外,请注意,除非明确指定,否则给定的命令将在大多数常见的 Linux 发行版中工作。
目录
用户类型
根用户
root 用户是操作系统的管理员,具有执行操作的所有权限。 通常,只有 root 可以安装/卸载或更新基本的系统程序和库。 它是唯一具有系统范围权限的用户帐户。
因此,root 用户是系统中最强大的用户。
特殊用户
这些是没有登录的用户。 他们没有 root 用户的所有权限。 根据帐户,他们承担不同的专业角色。
这些是在任何应用程序安装时自动创建的。 bin、sync、lp、mail、operator、squid 是特殊用户的一些示例。
普通用户
普通用户仅在他们的工作目录(通常是他们的主目录)中拥有完全权限。 他们没有权限管理系统或安装软件。 如果没有通过 sudo 获得的特殊权限,他们就无法执行这些任务。
添加用户
Debian/Ubuntu
在基于 Debian 或 Ubuntu 的系统上,有几个选项可以从 CLI 添加用户。 第一个命令是 adduser,它是一个 Perl 脚本,在后端使用 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 是用户在本地或通过 SSH 启动新 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:
$ 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 映射。 不这样做可能会导致用户在 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>
例子:
$ 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 中删除文件和目录?