Непривилегированный обычный пользователь передает переменные среды в /bin/login

Непривилегированный обычный пользователь передает переменные среды в /bin/login

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

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

решение1

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

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

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

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

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

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

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

Связанный контент