본문 바로가기

많은 기관에서 시스템 접속 시 텔넷 사용을 중단하고 SSH를 사용하도록 의무화하고 있습니다. 그 이유는 보안성 강화입니다. 텔넷으로 로그인할 경우 비밀번호를 비롯한 모든 데이터가 암호화되지 않은 상태로 전송됩니다. 네트워크 분석기를 가진 사람이라면 누구나 전송 내용을 읽을 수 있습니다. 반면 SSH는 모든 데이터를 암호화하여 읽을 수 없게 만듭니다. Telnet과 SSH 데몬이 동일한 사용자 경험을 제공한다는 가정은 잘못된 것입니다.

먼저, 다양한 SSH 및 Telnet 클라이언트가 존재합니다. 이들은 서로 다른 사용자 인터페이스를 가지며 서로 다른 터미널 유형을 사용할 수 있습니다. 동일한 터미널 유형을 사용하더라도, 터미널을 에뮬레이션하는 과정에서 완벽하지 않은 에뮬레이션 방식 때문에 동작이 다를 수 있습니다. 그러나 클라이언트 소프트웨어의 차이를 배제하더라도, 텔넷 데몬(telnetd 또는 telnet_msd)에 연결된 세션과 SSH 데몬에 연결된 세션 사이에는 미묘하거나 그렇지 않은 여러 차이점이 존재합니다. 또한 다수의 버그가 있으며, 이에 대해서는 후술하겠습니다. 참고로 본 문서 작성 시점에 사용한 SSH 데몬은 OpenVOS 릴리스 2.1.0k용 인터넷 보안 팩(ISP)의 버전입니다. 이는 작성 당시 이용 가능한 최신 버전입니다.

사용자 이름:

로그인하기 전부터 Telnet과 SSH는 사용자 이름 처리 방식이 다릅니다. Telnet 데몬은 사용자 이름의 모든 고유한 변형으로 로그인을 허용하며 대소문자를 구분하지 않습니다. 사용자 이름 Noah_Davids의 경우, 텔넷에서는 Noah_D, noah_d, NoAh_D 또는 NoAh_DaViDs로 로그인할 수 있지만, SSH에서는 오직 Noah_Davids만 작동합니다. 제 별칭 nd도 동일한 방식으로 작동합니다. 텔넷에서는 nd, ND 또는 nD를 사용할 수 있지만, SSH에서는 오직 nd만 작동합니다.

그룹 이름:

텔넷 연결 시 표시되는 로그인 프롬프트를 통해 그룹 이름을 지정할 수 있습니다.

telnet 164.152.77.217
연결 시도 중...
164.152.77.217에 연결되었습니다.
이스케이프 문자는 '^]'입니다.

OpenVOS Release 17.1.0ax, Module %phx_vos#m17
Please login  15:24:14
login nd.SysAdmin
Password? [password entered here]

Noah_Davids.시스템 관리자 %phx_vos#m17에 12-12-12 15:24:55 mst에 로그인했습니다.
그림 1 – 그룹명을 사용한 텔넷 로그인

그러나 SSH 프로토콜은 사용자 이름만 허용합니다. 그룹 이름을 포함하면 사용자 이름의 일부로 간주되어 로그인이 실패합니다.

system>openssl>bin>ssh [email protected]

nd.시스템 관리자@164.152.77.217의 비밀번호: [비밀번호 입력]

권한이 거부되었습니다. 다시 시도하십시오.
[email protected]의 비밀번호:
그림 2 – 그룹명을 사용한 SSH 로그인

로그인 후 서브 로그인으로 그룹을 변경할 수 있습니다(단, 현재 제한 사항은 아래 ssl-403 섹션을 참조하십시오).

비밀번호 차이점:

Telnet과 SSH 연결 간 암호 처리의 가장 큰 차이점은 SSH가 인증을 위해 암호를 요구하지 않는다는 점입니다. 공개/개인 키 쌍을 설정하면 암호 입력 단계 전체를 생략할 수 있습니다. 설정 방법에 대한 설명은 Stratus STCP SSH에서 공개 키 인증을 사용하도록 설정하기 문서를 참조하십시오.

비밀번호를 사용하는 경우 몇 가지 차이점을 고려해야 합니다. 첫째, 비밀번호 만료 처리가 다릅니다. Telnet에서는 비밀번호 만료 시점이 다가오면 로그인 프롬프트에서 경고 메시지를 표시하고 변경할 수 있도록 합니다.

telnet 164.152.77.217
연결 시도 중...
164.152.77.217에 연결되었습니다.
이스케이프 문자는 '^]'입니다.

OpenVOS Release 17.1.0ax, Module %phx_vos#m17
로그인하십시오 14:04:40
login nd
Password? [현재 비밀번호 입력]

비밀번호는 5일 후에 만료됩니다.
새 비밀번호 (첫 번째 입력)?
그림 3 – 텔넷 연결 비밀번호 만료 경고/프롬프트

SSH는 경고 메시지를 표시하지만 변경할 수 있는 옵션은 없습니다. 비밀번호를 무효화하려면 change_password 명령어를 사용해야 하며, 이렇게 하면 다음 로그인 시 비밀번호를 변경해야 합니다.

ssh [email protected]
[email protected]의 비밀번호: [현재 비밀번호를 여기에 입력하세요]

비밀번호는 5일 후에 만료됩니다.
Noah_Davids.CAC가 %phx_vos#m17에서 13-01-09 13:06:35 mdt에 로그인했습니다.

환영합니다.

ready  13:06:35
change_password
비밀번호가 더 이상 유효하지 않습니다. 다음 로그인 시 변경해야 합니다.
준비 완료  13:06:49
그림 4 – SSH 연결 비밀번호 만료 경고
및 change_password 명령어

비밀번호가 만료되거나(또는 change_password 명령어로 무효화한 경우) 비밀번호 변경을 요청받게 됩니다. 텔넷과 달리 이는 선택 사항이 아니며, 반드시 비밀번호를 변경해야 합니다. 비밀번호 변경 후에는 자동으로 로그아웃되며 다시 로그인해야 합니다.

ssh [email protected]
[email protected]의 비밀번호:

경고: 비밀번호가 만료되었습니다.
지금 비밀번호를 변경하고 다시 로그인해야 합니다!
현재 비밀번호? [현재 비밀번호 입력]

새 비밀번호 (첫 번째 입력)? [새 비밀번호 입력]

새 비밀번호 (두 번째 입력)? [새 비밀번호 입력]

164.152.77.217에 대한 연결이 종료되었습니다.
그림 5 – SSH 연결 중 비밀번호 변경

또 다른 차이점은 SSH 연결은 챌린지-응답 방식의 비밀번호를 지원하지 않는 반면, Telnet 연결은 이를 지원한다는 점입니다.

하위 시스템:

Telnet으로 모듈에 처음 연결할 때 로그인 명령을 통해 하위 시스템

OpenVOS 릴리스 17.1.0ax, 모듈 %phx_vos#m17
로그인하십시오 11:23:40
login -form -usage
-------------------------------- 로그인 -------------------------------
사용자_이름:
-특권:      등록된 대로
-비밀번호:
-비밀번호_변경: 아니오
-우선순위:
-홈_디렉터리:
-모듈:
 -하위시스템:
그림 6 – 텔넷 연결을 통해 하위 시스템 이름을 지정할 수 있습니다

SSH 프로토콜에는 서브시스템 이름을 지정하는 메커니즘이 없습니다. 등록 데이터베이스 항목에 must_use_subsystem 플래그가 설정된 경우, 등록 항목에 지정된 첫 번째 서브시스템이 자동으로 사용됩니다. 해당 비트가 설정되지 않은 경우 서브시스템은 사용되지 않습니다. (참고: ISP 2.1.0j 이전 버전에서는 must_use_subsystem 비트가 설정되지 않았더라도 첫 번째 하위 시스템이 사용되었습니다.) 로그인 전에 사용할 수 있는 login 명령어 인수에는 하위 시스템을 지정하는 방법이 포함되어 있지만(그림 6 참조), 로그인 후에는 해당 옵션이 더 이상 사용할 수 없습니다(그림 7 참조).

로그인 -형식 -사용법
-------------------------------
- 그룹명: CAC
- 특권: 예
- 우선순위:- 로그인 -------------------------------
 그룹명: CAC
 -privileged: yes
 -priority:
 -password:
 -module:
그림 7 – 서브 로그인 명령줄 인수

로그인한 후 하위 시스템에 진입하는 유일한 방법은 해당 시스템으로 다시 텔넷 연결을 하고 재로그인하는 것입니다.

telnet 127.0.0.1
연결 시도 중...
127.0.0.1에 연결됨.
이스케이프 문자는 '^]'입니다.

OpenVOS Release 17.1.0ax, Module %phx_vos#m17
로그인하십시오  11:37:34
login nd -subsystem test_ss
Password?        

Noah_Davids.CAC logged in on %phx_vos#m17 at 12-12-13 11:37:49 mst.
this is the test subsystem

ready  11:37:49
그림 8 – 루프백 주소로 텔넷 연결 후 다시 로그인하여 하위 시스템 접근

 

접근 제어:

텔넷과 SSH 연결 모두 TCP 래퍼를 지원하여 IP 주소 기반으로 접근을 제한할 수 있지만, 텔넷 데몬의 경우 기본적으로 TCP 래퍼가 활성화되어 있지 않으며 -tcpwrapper_check 제어 인수를 명시적으로 사용하여 활성화해야 합니다. 반면 SSH 데몬에서는 TCP 래퍼가 기본적으로 활성화되어 있으며 이를 비활성화할 방법이 없습니다. TCP Wrappers의 hosts.allow 구성 파일에서 모든 SSH 연결을 허용하도록 설정하면 효과적으로 비활성화할 수 있습니다.

telnetd -form -usage
------------------------------ telnetd ------------------------------
-service_file:     >system>stcp>telnetservice
 -tcpwrapper_check: no
 -numeric:          yes
그림 9 – telnetd 데몬에서 TCP 래퍼 활성화

 

telnet_msd -form -usage
----------------------------- telnet_msd ----------------------------
 -network_port:     24
 -max_sessions:     28
 -error_severity:   2
 -separate_log:     yes
 -log_dir:          >system>stcp>logs
 -vterm_starname:   telnet*
 -vterm_login:      yes
 -vterm_slave_id:
 -extension:        133
 -force_edit:       yes
 -EC_decimal_value: 8
 -EL_decimal_value: 21
 -tcpwrapper_check: no
 -numeric:          no
그림 10 – telnet_msd 데몬에서 TCP 래퍼 활성화

sshd 데몬은 sshd_config 파일의 옵션을 지원하여 ssh를 통해 접근을 허용할 사용자 또는 그룹(AllowUsers 및 AllowGroups 지시어) 또는 접근을 거부할 사용자 또는 그룹(DenyUsers 및 DenyGroups 지시어)을 지정할 수 있습니다. 이러한 지시어를 통해 사용자 이름, 소스 도메인 또는 조합을 지정할 수 있습니다. 예를 들어, corp.stratus.com의 noah_davids 사용자에게는 접근을 허용하되, az.stratus.com의 noah_davids 사용자에게는 접근을 거부할 수 있습니다.

허용 사용자 *@*.stratus.com
차단 사용자 *@*az.stratus.com
그림 11 – sshd_config 파일 내 AllowUsers 및 DenyUsers 지시어 예시
>system>openssl>bin>ssh [email protected]
[email protected]의 비밀번호:

권한이 거부되었습니다. 다시 시도하십시오.
[email protected]의 비밀번호:
그림 12 – DenyUsers 지시문으로 인해 phxtest-m15.az.stratus.com에서의 로그인이 거부됨

 

명령 환경:

텔넷 연결에 로그인하면 표준 VOS 명령 환경이 제공됩니다. SSH는 관리자가 표준 명령 환경 또는 bash 셸 환경 중 하나를 지정할 수 있게 합니다. 이는 포트 번호를 기반으로 수행됩니다.

ssh서비스들

%phx_vos#m17_mas>opt>openssl>etc>sshservices  12-12-13 12:31:31 mst

ssh       "window_term"  ""         "login"         1 1  s$pt_log.m16
ssh2200   "window_term"  "-shell"   "bash"          1 1  s$pt_log.m16
그림 13 – sshservices 파일, 포트 22는 표준 VOS 명령줄(
)이며 포트 2200은 bash 셸입니다.
system>openssl>bin>ssh [email protected] -p 2200
[email protected]의 비밀번호:

환영합니다.

sh-2.05$
그림 14 – 포트 2200을 사용한 SSH 연결 및 bash 셸 획득

 

환경 변수:

기본적으로 Telnet 연결은 6개의 환경 변수만 설정하는 반면, SSH 연결은 12개를 설정합니다.

env
HOME=/SysAdmin/Noah_Davids
LOGNAME=root
PATH=.:/system/command_library:/system/applications_library:/system/maint_librar
+y:/system/nio/command_library:/system/tools_library:/opt/apache/bin:/opt/libxml
+2/bin:/opt/php/bin:/opt/openssl/bin:/opt/mysql/bin:/system/stcp/command_library
+:/system.17.1/gnu_library/bin
VOS_INCLUDE_PATH=.:/opt/apache/include:/opt/openssl/include:/opt/mysql/include/m
+ysql:/system/stcp/include_library/compat:/system/include_library
VOS_OBJECT_PATH=.:/opt/apache/lib:/opt/openssl/lib:/opt/mysql/lib/mysql:/system/
+stcp/object_library/complib:/system/posix_object_library/pthread:/system/posix_
+object_library:/system/c_object_library:/system/object_library
TERM=vt100
그림 15 – 텔넷 연결에서 설정된 환경 변수

 

env
HOME=/SysAdmin/Noah_Davids
PATH=.:/system/command_library:/system/applications_library:/system/maint_librar
+y:/system/nio/command_library:/system/tools_library:/opt/apache/bin:/opt/libxml
+2/bin:/opt/php/bin:/opt/openssl/bin:/opt/mysql/bin:/system/stcp/command_library
+:/system.17.1/gnu_library/bin
VOS_INCLUDE_PATH=.:/opt/apache/include:/opt/openssl/include:/opt/mysql/include/m
+ysql:/system/stcp/include_library/compat:/system/include_library
VOS_OBJECT_PATH=.:/opt/apache/lib:/opt/openssl/lib:/opt/mysql/lib/mysql:/system/stcp/object_library/complib:/system/posix_object_library/pthread:/system/posix_object_library
+object_library:/system/c_object_library:/system/object_library
TERM=vt100
TZ=mst+07:00:00
USER=Noah_Davids
LOGNAME=Noah_Davids
MAIL=/var/spool/mail/Noah_Davids
SHELL=/bin/sh
SSH_CONNECTION=164.152.77.34 49573 164.152.77.217 22
SSH_TTY=#s$pt_log.m16_3
그림 16 – SSH 연결에서 설정된 환경 변수

 

기기 유형:

마지막으로, 이는 Telnet과 SSH 간의 차이라기보다는 telnetd 및 sshd 데몬과 telnet_msd 데몬 간의 차이입니다. telnetd와 sshd는 window_term 장치를 사용하는 반면, telnet_msd는 vterm 장치를 사용합니다. vterm과 window_term 장치가 명령줄에서 일부 기능 키(예: CANCEL)를 처리하는 방식과 원시 화면 출력을 처리하는 방식에는 몇 가지 차이가 있습니다. 자체 양식을 생성하는 일부 애플리케이션은 새로운 s$control OP_CODES를 사용하도록 업데이트되지 않아 window_term 장치를 사용할 때 해당 양식을 올바르게 표시하지 못합니다. 이러한 애플리케이션을 처리하는 차선책은 SSH 터널을 통해 시스템에 연결한 후, 터널을 telnet_msd 데몬에 연결하도록 구성하는 것입니다. 물론 애플리케이션을 처리하는 최선의 방법은 새로운 OP_CODES를 사용하도록 업데이트하는 것입니다.

 

텔넷과 SSH에 내재된 위의 차이점 외에도 향후 릴리스에서 수정될 몇 가지 버그가 있습니다.

ssl-403 사용 가능한 그룹:

Telnet으로 연결할 때는 등록 항목에 지정된 모든 그룹을 서브로그인에 사용할 수 있지만, ssh에서는 처음 5개 그룹만 사용할 수 있습니다.

제가 그룹 CAC, SysAdmin, Group_3, Group_4, Group_5, Group_6에 등록되어 있습니다. Telnet 연결에서 어떤 그룹을 사용하더라도 서브 로그인을 수행할 수 있습니다.

telnet 164.152.77.217
연결 시도 중...
164.152.77.217에 연결됨.
이스케이프 문자는 '^]'입니다.

OpenVOS Release 17.1.0ax, Module %phx_vos#m17
로그인하십시오  15:38:02
login nd
비밀번호? [현재 비밀번호 입력]

Noah_Davids.CAC가 %phx_vos#m17에 12-12-12 15:38:08 mst에 로그인했습니다.

login Group_5

Noah_Davids.Group_5가 %phx_vos#m17에 12-12-12 15:39:39 mst에 로그인했습니다.
준비됨  15:39:39
로그아웃

로그인 Group_6

Noah_Davids.Group_6이(가) %phx_vos#m17에 12-12-12 15:40:13 mst에 로그인했습니다.
준비됨  15:40:13
그림 17 – Telnet 연결을 통한 하위 로그인

그러나 ssh를 사용할 때 Group_6을 사용하려고 하면 오류가 발생합니다.

>system>openssl>bin>ssh [email protected]
[email protected]의 비밀번호:

Noah_Davids.CAC가 %phx_vos#m17에 12-12-12 15:41:02 mst에 로그인했습니다.
준비됨  15:41:02

로그인 Group_5

Noah_Davids.Group_5가 %phx_vos#m17에 12-12-12 15:41:24 mst에 로그인했습니다.
준비됨  15:41:24
로그아웃

로그인 Group_6
login: 인자 형식이 잘못되었습니다. group_name에 Group_6은 허용되지 않습니다.
준비됨  15:41:59
그림 18 – SSH 연결을 통한 하위 로그인

 

ssl-418 – 하위 프로세스 수준:

Telnet을 통한 로그인은 sub_process 수준이 0인 반면, SSH를 통한 로그인은 sub_process 수준이 3입니다.

telnet 164.152.77.217
연결 시도 중...
164.152.77.217에 연결되었습니다.
이스케이프 문자는 '^]'입니다.

OpenVOS Release 17.1.0ax, Module %phx_vos#m17
로그인하십시오 14:15:34
login nd
Password? [현재 비밀번호 입력]

Noah_Davids.CAC logged in on %phx_vos#m17 at 12-12-13 14:15:39 mst.
ready  14:15:39
display_line (process_info sub_process_level)
0     
준비 완료  14:15:49
그림 19 – 텔넷 연결에서 설정된 하위 프로세스 수준

 

>system>openssl>bin>ssh [email protected]
[email protected]의 비밀번호: [현재 비밀번호 입력]

Noah_Davids.CAC가 %phx_vos#m17에 12-12-13 14:12:23 mst에 로그인했습니다.
ready  14:12:23
display_line (process_info sub_process_level)
3     
준비 완료  14:12:37
그림 20 – SSH 연결에서 설정된 하위 프로세스 수준

2013년 1월 14일 업데이트: 이는 버그가 아닌 기능으로 밝혀졌습니다. sshd 프로세스는 첫째, start_process가 수행되어 수신 대기 프로세스를 시작할 때, 둘째, sshd가 연결을 수락할 때, 셋째, 사용자 로그인 프로세스가 생성될 때 포크됩니다. Telnet은 사용자 프로세스를 시작하는 데 다른 메커니즘을 사용하므로 포크된 프로세스가 생성되지 않습니다.

시간대 문제:

마지막으로, 일광 절약 시간제와 표준 시간제 간 전환 또는 더 일반적으로 시간대 변경과 관련된 여러 문제가 있었다는 점을 말씀드리고 싶습니다. SSH를 통해 로그인한 세션은 새로운 기본값을 반영하지 않았습니다. 이러한 문제들은 모두 최신 릴리스(2.1.0k)에서 수정되었을 것입니다.

© 2024 Stratus Technologies.