在这篇文章中,您将了解如何在 Linux 中列出用户。除此之外,你还会了解有关Linux用户特征的其他技巧。
Linux中有两种类型的用户,系统用户是系统默认创建的。另一方面,还有一些由系统管理员创建的普通用户,可以登录系统并使用系统。
什么文件包含 Linux 上的用户列表?
在开始列出用户之前,我们需要知道这些用户在Linux上保存在哪里?
用户存储在系统上称为 passwd 文件的文本文件中。该文件位于 /etc 目录中。
该文件位于以下路径:
$ /etc/passwd
在这个文件中,您可以找到系统中用户的所有信息。
列出所有用户
列出用户是管理用户的第一步。这样,我们就能知道他们有多少人以及他们是谁。在Linux中,几乎所有事情都可以通过各种方式完成,这也不例外。
要列出所有用户,您可以使用猫命令:
$ cat /etc/passwd
正如您在图片中看到的,有有关用户的所有信息。
1- 在第一个字段中,您将看到用户名。
2- 第二个字段(x 字符)是加密密码的表示。加密后的密码存储在 /etc/shadow 文件中。
3- UID 或用户ID。
4- 下一个字段指的是用户的主要组。
5-然后,它显示用户 ID 信息,例如地址、电子邮件等。
6-之后,您将看到用户的主目录。
7- 最后一个字段是该用户使用的 shell。
然而,虽然这些信息非常有用,但如果您只想以基本方式列出用户名,则可以使用以下命令:
$ cut -d: -f1 /etc/passwd
现在我们只需打印文件的第一个字段即可获得名称。
按名称列出和排序用户
上述命令的目的是列出 Linux 上的用户。但是按字母顺序列出用户怎么样?
为此,我们将使用前面的命令,但我们将添加排序命令。
所以,命令将是这样的:
$ cut -d: -f1 /etc/passwd | sort
正如您在图片中看到的,用户已排序。
Linux 列出没有密码的用户
了解没有密码的用户并采取适当的措施非常重要。要列出没有密码的用户,只需使用以下命令:
$ sudo getent shadow | grep -Po '^[^:]*(?=:.?:)'
使用过的regex将列出所有没有密码的用户。
按磁盘使用情况列出用户
如果你有一个大目录并且你想知道哪个用户正在淹没它,你可以使用 du 命令来获取磁盘使用情况。
这样,您可以检测哪些用户正在滥用磁盘空间。
为此,使用以下命令就足够了:
$ sudo du -smc /home/* | sort -n
这样,您将按照 /home 目录的磁盘使用情况对用户进行排序。
我们使用排序命令的 -n 来按数字对输出进行排序。
列出当前登录的用户
要列出当前登录的用户,我们有多种方法可以实现。第一种方法我们可以使用 users 命令:
$ users
它将列出系统中具有打开会话的用户。
但这些信息有点基础;但是,我们还有另一个命令可以提供更多详细信息。该命令很简单:w。
$ w
通过这个命令,我们可以获得更多信息,例如会话启动的确切时间以及他可用的终端会话。
最后,还有一个命令叫who。它可供整个 Unix 系列使用。所以你可以在 FreeBSD 等其他系统上使用它。
$ who
通过 who 命令,我们还可以获得有关当前登录用户的一些信息。当然,我们可以添加选项 -a 并显示所有详细信息。
$ who -a
这样,您就可以了解有关登录用户的一切。
Linux最近登录系统的用户列表
我们看到了如何获取当前登录的用户,那么列出用户的登录历史怎么样呢?
您可以使用最后一个命令来获取有关所发生的登录的更多信息:
$ last
或者特定用户的登录信息
$ last [username]
例如:
$ last angelo
这些是用户登录活动及其开始时间和持续时间。
列出用户在特定日期或时间的登录情况
列出用户在特定日期或时间的登录情况怎么样?为了实现这一点,我们使用最后一个命令,但带有 -t 参数:
$ last -t YYMMDDHHMMSS
例如:
$ last -t 20190926110509
现在,您所要做的就是选择一个确切的日期和时间来列出当时登录的人员。
列出组中的所有用户
在 Linux 中列出组成员的方法有两种,最简单、最直接的方法是从 /etc/group 文件中获取用户,如下所示:
$ cat /etc/group | grep likegeeks
此命令将列出 likegeeks 组中的用户。
另一种方法是使用类似基于 Debian 的发行版中的 Members 命令的命令。但是,Linux 发行版中并未默认安装它。
要在 Ubuntu / Linux Mint 中安装它,只需使用 APT:
$ sudo apt install members
或者对于 CentOS:
$ sudo dnf install members
安装后,您可以运行命令,然后输入要列出用户的组的名称:
$ members [group_name]
例如:
$ members avahi
这样,您可以在基于 Debian 的发行版中列出某个组的用户。像 CentOS 这样基于 RedHat 的发行版怎么样?
您可以使用以下命令:
$ getent group likegeeks
列出具有 UID 的用户
在 Unix 系统中,每个用户都有一个用户标识符或 ID。它用于管理操作系统内部的帐户。
一般来说,0到1000的UID是系统用户的。此后适用于普通用户。在 Unix 系统上,UID 为零始终属于 root 用户(您可以拥有多个 UID 为零的用户)。
现在,我们将使用以下命令列出用户及其各自的 UIDAwk.
执行该任务的命令如下:
$ awk -F: '{printf "%s:%s\n",$1,$3}' /etc/passwd
正如您所看到的,每个用户都有他的 UID。
列出 root 用户
在像Linux这样的类Unix系统中,通常只有一个root用户。如果有很多,如何列出?
为此,我们可以使用以下命令:
$ grep 'x:0:' /etc/passwd
在这里,我们过滤文件以获取 UID 为零的用户(root 用户)。
另一种方法是检查 /etc/group 文件:
$ grep root /etc/group
在这里,我们从 /etc/group 文件获取组 root 中的用户。
另外,您可以通过检查 /etc/sudoers 文件来检查是否有任何用户可以以 root 身份执行命令:
$ cat /etc/sudoers
获取用户总数
要获取 Linux 中的用户总数,您可以使用 wc 命令计算 /etc/passwd 文件中的行数,如下所示:
$ cut -d: -f1 /etc/passwd | wc -l
伟大的! 43 个用户。但这包括系统用户和普通用户。只获取普通用户数量怎么样?
简单的!由于我们从上面知道普通用户的 UID 为 1000 或更大,因此我们可以使用 Awk 来获取它们:
$ awk -F: '$3 >= 1000 {print $1}' /etc/passwd
Cool!
列出 sudo 用户
Linux 系统有一个名为 sudo 的实用程序,它允许您像另一个用户(通常是 root 用户)一样执行命令。
这应该在专业环境中谨慎处理。
此外,了解哪些用户可以运行 sudo 命令也非常重要。为此,列出属于 sudo 组的用户就足够了。
$ members sudo
该组中的用户可以作为超级用户执行命令。
列出具有 SSH 访问权限的用户
SSH 允许用户通过网络访问远程计算机。它非常安全,是作为 Telnet 的替代品而诞生的。
默认情况下,所有普通用户都可以登录并使用 SSH。如果要限制这一点,可以使用 SSH 配置文件 (/etc/ssh/ssh_config) 并添加以下指令:
AllowUsers user1 user2 user3
此外,您可以仅使用AllowGroups指令来允许组而不是允许用户:
AllowGroups group1 group2 group3
这些指令定义了谁可以访问该服务。不要忘记重新启动 SSH 服务。
列出对文件或目录具有权限的用户
我们可以通过两种方式授予多个用户访问或修改文件和目录的权限。
第一种方法是将用户添加到文件或目录的组中。
这样,我们可以使用成员实用程序列出组成员,如上所示。
好的,但是如果我们只想让该用户只能访问该特定文件(而不是所有组权限)怎么办?
这里我们可以设置ACL对于此文件,使用 setfacl 命令,如下所示:
$ setfacl -m u:newuser:rwx myfile
这里我们给名为newser的用户对名为myfile的文件赋予读、写、执行的权限。
现在该文件可以由所有者访问或修改,用户称为 newuser。那么如何列出它们呢?
我们可以使用 getfacl 命令列出它们,如下所示:
$ getfacl myfile
该命令将列出所有拥有该文件权限的用户及其相应的权限。
列出锁定(禁用)的用户
在Linux中,作为一种安全措施,我们可以锁定用户。如果怀疑用户做错了事情,并且您不想完全删除该用户并只是锁定他进行调查,那么这是一种预防措施。
要锁定用户,可以使用以下命令:
$ usermod -L myuser
现在名为 myuser 的用户将无法再登录或使用系统。
要列出系统所有锁定的用户,只需使用以下命令:
$ cat /etc/passwd | cut -d : -f 1 | awk '{ system("passwd -S " $0) }' | grep locked
这将打印所有锁定的用户,包括系统用户。只列出普通用户怎么样?
正如我们在上面看到的,使用 Awk,我们可以像这样锁定普通用户:
$ awk -F: '$3 >= 1000 {print $1}' /etc/passwd | cut -d : -f 1 | awk '{ system("passwd -S " $0) }' | grep locked
好简单!
列出远程用户 (LDAP)
好的,现在可以列出所有系统用户(本地用户),但是远程用户或LDAP用户?嗯,我们可以使用像ldapsearch这样的工具,但是还有其他方法吗?
幸运的是,是的!您可以使用一个名为 getent 的命令列出本地和远程用户
$ getent passwd
此命令列出本地系统用户和 LDAP 或NIS用户或任何其他网络用户。
您可以以相同的方式将此命令的结果传输到任何上述命令。
此外, getent 命令可以列出组帐户,如下所示:
$ getent group
您可以查看该命令的手册页以了解该命令可以搜索的其他数据库。
结论
在 Linux 系统中列出用户很有趣!除此之外,我们还了解了一些有关用户以及如何以不同方式管理用户的技巧。
最后,这些知识将有助于更好地管理系统用户。
我希望您觉得本教程有用。继续回来。