새벽을 밝히는 붉은 달

2021.03.08 오늘의 기록 본문

Developer/Record

2021.03.08 오늘의 기록

자윰 2021. 3. 9. 01:42

<Telnet>

  • 텔넷 서버 구축 과정 요약
    1. 텔넷 서버 설치
    2. 설정 파일 편집
    3. 텔넷 전용 사용자 생성
    4. 텔넷 서비스 가동
    5. 방화벽 설정 (포트 열기)
    6. 클라이언트에서 접속
  • Ubuntu 20.04의 버그로 /etc/security 파일이 누락되어 텔넷으로 root 사용자 접속이 가능함 
  • root 사용자의 텔넷 접속을 허용하는 것은 좋은 생각이 아님
    -> root의 권한이 필요하다면 일반 사용자로 접속 후 sudo 명령 사용

<OpenSSH>

  • 텔넷은 서버와 클라이언트 사이에서 데이터를 전송할 때 암호화하지 않아 해킹 위험에 노출됨
    (예: Windows에서 리눅스로 접속할 때 사용하는 아이디와 비밀번호가 그대로 노출)
  • 이를 보완하기 위해 OpenSSH 서버를 사용함
  • OpenSSH 서버 구축 과정 요약
    1. ssh 서버 설치/가동
    2. 방화벽 설정
    3. 클라이언트에서 접속

<XRDP>

  • 텔넷이나 SSH 서버는 X 윈도 환경을 지원하지 않음
  • XRDP 서버는 원격지에서 X윈도 환경 자체를 사용할 수 있도록 함
  • XRDP 서버는 그래픽을 네트워크로 전송해야 하기 때문에, 텍스트로 전송하는 텔넷에 비해 속도가 느려짐
  • XRDP 서버 구축 과정 요약
    1. XRDP 서버 설치
    2. 서비스 시작
    3. 방화벽 설정
    4. 원격 데스크톱에서 접속
  • (사족: XRDP로 접속 후, 여러 개의 계정이 우분투에 접속해 있는 상태에서 power off를 했더니, 다른 계정도 알아서 종료되는 걸 경험함. 이전에 텍스트로 읽을 때는 '그렇구나' 싶었는데, 직접 해보니까 왜 작업이 끝나고 나면 종료가 아닌 로그아웃을 하라고 하는건지, 유버별로 권한을 따로 주는 것인지 어렴풋이 와닿음)

<Nameserver>

  • authoritative answer: query된 도메인의 네임서버에서 데이터를 얻어올 때
  • non-authoritative answer: 네임서버가 캐시된 데이터로 응답을 하는 경우
  • 네임서버는 도메인 주소를 ip 주소로 변환해주는 것뿐, 컴퓨터에 연결된 네트워크에 영향을 미치지는 않음
    -> 네임서버가 없더라도, ip주소만 알면 정상적으로 접속이 가능함
  • 주소창에 URL을 입력했을 때, 웹 브라우저는 /etc/hosts 파일을 먼저 조사하여 해당하는 도메인 주소와 IP 정보가 있는지 확인함. 만약 일치하는 내용이 없다면, /etc/resolv.conf 파일에 적혀 있는 nameserver로 query함
  • IP 주소를 얻는 내부 흐름도
    1. 사용자가 웹 브라우저 등에서 URL을 입력한다 (FTP, ping 등의 명령도 포함)
    2. /etc/host.conf파일을 조회해서 우선순위가 무엇인지 확인한다 (기본적으로 'order hosts, bind' 또는 생략되어 있다면, /etc/hosts 파일을 찾아봄. 만약 네임 서버에 먼저 질의한 후 /etc/hosts파일을 확인하도록 하고 싶다면, 'order bind, hosts'로 변경)
    3. 우선순위가 /etc/hosts -> 해당 파일을 열어서 www.google.com의  의 IP 주소가 적혀 있는지 확인한다
    4. /etc/hosts 파일에 www.google.com의  의 IP 주소가 적혀 있다면, 네임 서버에 query할 필요 없이 해당 IP 주소로 연결한다
    5. /etc/hosts 파일에 www.google.com의  의 IP 주소가 없다면, /etc/resolv.conf 파일을 확인해서 'nameserver 네임서버IP' 부분이 있는지 확인한다.
    6. /etc/resolv.conf 파일에 'nameserver 네임서버IP' 부분이 없다면,
    7. IP 주소를 획득하는 데 실패하여 www.google.com 의 IP 주소를 알 수 없다.
    8. /etc/resolv.conf 파일에 'nameserver 네임서버IP' 부분이 있다면,
    9. 해당 네임 서버에 www.google.com  의 IP 주소를 질의한다.
    10. 네임 서버가 www.google.com  의 IP 주소를 알고 있다면 해당 ip 주소를 알려준다.
    11. 만약 네임 서버가 응답하지 않거나 IP 주소를 알 수 없다면, www.google.com  의 IP 주소를 알 수 없다.
  • 웹 브라우저는 최종적으로 얻은 IP 주소가 진짜 IP 주소인지 가짜 IP 주소인지 검증할 능력이 없음 (사족: DNS 스푸핑은 이런 점을 이용한 해킹 방법인 것 같다)

  • 로컬 네임 서버의 작동 순서
    1. pc의 웹 브라우저 주소창에서 www.google.com  을 입력한다.

    2. 리눅스의 경우, /etc/resolv.conf 파일을 열어서 'nameserver 네임서버IP' 부분을 찾아 로컬 네임 서버 컴퓨터를 알아낸다.
    3. 로컬 네임 서버에 www.google.com  의 IP주소를 물어본다.
    4. 로컬 네임 서버는 자신의 캐시 DB를 검색하여 www.google.com의  의 정보가 들어 있는지 확인한다.
    5. 로컬 네임 서버가 'root 네임 서버'에 www.google.com  의 주소를 물어본다.
    6. 'root 네임 서버'도 www.google.com 의 주소를 모르므로 'com 네임 서버'의 주소를 알려주면서 'com 네임 서버'에 물어보라고 한다.
    7. 로컬 네임 서버가 'com 네임 서버'에 www.google.com  의 주소를 물어본다.
    8. 'com 네임 서버'도 www.google.com  의 주소를 모르면 'google.com'을 관리하는 네임 서버의 주소를 알려주면서 'google.com'의 네임 서버에 물어보라고 한다.
    9. 로컬 네임 서버가 'google.com 네임 서버'에 www.google.com  의 주소를 물어본다.
    10. 'google.com 네임 서버'는 구글에서 구축한 네임 서버이므로 ●●●.google.com 이라는 이름을 가진 컴퓨터의 목록이 모두 있다. www.google.com 의 IP주소도 알기 때문에 IP 주소를 알려준다.
    11. 로컬 네임 서버는 www.google.com  의 IP 주소를 요구한 PC에 IP 주소를 알려준다. 
    12. PC는 획득한 IP 주소로 접속을 시도한다.
    (사족: 여기서 com 네임 서버는 Top-level DNS Server, google.com을 관리하는 네임 서버는 authoritative DNS server인 것 같다! DNS가 동작하는 방식에는 recursive와 iterative query의 두 가지가 있는데, 여기서는 iterative query의 예인 듯. 지난 학기에 컴퓨터 네트워크 강의를 들으면서 대충 동작 방식만 외우고 넘어갔는데, 직접 예를 살펴보니 이해가 더 잘 간다)
  • 캐싱 전용 네임 서버(Caching-only Nameserver): PC에서 URL로 IP 주소를 얻고자 할 때, 해당하는 URL의 IP 주소를 알려주는 네임 서버
  • 마스터 네임 서버(Master Nameserver): 같은 도메인에 속해 있는 컴퓨터들의 이름을 관리하고, 외부에서 해당 도메인을 사용하는 컴퓨터의 IP 주소를 알고자 할 때 해당 컴퓨터의 IP 주소를 알려주는 네임 서버. 자신이 별도로 관리하는 도메인이 있으며, 외부에서 자신이 관리하는 컴퓨터의 IP 주소를 물어볼 때 자신의 DB에서 찾아서 알려주는 네임 서버.
  • 포워드 존 파일의 문법 요약
    1. ;(세미콜론): 주석
    2. $TTL : Time To Live. 도메인의 호스트 이름을 질의해갔을 때, 질의해간 다른 네임 서버가 해당 IP 주소를 캐시에 저장하는 시간을 말함
    3. @ : /etc/bind/named.conf 에 정의된 도메인을 의미
    4. IN : 클래스 이름으로 internet을 의미
    5. SOA : Start Of Authority. 괄호 안의 숫자는 시간을 의미하며, 차례대로 ( serial  refresh  retry  expire  minimum )을 뜻함
        - serial은 버전 정보
        - refresh는 상위 네임 서버에 업데이트된 정보를 요청하는 간격
        - retry는 상위 네임 서버에 문제가 발생했을 때 재접속 간격
        - expire는 상위 네임 서버에 접속하지 못할 경우 이전의 정보를 파기하는 간격
        - minimum은 이 시간 이후 정보가 삭제됨
    6. NS : Name Server. 설정된 도메인의 네임 서버 역할을 하는 컴퓨터를 지정
    7. MX: Mail Exchanger. 메일 서버 컴퓨터를 설정
    8. A : 호스트 이름에 상응하는 IP 주소를 지정
    9. CNAME : 호스트 이름에 별칭을 부여할 때 사용
  • 라운드 로빈 방식의 네임 서버: 여러 대의 웹 서버를 운영해서 웹 클라이언트가 서비스를 요청할 경우 교대로 서비스를 실행하여 웹 서버의 부하를 여러 대에게 공평하게 나누는 방식

<파이썬 라이브러리를 활용한 데이터 분석>

  • 파이썬은 GIL(Global Interpeter Lock) 때문에, 인터프리터가 한 번에 하나의 파이썬 바이트 코드 명령만 실행하도록 함 -> 동시다발적인 멀티스레드를 처리하거나 CPU에 집중된 많은 스레드를 처리하는 애플리케이션에 적합한 언어는 아님
  • 빅데이터 처리 애플리케이션에서는 단일 클러스터가 적절한 시간 안에 데이터를 처리해야만 하므로 단일 프로세스, 멀티스레드 시스템을 선호하는 편임
  • Numpy(Numerical Python): 과학계산용 파운데이션 패키지
    - 빠르고 효율적인 다차원 배열 객체 ndarray
    - 배열 원소를 다루거나 배열 간의 수학 계산을 수행하는 함수
    - 디스크로부터 배열 기반의 데이터를 읽거나 쓸 수 있는 도구
    - 선형대수 계산, 푸리에 변환, 난수 발생기
    - 파이썬과 C, C++ 그리고 포트란 코드를 통합하는 도구
  • pandas: 구조화된 데이터를 빠르고 쉬우면서도 다양한 형식으로 가공할 수 있는 풍부한 자료 구조와 함수를 제공.
    NumPy의 고성능 배열 계산 기능과 RDBM의 유연한 데이터 조작 기능을 조합한 것
  • matplotlib: 그래프나 2차원 데이터 시각화를 생성하는 파이썬 라이브러리
  • IPython: 표준 과학계산용 파이썬 도구 모음에 포함된 컴포넌트. 데이터를 처리하고 matplotlib으로 데이터를 시각화하는 데 매우 유용함.
  • SciPy: 과학계산 컴퓨팅 영역의 여러 기본 문제를 다루는 패키지 모음.
    - scipy.integrate: 수치적분 루틴과 미분방정식 해법기
    - scipy.linalg: numpy.linalg에서 제공하는 것보다 더 확장된 선형대수 루틴과 매트릭스 분해
    - scipy.optimize: 함수 최적화기와 방정식의 근을 구하는 알고리즘
    - scipy.signal: 시그널 프로세싱 도구
    - scipy.sparse: 희소 행렬과 희소 선형 시스템 풀이법
    - scipy.special: 감마 함수처럼 흔히 사용되는 수학 함수를 구현한 포트란 라이브러리인 SPECFUN 확장
    - scipy.stats: 표준 연속/이산 확률 분포와 다양한 통계 테스트, 그리고 좀 더 기술적인 통계 도구
    - scipy.weave: 배열 계산을 빠르게 하기 위해 인라인 C++ 코드를 사용하는 도구

'Developer > Record' 카테고리의 다른 글

2021.03.15 오늘의 기록  (0) 2021.03.15
2021.03.09 오늘의 기록  (0) 2021.03.10
2021.03.06 오늘의 기록  (0) 2021.03.07
2021.03.04 오늘의 기록  (0) 2021.03.05
2021.03.02 오늘의 기록  (0) 2021.03.03
Comments