ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • telnet 사용하는 법
    리눅스 2024. 4. 30. 01:59

    텔넷(telnet)이란 전통적으로 사용되어 온 원격 접속 방법이지만 지금은 보안에 취약하기 때문에 단독으로 사용하지는 않는다. 하지만 매우 기본적인 원격 접속 방법이므로 알아둘 필요가 있다.

     

    텔넷 서비스를 이용하려면 클라이언트와 서버 두 곳에서 텔넷 프로그램이 설치되어 있어야 한다. 만약 리눅스 서버를 원격으로 다른 운영체제에서 이용하려고 한다면, 리눅스 서버에 텔넷 서버가 설치되어 있어야 한다. 클라이언트측에는 기본적으로 대부분의 운영체제에 텔넷 클라이언트 프로그램이 내장되어 있으므로 별도로 설치하지 않아도 무방하다. 또한 클라이언트와 서버 측의 os가 달라도 텔넷으로 통신하는데 문제가 없다. 이는 텔넷 뿐만 아니라 다른 서버/클라이언트 프로그램 간의 관계에서도 적용된다. 그리고 각각의 서버 프로그램은 자신에게 맞는 별도의 클라이언트 프로그램이 필요하다. 예를 들어 아파치 또는 IIS 와 같은 웹서버는 크롬, 파이어폭스 브라우저와 같은 웹 클라이언트가 필요하고, 텔넷 서버는 telnet 또는 Putty와 같은 텔넷 클라이언트가 필요하다. 

     

    텔넷 서버 구축 과정을 요약하면 다음과 같다.

     

    1. 텔넷 서버 설치: apt install xinetd telnetd

    2. 설정 파일 편집: /etc/xinetd.d/telnet 파일 편집

    3. 텔넷 전용 사용자 생성: adduser 사용자명

    4. 텔넷 서비스 가동: systemctl restart xinetd

    5. 방화벽 설정(포트 열기): ufw allow 23/tcp

    6. 클라이언트에서 접속: telnet 서버IP

     


     

    실습: 리눅스에 텔넷 서버를 설치하고 가동한다. 그리고 원격지 컴퓨터에서 접속해서 리눅스를 관리한다.

     

    원격 대상이 될 리눅스를 부팅한후 root로 로그인 한다.

     

    그리고 dpk -l telnetd 명령어를 실행하여 telnetd 프로그램이 설치되어 있는지 확인한다.

     

    물론 나는 리눅스 설치 후에 telnetd 프로그램을 설치한 적이 없기 때문에 패키지를 찾을 수 없다고 나온다. 앞서 말했듯, 텔넷 서버 프로그램은 별도로 설치를 해줘야 하기 때문에 다음의 명령어로 관련 패키지를 설치해주겠다.

    apt -y install xinetd telnetd

    telnetd는 텔넷 서버 프로그램이고, xinetd는 요청을 받아들일 수 있도록 깨어있는 상태를 유지하게 도와주고 서비스와 데몬을 시작하거나 정지시키는 것을 도와주는 unix 계열 확장 인터넷 서비스 데몬이라고 한다. 또한 xinetd는 다른 데몬의 실행을 관장하는 슈퍼데몬이며, 과거 슈퍼데몬으로 사용되었던 inetd를 대체하기 위해 등장하였다고 한다.

     


    다음으로는 텔넷 서버가 가동되도록 설정하기 위해 /etc/xinetd.d 폴더에 telnet 파일을 생성해 아래의 내용을 삽입한다.

     

    service telnet
    {
    disable = no
    flags = REUSE
    socket_type = stream
    wait = no
    user = root
    server = /usr/sbin/in.telnetd
    log_on_failure += USERID
    }

     

    /etc/xinetd.d 폴더는 xinetd에 의해 관리되는 각각의 서비스의 설정파일을 포함한다고 한다. 이 경우에는 우리는 telnet을 사용하기에 파일이름이 telnet이라고 설정했다.

     

    xinetd.conf 매뉴얼 페이지로 위 설정파일의 내용을 알아보겠다. 

     

    service <service_name>
                  {
                         <attribute> <assign_op> <value> <value> ...
                         ...
                  }

    설정파일은 이런 구조를 가진다고 한다.

     

    disable          This  is  boolean  "yes" or "no".  This will result in the service being disabled and not starting.  See
                            the DISABLE flag description.

    disable은 no로 설정해서 서비스가 실행되도록 한다.

     

    flags는 여러가지 속성 값을 가지며, 속성 값에 따라서 다양한 동작을 한다. 여기서는

    flags     REUSE       The REUSE flag is deprecated.  All services now implicitly use the REUSE flag.

    이므로 만약 명시하지 쓰지 않아도 자동으로 적용된 것 처럼 보인다.

     

    socket_type      Possible values for this attribute include:

                            stream      stream-based service

                            dgram       datagram-based service

                            raw         service that requires direct access to IP

                            seqpacket   service that requires reliable sequential datagram transmission

     

    socket_type 은 socket type을 지정한다. 여기서는 stream 타입을 지정했다. socket에 대해서 간단하게 알기 위해서는 https://www.geeksforgeeks.org/socket-in-computer-network/ 을 참고하라.

     

     

    wait             This  attribute determines if the service is single-threaded or multi-threaded and whether or not xinetd
                            accepts the connection or the server program accepts the connection. If its value is yes, the service is
                            single-threaded;  this  means  that xinetd will start the server and then it will stop handling requests
                            for the service until the server dies and that the server software will accept the  connection.  If  the
                            attribute  value is no, the service is multi-threaded and xinetd will keep handling new service requests
                            and xinetd will accept the connection. It should be noted that udp/dgram services  normally  expect  the
                            value to be yes since udp is not connection oriented, while tcp/stream servers normally expect the value
                            to be no.

     

    wait는 yes로 설정하면 single-thread로 실행되고 no로 설정하면 multi-thread로 실행된다. tcp/stream은 거의 no로 설정하면 된다고 한다.

     

     

    user             determines the uid for the server process. The user attribute can either be numeric or a name. If a name
                            is  given (recommended),  the user name must exist in /etc/passwd.  This attribute is ineffective if the
                            effective user ID of xinetd is not super-user.

     

    user는 서버 프로세스의 userid를 설정하는 것인데 super-user인 root로 설정하면 된다.

     

     

    server           determines the program to execute for this service.

    이 서비스에서 실행될 프로그램을 설정하는 것이므로 텔넷서버 프로그램의 위치인 /usr/sbin/in.telnetd으로 지정해주었다.

     

     

     

    log_on_failure   determines  what  information is logged when a server cannot be started (either because of a lack of re
                            sources or because of access control restrictions). The service id is always included in the  log  entry
                            along with the reason for failure.  Any combination of the following values may be specified:

                            USERID      logs the user id of the remote user using the RFC 1413 identification protocol.  This option
                                        is available only for multi-threaded stream services.

     

    로그인에 실패했을때 기록할 정보를 설정해주었다. USERID를 기록하기로 설정하였고 이때 연산자를 =이 아니라 +=를 사용해서 추가하는 방식으로 사용하였다.

     


     

    저장하고 파일을 빠져 나온 뒤 adduser teluser 명령어를 실행해서 접속 테스트를 위한 사용자를 만든다. 이때 아무 사용자 이름이나 사용해도 상관없다. 비밀번호도 기억하기 쉽게 teluser로 설정하겠다.

     

    그리고 앞에서 xinetd 관련된 설정을 했기 때문에 적용되도록 재시작을 해준다.

    명령어는 systemctl restart xinetd이다. 또한 systemctl enable xinetd 명령어로 컴퓨터가 재부팅되어도 xinetd 프로그램이 실행되도록 설정해준다. 그 다음에 systemctl status xinetd 명령어를 통해 status를 확인한다. 

     

    이후에 방화벽을 열어줘야 하기 때문에 ufw allow 23/tcp 명령어를 입력해 포트를 열어준다. 23번포트의 tcp 프로토콜을 허용해준다는 뜻이다.

     


    이제 클라이언트 컴퓨터에서 접속을 해보겠다. 나는 다른 리눅스 가상머신에서 접속을 시도하겠다.

    이때 연결하기 위해 서버의 ip 주소를 확인해야 하기때문에 ifconfig 명령어를 통해 ip 주소를 획득한다.

     

    그리고   telnet 서버IP주소        를 입력해준다. 

     

    그 다음 계정 이름과 비밀번호를 입력해주면 접속이 완료된다.

    만약 접속을 종료하고 싶다면 exit 명령어를 사용하면 된다.

     

    만약 윈도우에서 접속하고 싶다면 putty 프로그램을 추천한다. 카테고리 창 - 변환 에서 UTF-8로 설정하면 한글도 깨지지 않고 잘 나온다.

     

    이렇게 telnet 이용법을 알아봤다.

Designed by Tistory.