命令替换和管道是否可以防止窥探者看到散列密码从进程 A 传递到 B?

信息安全 密码 linux 过程
2021-08-12 01:33:19

这与我最近的一个答案松散地相关我列出了 4 种在 Ubuntu 16.04 上通过mkpasswd和组合添加新用户的方法。useradd

  1. 命令替换:

    sudo -p ">" useradd -m -s /bin/bash -p $(mkpasswd --hash=SHA-512 "123" ) newusr 
    
  2. 单引号:

    sudo -p ">" useradd -m -s /bin/sh -p 'GVhvDY$vhw89D2X0bd2REQWE' newusr2
    
  3. 通过管道传递到xargs

    mkpasswd -m sha-512 'password1' | sudo -p '>' xargs -I % useradd -p % newuser1 
    
  4. 将反斜杠附加到每个 $

    useradd -m -s /bin/bash -p \$6\$5AfGzrQ9u\$r6Q7Vt6h8f2rr4TuW4ZA22m6/eoQh9ciwUuMDtVBX31tR3Tb0o9EB1eBdZ2L9mvT.pX3dIEfxipMoQ0LtTR3V1 newuser
    

在方法4和2的情况下,很明显哈希密码出现在进程列表中;这并不完全安全。但是,我对方法 3 和 1 很好奇。命令替换和管道是否可以防止恶意用户以某种方式获取散列密码?恶意用户可以以某种方式读取stdout或读取stdin任一命令吗?

1个回答

尽管该方法可能具有一些优点,但仍有多种方法可以截取密码。

bash 历史会以明文形式显示密码,makepasswd 命令可能会被破解,shell 可能会被破解等等。没有理由诚实地这样做。一般来说,攻击者能做什么很大程度上取决于他的权限,但我不会认为这些方法中的任何一种更安全/更不安全。据我所知,1 和 3 在安全性方面大致相同。管道可能看起来更好,因为它绕过了 shell,但 shell 已经有了纯文本密码,所以真的没有理由担心这一点。不过,我可能会选择管道。

PS:在makepasswd运行时,这两个可能仍然在进程列表中显示纯文本密码。