Чому sshd (openssh) створює два процеси за з'єднання?


26

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

$ 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

Спасибі,

Відповіді:


39

Розмежування привілеїв - один процес, який зберігає кореневі привілеї для того, щоб робити те, що може робити тільки root, і інший, який робить все інше.

У той час, коли це питання було задано, розмежування привілеїв контролювалося опцією sshd_config, і sshd_configсторінка man пояснила, для чого це потрібно. Розділ привілеїв став обов'язковим у версії 7.5 , тому цей варіант та його документація відсутня. Я більше не знаю, де знайти канонічну документацію функції поділу привілеїв, якщо така документація існує.

В останній версії елемента підручника перед видаленням сказано:

UsePrivilegeSeparation
        Specifies whether sshd(8) separates privileges by creating an
        unprivileged child process to deal with incoming network traffic.
        After successful authentication, another process will be created
        that has the privilege of the authenticated user.  The goal of
        privilege separation is to prevent privilege escalation by con-
        taining any corruption within the unprivileged processes.  The
        argument must be yes, no, or sandbox.  If UsePrivilegeSeparation
        is set to sandbox then the pre-authentication unprivileged
        process is subject to additional restrictions.  The default is
        sandbox.

Дякую за вказівник, після того, як я детальніше ознайомився з ним, здається, що є 3 процеси, створені під час входу в систему, один працює в привілейованому режимі, один працює в непривілейованому користувачеві "sshd", після завершення автентифікації цей непривілейований процес загинув і новий процес sshd, створений під іменем входу. Чи є десь детально це документувати, наприклад, взаємодія між цими процесами? Спасибі.
wei

4
@wei, так, це задокументовано в BXR.SU/OpenBSD/usr.bin/ssh/sshd.c . Якщо ви шукаєте fork, ви побачите, що він використовується раз privsep_preauth()і знову в privsep_postauth().
cnst

@WumpusQWumbley, схоже, надане посилання не містить жодного розділу про UsePrivilegeSeparation. Єдине посилання на розділення пільг - внизу, в розділі кредитів. Я щось пропускаю? :)
Сорін Постельніку

1
@SorinPostelnicu Ви цього не зробите, але, здається, у проекті OpenBSD відсутня будь-яка документація щодо privsep.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.