Непривилегированный обычный пользователь, передавая переменные окружения в /bin/login
Предположим, что во FreeBSD (или, может быть, в linux) есть обычный непривилегированный пользователь (не суперпользователь). И есть автономный telnet (я знаю, что telnet обычно запускается под inetd), работающий под (принадлежащим) этим пользователем. (Предположим, что не было никакого исходного работающего telnet, принадлежащего пользователю root). Этот сервер telnet запрограммирован таким образом, что он не проверяет переменные среды ld_* перед передачей его в /bin/login, принадлежащему root, для которого настроена setuid.
Вопрос будет: 1. Будет ли работать этот телнет? 2. Если это сработает, сможет ли он передать переменные окружения в /bin/login?
1 ответ
Предположим, что во FreeBSD (или, может быть, в linux) есть непривилегированный суперпользователь.
"Непривилегированный суперпользователь" - это противоречие в терминах; Само слово "суперпользователь" означает пользователя, имеющего все привилегии.
Этот сервер telnet запрограммирован так, что он не проверяет переменные окружения ld_*
Я не уверен, если это актуально. Сервер telnet не имеет никаких особых привилегий, поэтому удаление LD_* переменные не очень полезны...
- Будет ли работать этот телнет? 2. Если это сработает, сможет ли он передать переменные окружения в /bin/login?
Он будет работать частично, но, скорее всего, не сможет подключиться к стандартному порту Telnet из-за отсутствия привилегии CAP_NET_BIND_SERVICE.
Да, он сможет передавать переменные среды в login, как и любой другой процесс. Однако, по крайней мере в Linux, загрузчик (ld-linux.so) отбрасывает все LD_* переменные перед запуском программы setuid, поэтому setuid-login будет не затронут ими.