본문 바로가기

3. Pwnable (포너블)/2) 개념 정리

[2023.05.06] ‘생활코딩-Linux’ 강의 수강

‘생활코딩-Linux’ 강의를 섹션 10부터 섹션 12까지 수강하였다.


<섹션 10. 도메인 (domain)>
도메인 기본 개념
도메인 (domain)
: 사람들이 기억하기 쉽게 만들어진 인터넷 주소, IP 주소를 대신할 수 있는 이름
*도메인 입력 시 실제로는 ip address 통해서 접속
ex) google.com 등

DNS (Domain Name Server)
: 숫자로 구성된 네트워크 주소인 IP 주소를 사람이 이해하기 쉬운 명칭인 도메인 이름ㅇ로 상호 매칭시켜주는 시스템
*각각의 인터넷을 사용하는 서버마다 hosts file 존재 ->hosts에 적혀있는 domain ip를 보고 그 ip를 가지고 접속

hosts 파일
: hosts들의 IP를 적어놓은 파일, 해당 파일을 통해 도메인 이름 변조 가능
: 리눅스 /etc/hosts에 위치, hosts 파일 내에 지정된 도메인 네임과 주소는 DNS보다 우선함


*인터넷에 접속하는 각각의 컴퓨터 한 대 -> host
*각각의 host들이 모여있는 것 -> network
*network들이 모여있는 전체적인 집단 -> Internet

도메인 구입
cat /etc/resolv.conf 입력 -> nameserver ip 확인
*사용자가 계약한 통신사의 와이파이 등에 접속하면 /etc/resolv.conf 내용이 바뀜
*2개인 이유? 첫 번째 ip에 오류가 발생하면 두 번째 ip로 접속, 백업 또는 분할의 의미
*도메인은 민간 기업에서 관리, .kr처럼 뒤에 붙는 것에 따라 기관 달라짐
*(하나의 사례) Freenom 사이트를 통해 Domain 조회/구매 가능
*도메인 이름은 다른 사람이 사용하지 않는 것만 쓸 수 있음
*ip 주소가 다른 경우 외부의 알려진 ip를 사용해야 함

도메인 확인: host [도메인 이름]

서브 도메인
: 도메인 재사용하는 방법

각각의 도메인 앞에 admin, blog 등 서브 도메인을 붙임으로써 서로 다른 ip 가리키게 함 -> 하나의 도메인을 가지고 여러 사이트를 운용하는 효과
*서브 도메인에 서로 다른 ip 줄 수 있음

DNS의 동작 원리
전 세계 엄청나게 많은 도메인 존재, 한 대의 컴퓨터가 다 알고 서비스하는 것 어려움 -> 여러 컴퓨터가 분산해서 도메인 네임 저장
예) egoing.ga가 DNS서버를 통해 IP주소를 알아내는 과정
1. 우리의 DNS 서버가 root DNS 서버를 알고 있다.
2. 우리의 DNS 서버는 root DNS 서버에 ‘.ga’를 담당하는 DNS 서버가 누구인지 물어본다.
3. root DNS 서버는 ‘.ga’를 담당하는 네임서버를 알려준다.
4. 우리의 DNS 서버는 ‘egoing.ga’의 주소를 ‘.ga’ 네임서버에 물어본다.
5. ‘egoing.ga’의 주소를 받는다.

<섹션 11. 인터넷을 통한 서버간 동기화 (rsync)>
rsync 1
sync: 어떤 특정 컴퓨터 내용을 다른 컴퓨터에 올려서 한 쪽의 변경 상태를 반영하여 두 컴퓨터가 같은 상태를 유지하는 것

r(= remote)sync
: 원격으로 멀리 떨어진 컴퓨터들 사이에 인터넷, 네트워크 등을 통해 sync할 수 있게 해주는 프로그램, 백업/파일 복사 등에 사용

rsync 2 – Remote sync
네트워크를 통해 rsync
방법: rsync [옵션] [전송하고 싶은 데이터 경로] [사용자@ip 주소]:~[전송할 곳 경로]

*rsync 옵션
-a: 아카이브 모드 실행
-v: 실행과정 자세히 보기
-z: 전송할 때 압축하고 전송
-P: 전송 상황 바로 보여줌

<섹션 12. 로그인 없이 로그인하기 (ssh key)>
ssh public private key
: pw 입력하지 않고 훨씬 더 안전하게 로그인하는 방법

ssh id_rsa (공개 불가능, 비공개키), id_rsa.pub (공개 가능, 공개키) 생성
로그인하고 싶은 컴퓨터에 공개키 저장 -> 공개키가 저장되어있는 컴퓨터에 로그인 없이 로그인 가능

ssh-copy-id 유저이름@IP주소: 공개키를 다른 사용자의 authorized_keys라는 파일에 복사
*authorized_keys가지고 있는 사람 로그인 허용
*rsync를 사용하려면 로그인이 필요하나 ssh key를 이용하면 로그인 없이 rsnyc가 돼서 자동화가 가능해진다.

rsync
: 로그인 없이 동기화
리눅스 1, 2
1: rsync –avz  [사용자 이름]@[사용자 ip 주소]:~[전송할 곳 경로] 입력 -> 2에 전송 성공
*rsync 동작 시 기본적으로 현재 사용자의 ssh 디렉토리로 들어가서 id_rsa와 id_rsa.pub 존재 확인 후 활용하여 로그인 없이 로그인 가능
예) 백업 자동처리 등

RSA
: 비대칭키 암호화 방식에 대표주자
*암호화: 정보를 key로 이용해 다시 정보로 만드는 것
*복호화: 복잡한 암호를 key를 이용해 다시 정보로 만드는 것
*대칭 암호화 방식: 같은 key를 이용해 암호화, 복호화
*비대칭 암호화 방식: 공개키로 암호화, 비밀키로 복호화

SSH Client와 SSH Server 간의 동작
1. ssh 클라이언트가 서버에 접속하면 서버는 이 클라이언트에게 특별한 key를 줌
2. ssh 클라이언트는 ssh라는 디렉토리 안에서 id_rea 파일 유무를 찾아봄
3. id_rea파일 있을 경우 특별한 key인 random key를 암호화
4. 암호화된 결과를 ssh 서버에 전송
5. ssh 서버는 random key를 암호화한 정보를 받아 그걸 authorized_keys에 저장된 공개키로 복호화
6. 복호화된 결과와 전송했던 random key와 같다면 ssh 클라이언트는 authorized_keys를 만든 사람이라는 걸 알 수 있으므로 로그인을 해줌