CentOS Telnet 설치 및 사용법 (root 접속 허용, 문제 해결)

반응형

테스트 중에 여러 가지 오류가 있었습니다. 우선 /etc/xinetd.d/ 디렉토리 밑에 telnet이라는 환경변수 파일이 자동으로 생성되지 않았던 부분과 telnet.socket 데몬 실행이 안 되는 오류가 있었고 차례대로 해결하는 과정을 자세하게 담아봤습니다. Linux telnet 설치 및 사용법은 아래와 같습니다.

※. Telnet 테스트에 사용 중인 OS 버전은 CentOS 7.6입니다.

 

# Telnet 패키지 설치 여부 확인

[root@Eloquence ~]# rpm -qa | grep telnet*
[root@Eloquence ~]#

설치가 되어 있지 않은 상태

 

# 설치 가능한 Telnet 패키지 목록 확인

[root@Eloquence ~]# yum list telnet*
Loaded plugins: fastestmirror
Repodata is over 2 weeks old. Install yum-cron? Or run: yum makecache fast
Loading mirror speeds from cached hostfile
 * base: mirror.kakao.com
 * extras: mirror.kakao.com
 * updates: mirror.kakao.com
Available Packages
telnet.x86_64                            1:0.17-64.el7                      base  // telnet client 용도
telnet-server.x86_64                     1:0.17-64.el7                      base  // telnet server 용도 (실제로 필요한 파일)

 

 

# Telnet 패키지 설치

[root@Eloquence ~]# yum install telnet*  // 파일 2개(telnet, telnet-server) 전부 설치하도록 하겠습니다.
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirror.kakao.com
 * extras: mirror.kakao.com
 * updates: mirror.kakao.com
base                                                     | 3.6 kB     00:00
extras                                                   | 2.9 kB     00:00
updates                                                  | 2.9 kB     00:00
(1/2): extras/7/x86_64/primary_db                          | 153 kB   00:00
(2/2): updates/7/x86_64/primary_db                         | 5.9 MB   00:00
Resolving Dependencies
--> Running transaction check
---> Package telnet.x86_64 1:0.17-64.el7 will be installed
---> Package telnet-server.x86_64 1:0.17-64.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package               Arch           Version                Repository    Size
================================================================================
Installing:
 telnet                x86_64         1:0.17-64.el7          base          64 k
 telnet-server         x86_64         1:0.17-64.el7          base          41 k

Transaction Summary
================================================================================
Install  2 Packages

Total download size: 105 k
Installed size: 168 k
Is this ok [y/d/N]: y
Downloading packages:
(1/2): telnet-server-0.17-64.el7.x86_64.rpm                |  41 kB   00:00
(2/2): telnet-0.17-64.el7.x86_64.rpm                       |  64 kB   00:00
--------------------------------------------------------------------------------
Total                                              714 kB/s | 105 kB  00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : 1:telnet-server-0.17-64.el7.x86_64                           1/2
  Installing : 1:telnet-0.17-64.el7.x86_64                                  2/2
  Verifying  : 1:telnet-0.17-64.el7.x86_64                                  1/2
  Verifying  : 1:telnet-server-0.17-64.el7.x86_64                           2/2

Installed:
  telnet.x86_64 1:0.17-64.el7         telnet-server.x86_64 1:0.17-64.el7

Complete!

 

# 설치 확인

[root@Eloquence ~]# rpm -qa | grep telnet*
telnet-0.17-64.el7.x86_64
telnet-server-0.17-64.el7.x86_64

 

 

 

# Telnet 환경변수 설정 파일 수정

[root@Eloquence ~]# cd /etc/xinetd.d/ 
[root@Eloquence xinetd.d]# ls 
[root@Eloquence xinetd.d]#

 

어라? 설정 파일이 존재하지 않는다... (왜 없는지 원인은 잘 모르겠어요. 원래 없는 건가.. 그래서 직접 만들어줍니다.)

 

# 설정 파일 직접 생성 및 내용 작성 후 저장

[root@Eloquence ~]# vi /etc/xinetd.d/telnet  // telnet 설정 파일이 xinetd.d 밑에 있는 이유는 telnet은 xinetd 라는 슈퍼데몬에 의해 동작합니다. 제 게시글 중 xinetd 포스팅을 참조해주세요. 단순히 따라 하는 거에 그치지 않고 내용을 이해할수록 지식은 쌓입니다!!
# default : on 
# description : The telnet server serves telnet sessions; it uses \
#       unencrypted username/password pairs for authentication. 
service telnet
{ 
        flags              = REUSE  // 소켓 작동 시 사용하고 참조하는 정보
        socket_type     = stream  // Telnet 서비스의 소켓 적용 정보 (stream : TCP 소켓    dgram : UDP 소켓)
        wait               = no  // 대기 시간 제공 여부 (no : 프로세스 추가하여 제공    yes : 1개만 연결 가능)
        user               = root  // 서비스를 시작하는 권한자
        server             = /usr/sbin/in.telnetd  // 서비스를 처리할 프로그램 위치
        log_on_failure += USERID  // 로그인 실패 시 USERID를 포함해 로그 정보를 쌓는다
        disable            = no  // 서비스 제공 여부 (no : 제공 한다.    yes : 제공하지 않는다)

 

[root@Eloquence ~]# ls /etc/xinetd.d/
chargen-dgram   daytime-dgram   discard-dgram   echo-dgram   tcpmux-server  time-dgram 
chargen-stream  daytime-stream  discard-stream  echo-stream  telnet         time-stream 

telnet 파일이 정상적으로 생성되었습니다.

 

# Telnet 데몬 시작

[root@Eloquence ~]# systemctl start xinetd

[root@Eloquence ~]# ps -ef | grep xinetd // xinetd 데몬 정상 작동 확인 완료
root      2096     1  0 23:26 ?        00:00:00 /usr/sbin/xinetd -stayalive -pidfile /var/run/xinetd.pid 
root      2100  1893  0 23:27 pts/0    00:00:00 grep --color=auto xinetd

 

[root@Eloquence ~]# systemctl start telnet.socket 
Job for telnet.socket failed. See "systemctl status telnet.socket" and "journalctl -xe" for details.  // telnet.socket 데몬 실행 실패

 

[root@Eloquence ~]# systemctl status telnet.socket  // telnet.socket 데몬 상태 체크
 telnet.socket - Telnet Server Activation Socket 
   Loaded: loaded (/usr/lib/systemd/system/telnet.socket; enabled; vendor preset : disabled) 
   Active: failed (Result: resources) 
     Docs: man:telnetd(8) 
   Listen: [::]:23 (Stream) 
 Accepted: 0; Connected: 0 

12월 30 23:03:21 Eloquence systemd[1]: telnet.socket failed to listen on sockets: Address already in use ...
12월 30 23:03:21 Eloquence systemd[1]: Failed to listen on Telnet Server Activation Socket. 
12월 30 23:03:23 Eloquence systemd[1]: telnet.socket failed to listen on sockets: Address already in use ... 
12월 30 23:03:23 Eloquence systemd[1]: Failed to listen on Telnet Server Activation Socket. 
12월 30 23:03:27 Eloquence systemd[1]: telnet.socket failed to listen on sockets: Address already in use ... 
12월 30 23:03:27 Eloquence systemd[1]: Failed to listen on Telnet Server Activation Socket. 
12월 30 23:06:05 Eloquence systemd[1]: telnet.socket failed to listen on sockets: Address already in use ... 
12월 30 23:06:05 Eloquence systemd[1]: Failed to listen on Telnet Server Activation Socket. 
12월 30 23:06:18 Eloquence systemd[1]: telnet.socket failed to listen on sockets: Address already in use ... 
12월 30 23:06:18 Eloquence systemd[1]: Failed to listen on Telnet Server Activation Socket. 
Hint: Some lines were ellipsized, use -l to show in full.

 

오류 내용을 읽어보니 telnet.socket listen을 실패했고, 이미 그 주소가 사용되고 있는 중으로 나옵니다. 실제로 23번 포트가 사용 중인지 확인해봤습니다.

 

# 장애 발생 후 해결 과정

[root@Eloquence ~]# netstat -natp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.1:25                         0.0.0.0:*               LISTEN      1164/master
tcp        0      0 0.0.0.0:22                            0.0.0.0:*               LISTEN      1075/sshd
tcp        0     64 222.103.xxx.xxx:22       211.224.xxx.xxx:8332      ESTABLISHED 1891/sshd: root@pts
tcp6       0      0 ::1:25                                   :::*                    LISTEN      1164/master
tcp6       0      0 :::23                                    :::*                    LISTEN      1624/xinetd

telnet.socket 데몬이 정상 작동이 되고 있지 않은 상태에서 23번 포트가 LISTEN 상태였습니다. 그래서 이 프로세스를 죽여봤습니다.


[root@Eloquence ~]# kill -9 1624  // 1624(PID) 프로세스 kill
[root@Eloquence ~]# netstat -natp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.1:25                         0.0.0.0:*               LISTEN      1164/master
tcp        0      0 0.0.0.0:22                            0.0.0.0:*               LISTEN      1075/sshd
tcp        0     64 222.103.xxx.xxx:22       211.224.xxx.xxx:8332      ESTABLISHED 1891/sshd: root@pts
tcp6       0      0 ::1:25                                   :::*                    LISTEN      1164/master

23번 포트에 관련된 정보가 정상적으로 제거되었습니다. 다시 한번 telnet.socket 데몬을 실행시켰습니다.

 

[root@Eloquence ~]# systemctl start telnet.socket
[root@Eloquence ~]# systemctl status telnet.socket
 telnet.socket - Telnet Server Activation Socket
   Loaded: loaded (/usr/lib/systemd/system/telnet.socket; enabled; vendor preset: disabled)
   Active: active (listening) since 월 2019-12-30 23:09:53 KST; 4s ago
     Docs: man:telnetd(8)
   Listen: [::]:23 (Stream)
 Accepted: 0; Connected: 0

12월 30 23:09:53 Eloquence systemd[1]: Listening on Telnet Server Activation Socket.

데몬이 정상적으로 실행되었고, active 상태로 올라왔습니다.

 

[root@Eloquence ~]# netstat -natp
Active Internet connections (servers and established) 
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name 
tcp        0      0 127.0.0.1:25                         0.0.0.0:*               LISTEN      1164/master 
tcp        0      0 0.0.0.0:22                            0.0.0.0:*               LISTEN      1075/sshd 
tcp        0     64 222.103.xxx.xxx:22       211.224.xxx.xxx:8332      ESTABLISHED 1891/sshd: root@pts 
tcp6       0      0 ::1:25                                   :::*                    LISTEN      1164/master 
tcp6       0      0 :::23                                    :::*                    LISTEN      1624/xinetd  // 다시 23번 포트가 LISTEN 상태로 활성화된것을 확인

 

# Telnet 정상 작동 테스트

해당 서버와 통신이 되는 PC에서 직접 Telnet 테스트를 해봤습니다.

Window 10 에서는 기본적으로 Telnet 서비스가 비활성화되어 있기 때문에 활성화하는 과정은 아래와 같습니다.

 

 

 

 

 

# 방화벽

데몬은 정상적으로 실행되었지만 접속이 안 되는 이유는 아무래도 방화벽에서 23번 포트를 허용해주지 않았기 때문입니다. 실제로 그런지 확인했습니다.

 

[root@Eloquence ~]# systemctl status firewalld
 firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
   Active: active (running) since 월 2019-12-30 20:30:26 KST; 2h 46min ago
     Docs: man:firewalld(1)
 Main PID: 725 (firewalld)
   CGroup: /system.slice/firewalld.service
           └─725 /usr/bin/python2 -Es /usr/sbin/firewalld --nofork --nopid

12월 30 20:30:24 Eloquence systemd[1]: Starting firewalld - dynamic firewall daemon...
12월 30 20:30:26 Eloquence systemd[1]: Started firewalld - dynamic firewall daemon.

 

[root@Eloquence ~]# systemctl stop firewalld  // 비활성화 진행
[root@Eloquence ~]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
   Active: inactive (dead) since 월 2019-12-30 23:18:28 KST; 2s ago
     Docs: man:firewalld(1)
  Process: 725 ExecStart=/usr/sbin/firewalld --nofork --nopid $FIREWALLD_ARGS (code=exited, status=0/SUCCESS)
 Main PID: 725 (code=exited, status=0/SUCCESS)

12월 30 20:30:24 Eloquence systemd[1]: Starting firewalld - dynamic firewall daemon...
12월 30 20:30:26 Eloquence systemd[1]: Started firewalld - dynamic firewall daemon.
12월 30 23:18:28 Eloquence systemd[1]: Stopping firewalld - dynamic firewall daemon...
12월 30 23:18:28 Eloquence systemd[1]: Stopped firewalld - dynamic firewall daemon.

 

# 방화벽 비활성화 후 테스트 진행

아래 그림 (사진 2장)처럼 정상적으로 접속이 되는 것을 확인했습니다. 

 

그러면 단순하게 방화벽 자체를 내리고 Telnet을 쓰는 것보다 23번 포트만 허용해주는 게 좀 더 전문적이겠죠? 

# telnet 방화벽 설정

[root@Eloquence ~]# firewall-cmd --permanent --add-port=23/tcp  // 23번 포트 허용 명령어
success
[root@Eloquence ~]# firewall-cmd --reload  // 방화벽 재적용
success

[root@Eloquence ~]# firewall-cmd --list-all  // 방화벽 설정 조회
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: enp0s3
  sources:
  services: dhcpv6-client ssh
  ports: 22/tcp 2222/tcp 23/tcp   // 23번 telnet 포트가 방화벽 허용 정책에 추가된 것을 확인
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

 

# 방화벽 실행

[root@Eloquence ~]# systemctl start firewalld
[root@Eloquence ~]# systemctl status firewalld
 firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
   Active: active (running) since 월 2019-12-30 23:57:18 KST; 13min ago
     Docs: man:firewalld(1)
 Main PID: 2273 (firewalld)
   CGroup: /system.slice/firewalld.service
           └─2273 /usr/bin/python2 -Es /usr/sbin/firewalld --nofork --nopid

12월 30 23:57:18 Eloquence systemd[1]: Starting firewalld - dynamic firewall daemon...
12월 30 23:57:18 Eloquence systemd[1]: Started firewalld - dynamic firewall daemon.

 



 

 

# 방화벽 활성화 후 테스트 진행

정상적으로 접속되는 것을 확인

 

# telnet root 접속 허용

telnet은 기본적으로 root 접속이 제한됩니다. 하지만 이것 또한 설정 파일 수정을 통해서 허용할 수 있습니다.

[root@Eloquence ~]# vi /etc/securetty  // pts/1, pts/2, pts/3 등 설정 파일에 내용을 추가합니다.

console
pts/1  // 추가
pts/2  // 추가
pts/3  // 추가
vc/1
vc/2
vc/3
vc/4

. . . (중략)


hvc7
hvsi0
hvsi1
"/etc/securetty" 42L, 239C

 

# Telnet root 접속 테스트

정상적으로 root 접근이 되네요.

[root@Eloquence ~]# netstat -natp

Active Internet connections (servers and established) 
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name 
tcp        0      0 127.0.0.1:25                         0.0.0.0:*               LISTEN      1164/master 
tcp        0      0 0.0.0.0:22                            0.0.0.0:*               LISTEN      1075/sshd 
tcp        0     64 222.103.xxx.xxx:22       211.224.xxx.xxx:8332      ESTABLISHED 1891/sshd: root@pts 
tcp6       0      0 ::1:25                                   :::*                    LISTEN      1164/master 
tcp6       0      0 :::23                                    :::*                    LISTEN      1624/xinetd

tcp6       0      0 222.103.153.45:23       183.73.29.59:39750      ESTABLISHED 1/systemd  // 현재 제가 PC에서 서버로 텔넷을 이용해 붙은 세션 하나가 이렇게 표시되네요~^^

linux telnet 설치부터 설정까지 장황하게 설명드렸지만 중간중간 자신에게 해당되지 않는 부분들은 과감히 넘어가 주시면 되겠습니다. 간단한 서비스인데 이렇게도 저렇게도 다른 상황이 찾아올 수 있습니다. 당황하지 말고 설명대로 진행하면 됩니다. 감사합니다. 

반응형

댓글

Designed by JB FACTORY