如何在 Linux 中列出用户

工具软件2年前 (2022)发布 1111
31 0 0

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

您可能希望在 Linux 中列出用户的原因有很多。就查找和删除未使用的帐户而言,这是一个很好的做法。从安全的角度来看,这也是确保您没有入侵者创建用户帐户的好方法。

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

/etc/passwd 中列出的用户

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

  • User name.
  • Encrypted password (x indicates the password is actually in /etc/shadow)
  • User ID number (UID).
  • User’s group ID number (GID).
  • Full name of the user, if listed.
  • User home directory.
  • Login shell

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

less /etc/passwd
如何在 Linux 中列出用户

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

less passwd | grep jeff
如何在 Linux 中列出用户

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

不过,这是很多信息。您可以将其缩减为仅用户名,例如,使用awkcut命令:

awk -F: '{print $1}' /etc/passwd
cut -d: -f1 /etc/passwd
如何在 Linux 中列出用户

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

如何使用 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 中列出用户

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

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

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

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

grep -E '^UID_MIN|^UID_MAX' /etc/login.defs
如何在 Linux 中列出用户

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

getent passwd {1000..60000}
如何在 Linux 中列出用户

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

此命令的更通用版本考虑了各种服务器可能使用的不同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

 

如何在 Linux 中列出用户

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

有效管理您的 Linux 用户

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

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

© 版权声明

相关文章