我目前已登录我的 Linux 系统,我想在我的终端上输出我的 Linux 密码和用户名,我需要写什么命令,它存储在哪个文件中,以及如何检索它?
答案1
简而言之:你无法知道你的密码是什么。
虽然它存储在文件中/etc/shadow
,但它以一种称为哈希。这就像烤好的蛋糕与一组配料一样,没有办法将面粉从蛋糕中取出。
答案2
密码根本不存储在系统的任何地方。存储在/etc/shadow
所谓的哈希密码。
一些文本的哈希值是通过执行所谓的单向函数文本(密码)上,从而创建一个字符串来检查。从设计上讲,这是“不可能的”(计算上不可行) 来逆转该过程。
可以做的是尝试“暴力”攻击 - 通过散列很多可能的密码,直到结果等于找到的哈希值。没有其他方法,您无法计算与您拥有的哈希值匹配的文本(=密码)。
有几种创建哈希的算法,它们在复杂性、哈希长度、所谓的概率/可能性方面有所不同碰撞(两个不同的文本具有相同的哈希值,如果哈希值比原始文本短,则最终必定会发生这种情况)。
目前典型的算法包括
- MD5
- SHA-1(也称为 SHA)
两者都不应当再用于加密/安全目的!
- SHA-256
- SHA-512
- SHA-3(KECCAK 在 2012 年 10 月获联邦政府批准的新哈希算法竞赛中被宣布为获胜者)——尚未在 Ubuntu 中使用。
答案3
从其他答案中您知道您看不到密码。让我来解释一下原因。以正常形式存储密码的设计(称为明文)不是很安全(不仅对于操作系统而言),因为如果此类密码列表落入恶意人员手中,他可以立即登录,因为用户名列表通常很容易检索(在 Linux 中从/etc/passwd
文件中检索)。这就是为什么使用哈希函数的原因。这些是单向函数 - 您可以根据值创建哈希,但不能基于哈希创建值。如果恶意人员获得哈希值列表,他就无法从中检索实际密码(或者至少更困难),并且用户仍然可以登录 - 当他传递密码时,密码会被转换为哈希并与存储的值进行比较。
偶尔你会听说有人入侵了某个网站并获取了密码,或者某个密码列表在某处泄露。如果这些密码以纯文本形式存储,攻击者可以立即访问某些帐户。如果这些密码经过了哈希处理,攻击者必须先破解它们。这意味着他会遇到更多麻烦,并且需要更多时间做出反应,例如将密码更改为新密码。Linux(以及任何基于 Unix 的系统)都遵循这种设计,这就是为什么你不能以任何其他方式打印你的密码(除非你拥有 root 用户权限并可以读取/etc/shadow
文件)。
要打印您的用户名,请输入whoami
。