Предположим, что во FreeBSD (или, может быть, в linux) есть обычный непривилегированный пользователь (не суперпользователь). И есть автономный telnet (я знаю, что telnet обычно запускается под inetd), работающий под (принадлежащим) этим пользователем. (Предположим, что не было никакого оригинального telnet, принадлежащего пользователю root). Этот сервер telnet запрограммирован таким образом, что он не проверяет переменные среды ld_ * перед передачей его в /bin /login, принадлежащего пользователю root, для которого настроен setuid.

Вопрос будет: 1. Будет ли работать этот телнет? 2. Если это сработает, сможет ли он передать переменные окружения в /bin /login?

1 ответ1

0

Предположим, что во FreeBSD (или, может быть, в linux) есть непривилегированный суперпользователь.

"Непривилегированный суперпользователь" - это противоречие в терминах; Само слово "суперпользователь" означает пользователя, имеющего все привилегии.

Этот сервер telnet запрограммирован так, что он не проверяет переменные окружения ld_ *

Я не уверен, что это актуально. Сервер telnet не имеет никаких специальных привилегий, поэтому удаление переменных LD_* не очень полезно ...

  1. Будет ли работать этот телнет? 2. Если это сработает, сможет ли он передать переменные окружения в /bin /login?

Он будет работать частично, но, скорее всего, не сможет подключиться к стандартному порту Telnet из-за отсутствия привилегии CAP_NET_BIND_SERVICE.

Да, он сможет передавать переменные среды для login в систему , как и любой другой процесс. Однако, по крайней мере в Linux, загрузчик (ld-linux.so) отбрасывает все переменные LD_* перед запуском программы setuid, поэтому они не влияют на login в setuid.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .