Esta é uma escolha deliberada de segurança. No entanto, você pode configurar seu servidor telnetd para passar pela variável TERM
, embora seu valor seja convertido em minúsculas. A verificação real dos valores legais TERM
não é feita por in.telnetd
em si, mas pelo programa de login, telnetlogin
que o servidor chama. Você pode configurar seu servidor telnetd para executar algum outro programa de login, por exemplo, um script de shell intermediário, que irá descomprimir a variável antes de continuar com o login. Por exemplo, para testar isso, crie o arquivo /tmp/mytelnetlogin
com o conteúdo:
#!/bin/bash
export MYTERM=$TERM
export TERM=dumb
exec /usr/lib/telnetlogin "$@"
e faça chmod +x
nele. Em seguida, execute sua própria versão de teste do telnetd na porta 9999:
sudo sudo -u telnetd /usr/sbin/in.telnetd -debug 9999 -L /tmp/mytelnetlogin
e conecte-se a ela com sua variável no ambiente:
TERM='A=1:b=2' telnet localhost 9999
Você deve ver um prompt de login, e após o login, um echo $MYTERM
mostrará o valor a=1:b=2
, que você pode manipular como normalmente faz. Obviamente, para uma solução real, você precisa colocar a opção -L
em /etc/inetd.conf
e não usar /tmp
para o script.
Observe que telnetlogin
é um programa de raiz setuid, que deve ser chamado a partir do ID do usuário telnetd
. Isso é para permitir que inetd
execute o servidor como não-raiz e use apenas a raiz para o login.
Se preferir ignorar esta medida de segurança, você pode executar in.telnetd
como root e fazer com que execute o login padrão, /bin/login
. Você não precisa então do script intermediário mytelnetlogin
para manipular a variável. Por exemplo:
sudo /usr/sbin/in.telnetd -debug 9999 -L /bin/login