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

Почему sshd (openssh) создает два процесса для каждого соединения?

перед входом:

$ ps -elf | grep sshd
5 S root     26135     1  0  80   0 - 13115 ?      17:26 ?        00:00:00 /usr/sbin/sshd
0 S test     26480 21337  0  80   0 -  4154 -      18:41 pts/27   00:00:00 grep --colour=auto sshd

после входа в систему:

$ ps -elf | grep sshd
5 S root     26135     1  0  80   0 - 13115 ?      17:26 ?        00:00:00 /usr/sbin/sshd
4 S root     26577 26135  0  80   0 - 24204 ?      18:42 ?        00:00:00 sshd: test [priv] 
5 S test     26582 26577  0  80   0 - 24204 ?      18:42 ?        00:00:00 sshd: test@pts/30 
0 S test     26653 21337  0  80   0 -  4155 -      18:42 pts/27   00:00:00 grep --colour=auto sshd

Для чего нужны эти два процесса?

4 S root     26577 26135  0  80   0 - 24204 ?      18:42 ?        00:00:00 sshd: test [priv] 
5 S test     26582 26577  0  80   0 - 24204 ?      18:42 ?        00:00:00 sshd: test@pts/30

Спасибо,

Разделение привилегий - один процесс сохраняет привилегии root для выполнения действий, которые может делать только root, а другой - все остальное.

В то время, когда задавался этот вопрос, разделение привилегий контролировалось опцией в sshd_config, а sshd_config страница руководства объяснила, для чего это нужно. Разделение привилегий стало обязательным в версия 7.5, так что этот вариант и его документация исчезли. Я больше не знаю, где найти каноническую документацию по функции разделения привилегий, если такая документация существует.

В последней версии элемента справочной страницы перед удалением говорилось:

UsePrivilegeSeparation - Указывает, разделяет ли sshd (8) привилегии путем создания непривилегированного дочернего процесса для обработки входящего сетевого трафика. После успешной аутентификации будет создан другой процесс с привилегиями аутентифицированного пользователя. Цель разделения привилегий - предотвратить эскалацию привилегий путем сдерживания любых повреждений непривилегированных процессов. Аргумент должен быть yes, no, или sandbox. Если UsePrivilegeSeparation установлен на sandbox то на непривилегированный процесс предварительной аутентификации накладываются дополнительные ограничения. По умолчанию sandbox.