所以我的问题是,如果有linux用户名和密码,我该如何测试它是否是有效的帐户?

推荐答案

您可以使用影子文件验证给定密码对于给定用户名是否正确.

在大多数现代发行版中,哈希密码存储在shadow文件/etc/shadow中(只有root用户才能读取).作为root用户,从给定用户的阴影文件中提取行,如下所示:

cat /etc/shadow | grep username

你会看到这样的情况:

username:$1$TrOIigLp$PUHL00kS5UY3CMVaiC0/g0:15020:0:99999:7:::

用户名后面是1美元.这表明它是一个MD5散列.在那之后还有一美元,然后(在本例中)TrOIigLp后跟另一美元.TrOIigLp是盐.之后是散列密码,它是使用salt进行散列的——在本例中是PUHL00kS5UY3CMVaiC0/g0.

现在,您可以使用openssl使用相同的salt对给定密码进行哈希,如下所示:

openssl passwd -1 -salt TrOIigLp

在提示时输入给定的密码,openssl命令应该使用提供的salt计算MD5哈希,并且它应该与影子文件中的上述内容完全相同.上面命令中的-1用于MD5哈希.

Linux相关问答推荐

如何将数据从Linux内核中的块驱动程序持久存储到存储中?

在树莓派内核中找不到arch/arm/kernel/calls.S

有没有办法确定什么代码使 linux 共享对象inflating ?

如何使用正则表达式在 LINux 中查找具有不同结尾的多个文件?

如何用 Sed 替换 Match 后的 2 个连续行

如何使用该位置的相对路径在单个位置创建多个文件夹?

如何在 shell 脚本中只读取一个字符

如何找出哪个进程正在消耗等待 CPU(即 I/O 阻塞)

使用正则表达式时,Shell 'tar: not found in archive' 错误

在 cron 作业(job)中执行 PHP 脚本

如何在 UNIX 上的 $PATH 中转义冒号 (:)?

在 Linux/POSIX 系统上获取用户全名的最简单方法是什么?

如何 grep 精确的文字字符串(无正则表达式)

错误:ld.so:无法预加载对象 LD_PRELOAD:忽略

vscode 总是请求保存权限

从线程内Forking 是否安全?

bash中变量名后的2个逗号是什么意思?

用curl编译php,curl安装在哪里?

Linux shell 中的排序和唯一性

学习内核编程