왜 rsh와 함께 strace를 사용할 수 없나요?

왜 rsh와 함께 strace를 사용할 수 없나요?

rsh를 실행하면 작동하지만 처음에 이상한 "연결 거부" 메시지가 인쇄됩니다.

$ 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

그러나 strace에서 rsh를 실행하면 서버에 전혀 연결할 수 없습니다.

$ 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
   ..........................................
   ..........................................
   ..........................................

이것은 다음에서 발췌한 것입니다 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

질문

  1. 무엇이 이것의 원인입니까 port 544: Connection refused?
  2. 오류가 표시되는 이유는 무엇입니까 rcmd: socket: Permission denied? 일부 정수 값이 표시되어야 합니다( ulimit -n원격 시스템의 출력).

답변1

rsh 서버의 일반 포트는 514입니다. 귀하의 rsh 클라이언트는 다음을 지원합니다.케르베로스, Kerberos 지원 rsh 서버는 일반적으로 포트 544에서 수신 대기합니다. rsh 클라이언트는 먼저 Kerberos 인증을 사용하여 로그인을 시도합니다. 먼저 Kerberos 버전 5를 사용한 다음 Kerberos 버전 4(줄여서 "krb4")를 사용할 수도 있습니다. "연결이 거부되었습니다"라는 오류는 Kerberos rsh 서버가 없기 때문에 발생합니다(방화벽이 사용자를 차단하는 등의 다른 이유가 있을 수 있지만 서버가 localhost에 있는 경우에는 그럴 가능성이 거의 없습니다). Kerberos를 사용할 계획이 아니면 이 오류를 무시하십시오.

Kerberos가 없으면 rsh는 두 가지 형태의 인증을 허용합니다. 즉, 사용자가 비밀번호를 입력해야 하거나 사용자가 /etc/rhosts또는 에서 화이트리스트에 등록 되어야 합니다 ~/.rhosts. 화이트리스트는 시스템 M의 사용자 U가 서버의 사용자 V로 로그인할 수 있도록 허용하는 파일 선언을 나타냅니다. 서버는 요청이 실제로 시스템 M의 사용자 U로부터 왔다는 것을 서버가 신뢰할 수 있는 경우에만 이를 허용합니다. 요청이 기계 M의 IP 주소에서 오는 경우 서버는 요청이 기계 M에서 온 것으로 믿습니다(1980년대 표준에 따른 유효한 가정). 클라이언트가 그렇게 말했기 때문에 요청이 사용자 U로부터 왔다고 믿습니다.

하지만손님이 그렇게 말하니까1980년대 기준으로도 이는 고객을 신뢰할 이유가 되지 않았습니다. 따라서 추가 조건이 있습니다. 즉, rsh 요청의 소스 포트는 1024보다 낮아야 합니다. Unix 시스템에서는 루트만 1024 미만의 TCP 또는 UDP 포트를 바인딩할 수 있습니다. 따라서 rsh 클라이언트는 루트로 실행됩니다. 모든 사용자가 이를 실행할 수 있어야 하므로 rsh 바이너리는 다음과 같습니다.설정값root: 어떤 사용자가 호출하더라도 루트 권한으로 실행됩니다.

strace에서 프로그램을 실행하면 높은 권한이 아니라 호출 사용자의 권한으로만 실행됩니다. 이는 추적을 통해 기밀 데이터가 드러날 수 있기 때문입니다. 실제로 동일한 메커니즘을 사용하면 프로세스를 완전히 하이재킹할 수 있습니다. 따라서 실행하면 strace rsh …1024보다 낮은 소스 포트로 연결을 열려고 하면 실패합니다 rcmd: socket: Permission denied.

를 추적하려면 루트로 실행 rsh해야 합니다 . 루트로 strace실행하거나 rsh-u옵션을 전달하여 프로그램이 계정에서 시작할 때 일반적으로 갖는 권한으로 실행되도록 합니다.

strace -o rsh.strace -s9999 -u jhamb rsh localhost pwd

관련 정보