我在我的服务器上使用以下命令来创建种子:
cat /dev/urandom |tr -dc A-Z9|head -c${1:-81}
如果我复制输出然后关闭终端,创建的种子将完全无法恢复吗?我只是担心在某个时候可能访问我的服务器的人能够检查某种历史记录中的输出。
答案1
来自随机生成器的数据会经过几个地方。
它从内核开始。与任何其他随机生成器一样,内核中的随机生成器由确定性随机位生成器 (DRBG) 组成,该生成器由熵源播种。 Linux使用的DRBG具有回溯阻力,这意味着即使攻击者设法找出RNG在某个时刻的状态(这需要内核级访问),他们也无法计算出之前的状态,因此他们无法t 找到以前的输出。
内核不会保留传递给进程
cat
或稍后通过管道传递的数据的副本。一旦
cat
进程终止,其内存就会被释放回内核。释放的内存不会立即擦除:Linux 仅在将内存分发给进程之前擦除内存。 (这是因为分配时擦除比释放时擦除具有更好的性能。)因此,终止后数据可能仍会在 RAM 中保留一段时间cat
。获取这些数据需要内核级访问和一些取证技能,以便在可能数十万个候选者中找到内存中正确的页面。其他进程(tr
、 )也是如此head
。管道不会在任何地方保存它们的内存。数据直接从一个进程复制到另一个进程。
数据显示在终端上。它可能保存在终端仿真器内存中的某个位置。只要您可以滚动回它,它就肯定会被保存,并且稍后可能会在进程的内存中保留一个副本,具体取决于终端仿真器管理其内存的方式。要查找终端模拟器内存中的数据,需要访问您的帐户。
除非您特意记录了会话,否则终端上显示的数据不会存储在文件中。
数据也可能保留在视频存储器中(不是以文本形式,而是以在某个时刻显示的一组像素的形式)。没有擦除视频内存的机制,图像碎片有时会保留很长时间。检查视频内存需要内核级访问。
如果您使用剪贴板从终端复制数据,那么您必须担心剪贴板数据可能存储在哪里。副本可能会在 X 服务器的内存中保留一段时间,就像副本可能会保留在终端仿真器的内存中一样。找到该副本需要根级访问权限和严格的取证技能。
如果您有剪贴板管理器(可能作为桌面环境的一部分),那么您需要担心它可能在哪里存储剪贴板内容的历史记录。
总之,唯一的实际风险是您使用剪贴板管理器。
答案2
shell 命令的输出不存储在 shell 历史文件中。
除非您将输出保存到文件中,或者以某种方式记录完整的 shell 会话,否则该命令的结果将根本不会出现在您的系统上。