如何列出“可登录”的用户?

如何列出“可登录”的用户?

当我启动 Ubuntu 时,会出现一个用户列表,我可以单击并输入密码登录。

我如何获取这些用户的列表?

我尝试/etc/passwd通过执行以下操作从文件中获取用户:

cut -d: -f1 /etc/passwd | sort -u

但是这个列表非常庞大,与初始登录屏幕上显示的小列表完全不同。

我还应该检查其他命令或文件吗?

答案1

使用创建的用户useradd的 UID 为 1000–60000,请参阅

$ grep "^UID_M*" /etc/login.defs
UID_MIN                  1000
UID_MAX                 60000

利用这些信息,我们可以筛选/etc/passwd出以下用户:

$ awk -F: '$3 >= 1000' /etc/passwd
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
dessert:x:1000:1000:dessert,,,:/home/dessert:/bin/bash
test:x:1001:1001:test,,,:/home/test:/bin/bash

-F:设置:为字段分隔符,并$3 >= 1000指示awk仅打印第三列包含等于或大于的值的行1000。现在我们只想要用户名,并且nobody与我们无关,因此让我们进一步修剪输出:

$ awk -F: '$3 >= 1000 && $1 != "nobody" {print $1}' /etc/passwd
dessert
test

现在我们还(&&)测试第一列不是(!=)字符串nobody并且只打印第一列(print $1)。

答案2

为了获取loginable用户,我们可以使用该/etc/passwd文件,因为每个大于且与配置设置不匹配的用户UID都会499出现/etc/lightdm/user.conf在登录屏幕上。因此这将获取这些用户:

cut -d: -f1-3 /etc/passwd | grep -E ".*:x:[0-9]{4,}" | grep -Ev "nobody"

或者使用awk@dessert建议的更简洁的代码

awk -F: '$3>999&&$1!="nobody" { print $1" "$3 }' /etc/passwd

Awk解释:

-F:: 用作:字段分隔符

$3>999&&$1!="nobody":返回匹配3rd大于999和第一个不匹配字符串的字段的值nobody

例如,用户nobody满足UID上述最低要求500,但在登录屏幕上看不到,因为其被列为user不应该出现在/etc/lightdm/users.conf

答案3

可登录用户必须具有有效的哈希密码。查看 /etc/shadow 文件中的第二个字段(以冒号 : 分隔),哈希很大,超过 60 个字符。只有 * 或 ! 的字段不能是登录用户。有趣的是,uuid 检查在 libvirt-qemu(64055 uuid)上使用不当,因此它会显示在登录屏幕上,即使它没有有效的哈希,也不能用作登录名。使用以下命令生成登录列表:

sudo egrep -v ":\*:|:\!:" /etc/shadow

相关内容