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

Jos*_*osh 28 linux ssh

我最近在 IDS 日志中看到了一个奇怪的东西。这是一个传出连接的报告,将父进程显示为/usr/sbin/sshd -R.

我知道的-R参数ssh(客户端)进行远程端口转发,但从来没有见过一个-R选项来sshd 守护

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

Jos*_*osh 39

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

这个答案中引用Jenny D到“为什么 sshd 需要绝对路径?”

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

以下是 3.9 发行说明中的​​引述:

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

-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;
    }
Run Code Online (Sandbox Code Playgroud)