【问题标题】:Security question: Are NodeJS spawns logged anywhere?安全问题:NodeJS 生成是否记录在任何地方?
【发布时间】:2021-05-25 02:10:00
【问题描述】:

如果您在终端中运行命令,请说

rsync -avuP [SourcPath] [DestPath]

该命令将被登录,例如 .bash_history、.zsh_history、.bash_sessions 等。

所以如果你使用像 sshpass 这样众所周知的不安全的东西

sshpass -P password -p MySecetPassword [Some command requiring std input],也会被记录。

但是,当您在使用 Node JS 生成进程时执行等效操作时会发生什么?

passw = functionThatRetrievesPasswordSecurely();
terminalCmd = "sshpass";
terminalArgs = ["-P, "password", "-p", passw, "command", "requiring", "a", "password", "entry"];
spawn = require("child_process").spawn(terminalCmd, terminalArgs);
spawn.stdout.on("data", data => {console.log("stdout, no details"});
spawn.stderr.on("data", data => {console.log("stderr, no details"});
spawn.on("close", data => {console.log("Process complete, no details"});

terminalCmd 或 terminalArgs 是否记录在任何地方?

如果有,在哪里?

如果不是,这是使用 opf sshpass 的安全方式吗?

【问题讨论】:

    标签: node.js security spawn sshpass


    【解决方案1】:

    除非您通过记录参数创建了一个,否则没有特定于节点的历史文件供 exec 使用。可以有较低级别的操作系统日志记录来捕获此类数据,例如审核日志。

    在命令行上传递密码仍然被认为是最不安全的方式。 尝试 -f 传递文件或 -d 传递文件描述符(或者 ssh 密钥应该始终是第一个调用端口)

    man page 解释...

    -p 选项应该被认为是所有 sshpass 选项中最不安全的。所有系统用户都可以通过简单的“ps”命令在命令行中看到密码。 Sshpass 做了最小的尝试来隐藏密码,但是这样的尝试注定要在没有真正解决问题的情况下创造竞争条件。鼓励 sshpass 的用户使用其他一种更安全的密码传递技术。

    特别鼓励编写旨在以编程方式传递密码的程序的人使用匿名管道,并使用 -d 选项将管道的读取端传递给 sshpass。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-18
      • 1970-01-01
      • 1970-01-01
      • 2012-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多