当我启动 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