如何列出Linux系统上的所有用户

了解谁有权访问您的 Linux PC(并控制您的文件)非常重要,但您可以轻松列出 Linux 中的用户来查找。就是这样。

Linux操作系统提供了创建和删除用户以及检查哪些用户已登录的命令。但是,系统上没有用于列出已登录或未登录用户的命令。

尽管如此,还是有几种方法可以实现这一目标。如果您想了解如何在 Linux 中列出用户,请按照以下步骤操作。

为什么你应该检查你的 Linux 用户列表

您可能出于多种原因想要列出 Linux 中的用户。例如,在查找和删除未使用的帐户方面,这是一种很好的做法。从安全角度来看,这也是确保没有入侵者创建用户帐户的好方法。

这是一项管理任务,您可能应该每月至少执行一次。如果您正在运行企业 Linux 服务器,您可能需要更频繁地执行此操作。

/etc/passwd 中列出的用户

所有 Linux 服务器的用户帐户在文件/etc/passwd中都有条目。每行代表一个用户,并有七个用冒号分隔的字段。这些字段提供有关用户的信息。

  • 用户名。
  • 加密密码(x表示密码实际上在/etc/shadow中)
  • 用户 ID 号 (UID)。
  • 用户的组 ID 号 (GID)。
  • 用户的全名(如果列出)。
  • 用户主目录。
  • 登录外壳

因此,我们找到了一种列出 Linux 上所有用户的方法。您可以使用less命令一次一屏地查看整个文件。

less /etc/passwd

如果你想检查 Linux 系统中是否存在特定用户,那么grep命令是一个很好的用途:

less passwd | grep jeff

如果您没有得到任何输出,则该用户在 Linux 服务器上不存在。

尽管如此,这仍然是很多信息。您可以将其缩减为仅用户名,例如,使用 awkcut命令

awk -F: '{print $1}' /etc/passwd
cut -d: -f1 /etc/passwd

这往往更容易理解,但它仍然让您查看与人类用户混合在一起的所有基于系统的用户帐户。

如何使用 getent 列出用户

另一个命令getent更有用。它显示服务器的/etc/nsswitch.conf文件中配置的任何数据库中的条目。其中之一是passwd数据库。要使用getent显示所有 Linux 用户的列表,其工作原理如下:

getent passwd

输出看起来与使用less命令完全相同,但列出了 Linux 系统上的所有 LDAP 用户。我们的awkcut命令再次只能帮助查看第一个字段,即用户名。

如果你想检查 Linux 系统中是否存在某个特定用户,getent可以轻松实现:

getent passwd jeff

同样,此命令的输出不会告诉您该用户不存在。

getent的另一个很棒的用途是找出服务器上存在多少个用户帐户。这是通过wc命令管道getent的输出来完成的,如下所示:

getent passwd | wc -l

可以看到,我的Linux系统一共有48个账户。非常有趣,因为我是唯一使用它的人,但这只是显示了 Linux 中创建了多少系统帐户。

从普通用户中剔除系统用户

在Linux 看来,系统用户和人类用户没有区别。每当您安装操作系统时,它都会创建许多系统用户。其他系统用户是为各种软件包创建的,例如网络或邮件服务软件。

那么,如何才能只列出 Linux 系统上的常规人类用户呢?这里的关键是要理解,当您创建普通用户时,它的 UID 被分配在一定的数字范围内。通过检查 /etc/login.defs 文件我们可以确定普通用户帐户可用的 UID 值的范围。

grep -E '^UID_MIN|^UID_MAX' /etc/login.defs

根据输出,我知道普通用户的 UID 应该在 1000 到 60000 之间。据此,我可以构造一个仅显示普通用户的getent查询。

getent passwd {1000..60000}

请记住,即使getent显示其输出后,它也会显得挂起。您可以按Ctrl-C结束该过程,或等待其完成。通常需要不到 15 秒即可完成对passwd数据库的搜索。

此命令的更通用版本考虑了不同服务器可能使用的不同UID_MINUID_MAX值。

eval getent passwd {$(awk '/^UID_MIN/ {print $2}' /etc/login.defs)..$(awk '/^UID_MAX/ {print $2}' /etc/login.defs)}

在该命令中,我们利用了 Linux 一次执行多项操作的能力。awk命令获取UID_MINUID_MAX值,然后在getent命令中使用它们。

现在,假设我们只需要用户名。我们再次通过cut命令传输输出,如下所示:

eval getent passwd {$(awk '/^UID_MIN/ {print $2}' /etc/login.defs)..$(awk '/^UID_MAX/ {print $2}' /etc/login.defs)} | cut -d: -f1

此命令可能需要 10 到 15 秒才能完成,因此请耐心等待。

有效管理您的 Linux 用户

跟踪 Linux 系统上存在哪些用户帐户非常重要。当您知道员工已离职时,请及时删除其用户帐户。定期列出您的 Linux 用户将有助于确保您捕获任何可能滞留的帐户。

同时,请务必掌握密码安全策略并鼓励用户定期更改密码。

赞(0)
未经允许不得转载:回忆主机 » 如何列出Linux系统上的所有用户