Por que não consigo usar strace com rsh?

2

Se eu executar o rsh, ele funciona, mas imprime algumas mensagens estranhas de "Conexão recusada" no começo:

$ rsh localhost pwd
connect to address 127.0.0.1 port 544: Connection refused
Trying krb4 rsh...
connect to address 127.0.0.1 port 544: Connection refused
trying normal rsh (/usr/bin/rsh)
/home/service

Mas se eu executar o rsh under strace, ele não se conectará ao servidor:

$ strace -c rsh localhost ulimit -n
connect to address 127.0.0.1 port 544: Connection refused
Trying krb4 rsh...
connect to address 127.0.0.1 port 544: Connection refused
trying normal rsh (/usr/bin/rsh)
rcmd: socket: Permission denied
% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
 28.39    0.000113           2        58           read
 27.64    0.000110          16         7           write
 16.83    0.000067           1        47           open
 15.33    0.000061           2        27           munmap
 11.81    0.000047           1        80           mmap
  0.00    0.000000           0        58           close
  0.00    0.000000           0         1           stat
  0.00    0.000000           0        45           fstat
   ..........................................
   ..........................................
   ..........................................

Aqui está um extrato de strace rsh localhost ulimit -n :

connect(3, {sa_family=AF_INET, sin_port=htons(544), sin_addr=inet_addr("127.0.0.1")}, 16) = -1 ECONNREFUSED (Connection refused)
write(2, "Connection refused\n", 19)    = 19
connect(3, {sa_family=AF_INET, sin_port=htons(544), sin_addr=inet_addr("127.0.0.1")}, 16) = -1 ECONNREFUSED (Connection refused)
write(2, "Connection refused\n", 19)    = 19

Perguntas

  1. O que está causando port 544: Connection refused ?
  2. Por que mostra o erro rcmd: socket: Permission denied ? Ele deve mostrar algum valor inteiro (a saída de ulimit -n na máquina remota).
por devsda 13.03.2013 / 10:17

1 resposta

4

A porta normal para um servidor rsh é 514. Seu cliente rsh suporta Kerberos e um Kerberos O rsh server normalmente escuta na porta 544. Seu cliente rsh primeiro tenta efetuar login com a autenticação Kerberos, provavelmente primeiro com o Kerberos versão 5 e depois com o Kerberos versão 4 (abreviado como “krb4”). O erro “conexão recusada” é devido à ausência de um servidor rsh do Kerberos (pode haver outras razões, como um firewall bloqueando você, mas é altamente improvável que isso aconteça quando o servidor está no host local). Ignore este erro, a menos que você pretenda usar o Kerberos.

Sem o kerberos, o rsh permite duas formas de autenticação: o usuário deve digitar uma senha ou o usuário deve estar na lista de permissões em /etc/rhosts ou ~/.rhosts . Whitelisting significa que o arquivo declara que o usuário U na máquina M tem permissão para efetuar login como usuário V no servidor. O servidor somente permite isso se puder confiar que a solicitação está realmente vindo do usuário U na máquina M. O servidor confia que uma solicitação vem da máquina M se ela vier do endereço IP da máquina M (uma suposição válida pelos padrões dos anos 80). ). Ele confia que o pedido vem do usuário U porque o cliente diz isso.

Mas porque o cliente diz que não é um motivo para confiar no cliente, nem mesmo nos padrões dos anos 80. Portanto, há uma condição adicional: solicitações rsh devem ter uma porta de origem abaixo de 1024. Em máquinas Unix, somente o root pode ligar portas TCP ou UDP abaixo de 1024. Portanto, o cliente rsh é executado como raiz. Como qualquer usuário deve ser capaz de executá-lo, o binário rsh é setuid root: ele é executado com permissões de root, não importa qual usuário invocou.

Quando você executa um programa em strace, ele não é executado com nenhum privilégio elevado, apenas os privilégios do usuário solicitante. Isso ocorre porque o rastreamento pode revelar dados confidenciais (e, na verdade, o mesmo mecanismo permite que você seqüestre completamente o processo). Portanto, quando você executa strace rsh … , no ponto em que tenta abrir uma conexão com uma porta de origem abaixo de 1024, ele falha: rcmd: socket: Permission denied .

Se você quiser rastrear rsh , terá que executar strace como root. Deixe-o executar rsh como root ou passe a opção -u para que o programa seja executado com os privilégios que normalmente possui quando iniciado a partir de sua conta:

strace -o rsh.strace -s9999 -u jhamb rsh localhost pwd
    
por 14.03.2013 / 20:30