RSHD(8)

명칭
rshd - 리모트 쉘의 서버

서식
rshd [? -DLaln]

해설
rshd 유틸리티는, rcmd(3) routine를 위한 서버이며, 결과적으로 rsh(1) 의 실행을 위해서(때문에) 필요한 서버입니다. rshd (은)는, 신뢰할 수 있는 호스트로부터의 특권 포트 번호에 근거했다 인증을 행하는 것에 의해, 프로그램의 리모트 실행 기능을 제공합니다.

rshd 유틸리티는, “cmd” 서비스에 할당할 수 있었던 포트 ( services(5) 참조)로 서비스 요구를 받아들입니다. 서비스 요구를 수신하면(자), 서버는 이하의 순서를 개시합니다:

1.  서버는, 클라이언트의 요구원포트 번호의 체크를 행합니다. 요구원포트 번호 하지만 512 에서 1023 의 범위에 없는 경우, 서버는 접속을 강제 절단 합니다.

2.  서버는, 소켓으로부터 눌 바이트 (`\0')를 검출할 때까지 캐릭터를 읽습니다. 수신 캐릭터 라인은, ASCII 코드에 의한 10 진수의 수치로 변환합니다.

3.  스텝 2 로 수신한 수치가 0 이 아닌 경우, 그 수치를 표준 에러 출력 그리고 사용하는 2 번째의 스트림의 포트 번호로서 해석합니다. 그리고 클라이언트 머신상에서도 지정된 포트 번호의 2 번째의 접속을 생성합니다. 이 2 번째의 접속의 요구원포트 번호도, 512 에서 1023 의 범위에서 지정합니다.

4.  서버는, 클라이언트의 요구원주소를 체크해, 해당하는 호스트명을 요구해 ( gethostbyaddr(3), hosts(5), named(8) (을)를 참조해 주세요). 호스트명을 특정할 수 없는 경우, 또는 확인한 호스트명과 주소가 일치하지 않는 경우, 닷 표기법에 따르는 호스트 주소를 이용합니다.

5.  최초의 소켓을 개입시켜, 눌 종단 된 최대 16 캐릭터의 유저명을 취득합니다. 유저명은, 클라이언트 머신상의 유저 식별로 사용합니다.

6.  최초의 소켓을 개입시켜, 눌 종단 된 최대 16 캐릭터의 유저명을 취득합니다. 유저명은, 서버 머신상의 유저 인증에 사용합니다.

7.  최초의 소켓을 개입시켜, 쉘에게 건네져야 한다, 눌 종단 되었다 명령을 취득합니다. 커멘드장의 제한은, 시스템의 인수 리스트 사이즈의 상한으로 의존합니다.

8.  rshd 유틸리티는, /etc/hosts.equiv 및 해당 유저의 홈 디렉토리상에 존재한다 .rhosts 파일을 이용한다 ruserok(3) (을)를 사용해, 유저 인증을 실시합니다. -l 옵션은, 유저가 슈퍼 유저가 아닌 한, .rhosts 파일에 근거했다 ruserok(3) 의 모든 인증을 행하지 않게 합니다.

9.  최초의 소켓을 이용해 눌 바이트를 돌려주어, 명령행 (을)를, 유저의 통상의 로그인 쉘에 건네줍니다. 쉘은 rshd 에 의해 확립된 네트워크 접속을 계승합니다.

옵션은 다음과 같습니다:

-?  사용 방법의 메세지를 표시해, 종료합니다.

-D  TCP_NODELAY 소켓 옵션을 설정합니다. 작은 연속하는 (back-to-back) 기입의 성능을 향상시킵니다만, 네트워크 트래픽은 증가해 버립니다.

-L  모든 성공한 액세스를 syslogd(8) (을)를 경유해 auth.info 메세지로서 로그 합니다.

-a  이 플래그는 무시됩니다. 호환성을 위해서(때문에) 있습니다.

-l  유저가 슈퍼 유저가 아닌 한, 유저의 .rhosts 파일을 인증에 사용하지 않습니다.

-n  트랜스폴트 레벨의 keepalive 메세지를 무효로 합니다. 이것에 의해, 클라이언트가 크래쉬 하거나 도달 불능이 되었을 경우에, 세션이 타임 아웃 하는 것을 막습니다.

진단
이하에 나타내는 예의 쳐 마지막 것을 제외해, 모든 진단 메세지를 최초의 소켓을 이용해 돌려준 후, 모든 접속을 클로우즈 합니다. 에러는, 선행하는 1 바이트로서 값 1 이 돌려주어지는 와 (으)로 압니다 (로그인 쉘 실행 전의 모든 스텝이 정상적으로 완료했을 경우, 상기의 스텝 10 의 처리로 0 을 돌려줍니다).

Locuser too long.
    클라이언트 머신상의 유저명이, 16 캐릭터를 넘고 있습니다.

Ruser too long.
    리모트 머신상의 유저명이, 16 캐릭터를 넘고 있습니다.

Command too long.
    건네받은 명령행의 길이가, 인수 리스트의 크기를 넘고 있습니다 (시스템에 의존합니다).

Login incorrect.
    해당 유저에 관한 엔트리가, 패스워드 파일에 등록되지 않은지, 상술의 인증 수속에 실패했습니다.

Remote directory.
    홈 디렉토리에의 chdir(2) 함수가 실패했습니다.

Logins not available right now.
    로컬 유저의 로그인 클래스에 대한다 login.conf 에 두어, 용서된 시간 이외로 rsh(1) 하지만 시험 받았습니다.

Can't make pipe.
    표준 에러 출력 에 필요한 파이프를 작성할 수 없었습니다.

Can't fork; try again.
    서버에 의한다 fork(2) 하지만 실패했습니다.

<shellname>: ...
    유저의 로그인 쉘을 기동할 수 없었습니다. 본메세지의 출력은 표준 에러 출력 에 관련 지을 수 있었던 connection를 개입시켜 돌려주어지기 때문에, flag byte는 선행하지 않습니다.

관련 항목
rlogin(1), rsh(1), gethostbyaddr(3), rcmd(3), ruserok(3), auth.conf(5), hosts(5), hosts.equiv(5), login.conf(5), services(5), named(8), rlogind(8), syslogd(8)

관련 파일
/etc/hosts
/etc/hosts.equiv
/etc/login.conf
$HOME/.rhosts
/var/run/nologin

/etc/pam.conf
    rshd (은)는, /etc/pam.conf 엔트리를 “rsh” 서비스명으로 사양 합니다. 패스워드를 요구하는 인증 모듈 (예를 들면 entries with service name pam_unix) (은)는 서포트되지 않습니다.

버그
여기서 이용되고 있는 유저 인증 순서는, 각 클라이언트 머신 및 접속 매체가 신뢰할 수 있는 것과 가정하고 있습니다. 이것은 안전하지 않습니다만, “오픈” 환경하에서는 편리합니다.

모든 데이터에 대해 암호화를 행하는 기능이 실장되어야 합니다.

TELNET 와 같은, 좀 더 확장성이 있는 프로토콜이 이용되어야 합니다.

역사
IPv6 서포트는, WIDE/KAME 프로젝트가 추가했습니다.