Назад | Перейти на главную страницу

Что такое / usr / sbin / sshd -R?

Недавно я заметил любопытную вещь в логах IDS. Это был отчет об исходящем соединении, в котором родительский процесс отображался как /usr/sbin/sshd -R.

Я знаю о -R аргумент ssh (клиент) для переадресации удаленного порта, но никогда не видел -R вариант для sshd демон.

Нет -R появляется в man sshd. Что делает этот аргумент?

Обзор исходный код, то -R - это недокументированный флаг, который SSHD использует, чтобы указать дочернему процессу, что он был повторно выполнен для повторной инициализации буферов рандомизации и т. д.

Цитирование Дженни Д из этот ответ на вопрос «Почему sshd требует абсолютного пути?»:

Для каждого нового соединения sshd будет повторно запускаться, чтобы гарантировать, что все рандомизации во время выполнения генерируются повторно для каждого нового соединения. Чтобы sshd мог выполнить себя повторно, ему необходимо знать полный путь к самому себе.

Вот цитата из примечаний к выпуску 3.9:

Заставить sshd (8) повторно выполнить себя при принятии нового соединения. Эта мера безопасности гарантирует, что все рандомизации во время выполнения будут повторно применяться для каждого соединения, а не один раз в течение срока службы главного процесса. Сюда входят сопоставления mmap и malloc, адресация разделяемых библиотек, порядок сопоставления разделяемых библиотек, файлы cookie ProPolice и StackGhost в системах, которые поддерживают такие вещи.

В -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;
    }