born2beroot?

born2beroot는 가상머신을 활용해보는 과제이다.
‘VirtualBox(또는 UTM)’에서 새로운 가상머신을 생성하고, 그곳에 ‘CentOS’ 또는 ‘Debian’ 운영체제를 설치하여 이것저것 해보는 것이 주된 목표이다.

ft_printf 과제에 필요한 개념들


가상화(virtualization)

잉여 시스템 자원이 있을 때, 이를 놀리지 않고 활용하기 위해 하나의 하드웨어에 여러개의 Application을 동시에 올릴 경우 보안 등 여러가지 문제점이 발생할 수 있다.
이를 보완하기 위한 방법이 가상화이며, 물리적인 하드웨어를 논리적으로 구분하여 격리된 각각의 시스템을 활용하는 것을 뜻한다.

가상머신(vm)

  • 가상머신(vm) : 하이퍼바이저(Hypervisor)를 이용하여 리소스 전체를 가상화
    • 하이퍼바이저 - 물리적인 하드웨어를 논리적으로 가상화하는 역할
      일반적으로 운영체제를 Application과 Process를 관리한다는 의미에서 supervisor라고 부르기 때문에, 이 운영체제들의 supervisor라는 의미에서 hypervisor라는 이름이 붙었다.
      cpu, 메모리 등의 리소스를 처리하여 게스트 os(가상머신)에 할당하여 리소스를 관리한다.
  • 컨테이너(container) : os수준에서 프로세스를 컨테이너 형태로 격리
    자주 이름을 들을 수 있는 docker가 바로 컨테이너 기반의 오픈소스 가상화 플랫폼의 한 종류라고 한다.
    좀 더 자세한 정보가 담긴 링크

가상머신(Virtual Machine)

물리적 컴퓨터와 동일한 기능을 제공하는 소프트웨어 컴퓨터. 즉, 하나의 물리 서버에서 여러개의 운영체제를 구동할 수 있도록 하는 기술이다.
다른 운영체제를 사용하고 싶을 때 새로운 하드웨어를 구입하여 필요한 OS를 설치하는 대신 이미 보유하고있는 하드웨어를 활용하여 물리적 리소스를 절약할 수 있다.
가상머신의 구성은 하이퍼바이저의 타입에 따라 다음과 같이 구분된다.
image

  • Type1 : Native형 또는 베어메탈형 하이퍼바이저라고 불린다. 하드웨어 바로 위에 설치되어 구동되며, 직접 게스트 운영체제를 관리한다.
  • Type2 : Hosted 하이퍼바이저라고 불린다. 하드웨어 위에 설치된 Host OS 위에서 실행되며, 호스트 운영체제에서 게스트 운영체제를 가상화하는 방식으로 작동한다. 본 과제에서 사용할 VirtualBox도 이 타입에 속한다.
    성능면에서는 Host OS라는 레이어가 존재하지 않는 Type1의 경우가 유리하지만, 개인 컴퓨터에서 여러개의 운영체제를 구동하기 위해서는 Type2의 경우가 편리하다고 한다.

가상머신을 사용할 경우 물리적 인프라 설치공간을 줄여 비용이 절감되고, 속도도 빠르고 간편하며, 각 게스트 운영체제는 논리적으로 격리되어있기 때문에 호스트 운영체제에 영향을 주지 않는다는 장점이 있다.


CentOS / Debian

두 운영체제 모두 리눅스 커널 + 자유 소프트웨어로 구성된 리눅스 배포판이다. 커널은 동일하므로 자유 소프트웨어(패키지 포맷, 패키지 관리 툴 등) 에서의 차이가 두 운영체제의 차이점을 결정한다.

  • 커널(Kernel) : 커널이란 OS의 핵심으로 운영체제의 가장 하부에서 작동되며 하드웨어의 자원을 프로세스에 할당하고, 프로세스 제어, 메모리 제어, 시스템 콜 등의 역할을 수행한다.

CentOS

기업용으로 개발된 서버 운영체제인 RHEL(Red Hat Enterprise Linux)에서 파생된 배포판이다.
RHEL을 거의 그대로 포킹한 오픈소스 버전이라고 보면 된다. 다만 유료로 사용하는 RHEL과는 달리 사후지원이 없고 업데이트 또한 느리기 때문에 보안 등의 이슈에 주의해야한다. 패키지 포맷으로는 RPM, 패키지 관리 툴로는 YUM/DNF를 사용한다.

Debian

자발적인 커뮤니티에서 개발되는 리눅스 배포판이다. 개인용으로 만들어졌으며, 업데이트 주기가 길다. 자주 사용되는 UbuntuDebian기반의 운영체제이다.
패키지 포맷으로는 .deb확장자를 사용하는 DEB, 패키지 관리 툴로는 apt, dpkg, aptitude를 사용한다. DEB패키지는 관리 및 유지보수가 쉽다는 장점이 있다고 한다.


Debian의 패키지 관리 툴(Package Managing Tool)

apt(advanced packagin tool)

소프트웨어의 설치와 제거를 처리하는 패키지 관리 툴이다. 설치할 패키지를 입력하면 /etc/apt/sources.list의 패키지 DB를 참조하여 온라인 저장소에서 해당 패키지와 더불어 종속성 목록까지 함께 찾아 자동으로 설치해주기 때문에 종속성 문제가 발생하지 않는다.
deb파일을 이용하는 기능이 없기 때문에 실질적으로는 dpkg와 함께 사용된다.

aptitude

패키지 작업 과정이 apt보다 더 자동화되어있는 high level 패키지 관리 도구로, GUI와 command-line 인터페이스(CLI) 양쪽에서 모두 작동된다.
apt-getapt-cache를 포함한 더 방대한 기능(설치된 패키지 목록 표시, 패키지 자동 또는 수동 설치 여부, 업그레이드에 사용할 수 없는 패키지 보관 등)을 가지고있으며, 대부분의 apt-get구문을 aptitude로 바꾸는 것으로 사용할 수 있다. 또한 apt는 패키지 설치, 제거 중 충돌이 일어날경우 종료되지만 aptitude는 해결 방법을 제시한다.


APPArmor

리눅스 커널의 오픈소스 보안모듈이다. Mandatory Access Control(MAC)으로 개별 프로그램에 대한 profile을 관리해 네트워크 엑세스 권한, raw 소켓 엑세스 권한, 파일의 읽기/쓰기/실행 권한을 통제하여 프로그램을 보호한다.

  • aa-enabled : APPArmor 활성화 여부 확인
  • aa-status : APPArmor 모드 확인
    • enforce mode : 허용되지 않은 파일의 접근을 거부
    • complain mode : 허용되지 않은 행동에 대한 로그를 기록(실질적 보안을 제공하지는 않음)

UFW(Uncomplicated FireWall)

데비안 계열 및 다양한 리눅스 환경에서 작동되는 사용하기 쉬운 방화벽 관리 프로그램이다. 구체적으로는 리눅스에서 방화벽 도구로 사용되는 iptables를 command-line 인터페이스를 통해 편리하게 사용하기 위해 이용되는 프로그램이다.

  • iptables : 커널상에서의 netfilter 패킷 필터링 기능을 사용자 공간에서 제어하는 수준으로 사용할 수 있게 해주는 도구
  • netfilter : 리눅스 커널 모듈, ip 패킷 필터링 프레임워크
  • 패킷 필터링(packet filtering) : 지나가는 패킷의 헤더를 보고 패킷을 허용(ACCEPT), 차단(DROP), 또는 그밖의 복잡한 무언가를 할지 결정하는 것
    패킷을 제어함으로써 외부 네트워크에 공개하거나 내부 네트워크 사용자에게 전해고자 하는 것을 적절히 선별할 수 있다.

LVM(Logical Volume Manager)

말 그대로 물리적인 공간을 LV(Logical Volume), 즉 논리적인 공간으로 할당하여 관리하는 프로그램이다.
파티션이 공간을 물리적으로 나눈 것에 불과하다면, LVM은 이를 논리적으로 다시 나누어 아래와 같은 유동적인 관리를 가능하게 해준다.

  • 여러개의 디스크 공간을 합쳐서 하나로 사용
  • 사용하기 애매한 공간의 디스크 파티션을 활용
  • 기존에 사용중인 디스크의 공간을 확장

image

위 그림을 보면 disk1의 일부와 disk2를 합쳐서 하나의 디스크처럼 사용하는 모습을 볼 수 있다.

  • 파티션(Partiton) : 하나의 물리 저장장치에서 시스템 내부적으로 나뉜 디스크 공간. 파티션 테이블에는 파티션 정보를 4개까지만 저장 가능
    • Primary - 실제 데이터를 저장. 운영체제 설치 가능, 최소 1개 ~ 최대 4개까지 생성 가능
    • Extended - 부족한 파티션 테이블 영역을 확장시키는 용도. Logical Partiton을 담는 바구니역할, 1개만 생성가능
    • Logical - 실제 데이터를 저장. 운영체제 설치 불가능, Extended Partiton의 범위 내에서 제한 없이 생성가능

LVM을 디스크에 적용시키는 과정은 다음과 같다.

  1. 디스크 공간을 LV로 사용하기 위한 PV(Pyshical Volumne)으로 변환한다. PVPE(Physical Extent)라는 4MB의 기본 단위로 이루어져있다. 즉, 디스크의 최소 공간 단위를 PE로 통일하는 과정이다.
  2. PV들을 한데 묶어 VG(Volume Group)으로 묶는다.
  3. VG에서 LV로 사용하고자 하는 공간만큼의 PELE(Logical Extent)로 분할한다.
  4. 이렇게 생성된 LV를 마운트하여 사용한다.
    • 마운트(mount) : 파티션의 자원을 사용하기 위해 현재 사용하고있는 운영체제에 고정(연결)하는 것. 즉, 디스크 공간과 디렉토리를 연결함. ex) USB 연결

매우 상세하게 정리되어있는 링크


Sudo

유닉스 계열 운영 체제에서 다른 사용자의 보안권한과 관련된 프로그램을 구동할 수 있게 해주는 명령어이다. 쉽게 말해 일반 사용자가 root권한을 잠시 빌려 명령을 실행할 수 있게 해주는 명령어라고 볼 수 있다.
root는 무한대의 권한을 가지고 있기 때문에 root 상에서 작업을 할 경우 보안상의 위험이 커진다. 따라서 이를 방지하기 위해 직접 root에서 작업을 하는 것이 아닌, sudo를 이용하여 안정성을 높일 수 있다.
root password의 공유를 막고 root에서의 작업과는 달리 로그가 남기 때문에 추적이 쉽다는 장점도 있다.

  • su와의 차이점 suSwitch User의 약자로 사용자를 전환하는 용도로 사용된다.
  • su (user) : 현재 계정의 환경변수를 사용하고, 현재 사용자를 로그아웃하지 않은 상태에서 다른 사용자의 계정으로 전환한다.
  • su - (user) : 다른 사용자의 계정으로 완전히 전환하고, 기존 사용자의 환경변수를 모두 지워버리고 워킹디렉토리를 홈디렉토리로 변경한다.
    sudo는 사용자를 전환하지 않고, root의 권한만을 빌려온다. 이 때 root가 아닌 사용자의 암호를 요구하며, 사용자는 /etc/sudoers에 등록되어있어야 한다.

TTY(Teletypewriter)

콘솔 및 터미널 환경을 뜻한다.

  • 콘솔 : 서버의 로컬 장치에서 직접 명령어를 작성할 수 있는 입출력장치
  • 터미널 : 서버의 로컬 또는 원격으로 접속할 수 있는 콘솔을 구현한 소프트웨어
  • 쉘 : 명령어를 해석하여 전달해주는 소프트웨어
  • pty(Pseudo-Terminal) : 가상 터미널 환경
  • pts(Pseudo-Terminal Slave) : 원격 터미널 환경

SSH(Secure Shell Protocol)

기존의 Telnet, Rlogin, RSH등의 프로토콜을 대체하는 네트워크 프로토콜의 한 종류로 네트워크 상의 다른 PC나 서버에 로그인, 원격 명령 실행, 파일 전송 등을 수행할 수 있는 보안 프로토콜이다.

  • 프로토콜(Protocol) : 컴퓨터나 네트워크 장비가 서로 통신하기 위해 미리 정해놓은 약속, 규약. ex) HTTP, HTTPS, FTP

모든 데이터는 암호화되며, 암호를 통해 호스트와 서버간의 연결을 네트워크 공격으로부터 보호할 수 있다. 작동 원리는 다음과 같다.

  1. 클라이언트가 서버에 원격 접속하기 위해 연결을 설정하는 프로세스를 시작함
    클라이언트는 포트로 서버에 SSH 접속 요청을 보내고, 서버는 클라이언트에 서버가 지원하는 프로토콜의 버전을 응답으로 보내줌.
  2. 서버가 자신의 공개키를 클라이언트에게 전송 클라이언트는 서버로부터 받은 공개키를 로컬에 저장
  3. 클라이언트는 공개키를 통해 접속하고자 하는 서버를 확인
    1. 클라이언트에서 난수 생성 및 해시값 저장, 공개키로 암호화 후 서버에 전송
    2. 서버에서 서버의 개인키로 암호화된 난수 복호화하여 추출, 해시값 생성 후 클라이언트에 전송
    3. 양측의 난수 해시값을 비교하여 동일할시 올바른 서버로 확인
  4. 세션키(대칭키) 생성, 서버와 클라이언트가 공유 대칭키는 개별 세션에 대해 생성되며 필요하지 않은 즉시 사라지기때문에 이전 세션키를 통해 수행한 통신 내용을 복호화할 수 없음
  5. 서버는 클라이언트의 접근 권한이 있는지 확인 패스워드 인증의 방법이 있으나 복잡성 설정의 한계가 있음
    많이 사용되는 것은 SSH 키 쌍을 사용하는 것. 키 쌍을 통한 인증은 앞서 서버의 확인 과정과 비슷함
  • 포트포워딩 : 공유기의 포트를 통해 이 공유기와 연결된 기기들의 특정 포트에 진입할 수 있게 하는 기능.

DHCP(Dynamic Host COnfiguration Protocol)

호스트의 IP 주소와 각종 TCP/IP 프로토콜의 기본 설정을 클라이언트에게 자동적으로 제공해주는 프로토콜이다. DHCP 서버를 사용하여 IP주소 및 관련된 기타 구성 세부정보(네임 서버 주소, 게이트웨이 주소 등)를 네트워크의 DHCP를 사용하는 클라이언트에게 동적으로 할당하는 방법을 제공한다.

  • 장점 : PC수가 많거나 자체 변동사항이 많은 경우 IP설정이 자동으로 되므로 효율적, IP충돌을 막을 수 있음
  • 단점 : DHCP 서버 다운시 IP 할당이 제대로 이루어지지 않음

Cron

고정된 간격을 갖는 지정 날짜 및 시간마다 주기적으로 정기적인 작업을 처리하기 위해 소프트웨어를 실행토록 환경을 설정하는 시간 기반 잡(job) 스케쥴러 성격의 데몬 프로세스.

  • 데몬(daemon) 프로세스 : 서비스의 요청에 대해 응답하기 위해 오랫동안 실행중인 백그라운드 프로세스

Lighttpd

적은 자원을 사용하여 높은 성능을 내는 오픈소스 웹 서버 어플리케이션이다. 빠른 처리 속도와 가벼운 용량이 장점이다.

  • 웹 서버(Web server) : 인터넷에서 사용하는 웹 페이지가 들어있는 파일(HTML)을 사용자에게 제공(렌더링)해주는 서버 프로그램. 주된 역할은 사용자가 요청한 페이지의 전달
    1. 사용자 > 웹 브라우저 > HTTP 프로토콜 > 웹 서버
    2. 웹 서버 (HTML 문서) > 웹 브라우저 > 사용자 Lighttpd 외에도 여러 종류의 웹 서버들이 존재한다.
      • Apache Web server - 거의 모든 운영체제에서 사용 가능한 오픈소스 무료 웹 서버, 구축이 쉽고 다양한 모듈을 제공하며 보안수준이 높음
      • Nginx Web server - 대규모 웹 트래픽의 처리시 고효율을 발휘하는 오픈소스 무료 웹 서버, Apache에 비해 가벼움

PHP

서버측에서 실행되는 프로그램 언어이다. 스크립트 형식으로 작성되어있으며, 웹개발에 특화되어 개인이 홈페이지를 쉽게 만들기 위해 개발되었다.
HTML에 추가시 서버에서 웹 페이지를 렌더링해준다.

  • CGI(Common Gateway Interface) : 웹서버와 외부 프로그램을 연결해주는 표준화된 프로토콜. 동적 웹 서버에 사용됨
    image
  • FastCGI : 하나의 요청에 하나의 프로세스를 생성하는 CGI와 달리 하나의 프로세스로 모든 요청들을 처리하여 부하 경감

MariaDB

오픈 소스의 관계형 데이터베이스 관리 시스템(RDBMS)로, MySQL과 동일한 소스 코드를 기반으로 한다. SQL 언어문을 통해 db를 관리한다.

  • MySQL : 전세계적으로 가장 널리 사용되고있는 오픈 소스 데이터베이스

WordPress

오픈 소스를 기반으로 한 설치형 블로그 또는 CMS(Content Management System)이다.
전세계 웹사이트의 43%가 wordpress로 제작되어있다고 한다.

FTP(File Transfer Protocol)

참고한 링크
서버와 클라이언트 사이에서 TCP/IP를 통해 파일을 송수신하기 위해 고안된 프로토콜이다. 빠른 파일 송수신만을 목적으로 두고 고안되어 보안에는 취약하다고 한다.
제어 포트인 21번 포트에서 클라이언트와 서버 사이의 명령, 제어등을 송수신하고 데이터 포트인 20번 포트에서 클라이언트와 서버 사이의 직접적인 파일 송/수신을 담당한다.
처음 연결시에는 Active mode에서 21번 포트로 서로 신호를 주고받은 후 클라이언트가 서버에 20번 포트로 연결할것을 요구하는데, 방화벽ㅇ로 인해 연결이 제대로 이루어지지 않을 수 있다. 이 때는 Passive mode에서 서버가 클라이언트에게 연결할 포트를 알려주어야 한다.

  • Vsftpd(Very secure ftp daemon) : linux에서 사용할 수 있는 ftp 서버 프로그램으로 보안/성능/안정성이 우수하다.