Josh Asked: 2020-07-10 11:32:17 +0800 CST2020-07-10 11:32:17 +0800 CST 2020-07-10 11:32:17 +0800 CST /usr/sbin/sshd -R 是什么? 772 我最近在 IDS 日志中看到了一件奇怪的事情。这是一份传出连接的报告,显示父进程为/usr/sbin/sshd -R. 我知道 (client) 用于远程端口转发的-R参数ssh,但从未见过daemon-R的选项。sshd 中没有-R出现man sshd。这个论点有什么作用? linux ssh 1 个回答 Voted Best Answer Josh 2020-07-10T11:32:17+08:002020-07-10T11:32:17+08:00 查看源代码,这-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; }
查看源代码,这
-R
是一个未记录的标志,SSHD 使用它来向子进程指示它已被重新执行以重新初始化随机缓冲区等。从这个答案中引用Jenny D到“为什么 sshd 需要绝对路径?” :
被
-R
添加到命令行参数的副本中,当sshd
将重新执行时: