usuário normal sem privilégios passando variáveis ​​de ambiente para /bin/login

usuário normal sem privilégios passando variáveis ​​de ambiente para /bin/login

Suponha que no FreeBSD (ou talvez no Linux) exista um usuário normal sem privilégios (não superusuário). E há um telnet autônomo (eu sei que o telnet geralmente é executado no inetd) rodando (de propriedade) deste usuário. (Suponha que não houvesse nenhum telnet original de propriedade do root em execução.) Este servidor telnet é programado para não verificar as variáveis ​​de ambiente ld_* antes de passá-las para /bin/login de propriedade do root que tem setuid configurado.

A questão seria: 1. Este telnet funcionará? 2. Se funcionar, será possível passar variáveis ​​de ambiente para/bin/login?

Responder1

Suponha que no FreeBSD (ou talvez no Linux) exista um superusuário sem privilégios.

“Superusuário não privilegiado” é uma contradição em termos; a própria palavra "superusuário" significa um usuário com todos os privilégios.

Este servidor telnet está programado para não verificar variáveis ​​de ambiente ld_*

Não tenho certeza se isso é relevante. O servidor telnet não possui privilégios especiais, portanto, remover LD_*variáveis ​​não é muito útil...

  1. Este telnet funcionará? 2. Se funcionar, será possível passar variáveis ​​de ambiente para/bin/login?

Funcionará parcialmente, mas provavelmente não será possível vincular-se à porta Telnet padrão devido à falta do privilégio CAP_NET_BIND_SERVICE.

Sim, será capaz de passar variáveis ​​de ambiente para login, assim como qualquer outro processo. Entretanto, pelo menos no Linux, o carregador (ld-linux.so) descarta todas LD_*as variáveis ​​antes de executar um programa setuid, então um setuid- loginnão seria afetado por elas.

informação relacionada