/usr/sbin/sshd -R 是什么?

/usr/sbin/sshd -R 是什么?

最近我在 IDS 日志中看到了一件奇怪的事情。这是一份传出连接的报告,其中显示父进程为/usr/sbin/sshd -R

我知道(客户端)用于远程端口转发的-R参数ssh,但从未-R见过sshd 守护进程

-R中没有出现man sshd。这个论点起什么作用?

答案1

审阅源代码,这-R是一个未记录的标志,SSHD 使用它来向子进程指示它已被重新执行,以便重新初始化随机化缓冲区等。

引用珍妮D“为什么 sshd 需要绝对路径?”的答案

对于每个新连接,sshd 将重新执行自身,以确保为每个新连接重新生成所有执行时间随机化。为了让 sshd 重新执行自身,它需要知道自身的完整路径。

以下是 3.9 版发行说明中的​​一段引文:

让 sshd(8) 在接受新连接时重新执行自身。此安全措施可确保在主进程的整个生命周期内,所有执行时随机化都会为每个连接重新应用,而不是只应用一次。这包括 mmap 和 malloc 映射、共享库寻址、共享库映射顺序、ProPolice 和 StackGhost cookies(在支持此类功能的系统上)

添加-R到传递的命令行参数的副本中时sshd将重新执行自身:

    if (rexec_flag) {
        if (rexec_argc < 0)
            fatal("rexec_argc %d < 0", rexec_argc);
        rexec_argv = xcalloc(rexec_argc + 2, sizeof(char *));
        for (i = 0; i < (u_int)rexec_argc; i++) {
            debug("rexec_argv[%d]='%s'", i, saved_argv[i]);
            rexec_argv[i] = saved_argv[i];
        }
        rexec_argv[rexec_argc] = "-R";
        rexec_argv[rexec_argc + 1] = NULL;
    }

相关内容