Born2beRoot 선행 지식

개발새발·2021년 5월 31일
0

42Cursus

목록 보기
5/29
post-thumbnail

Born2beRoot

본 Subject를 진행하기 위한 리눅스 개념 잡기

 

1. SELinux & AppArmor

SELinux

  • Security-Enhanced Linux
  • 미국 국방부 스타일의 강제 접근 제어(MAC)를 포함한 접근 제어 보안 정책을 지원하는 매커니즘을 제공하는 리눅스 커널 보안 모듈
  • 다양한 리눅스 배포판에 추가할 수 있는 커널 수정 및 사용자 공간 도구들의 모임
  • 레드햇 계열 (RHEL, Fedora, CentOS)
  • MAC 적용 (전통적인 Linux는 DAC)
  • 시스템 전체에 보안 설정

AppArmor

  • Application Armor
  • 시스템 관리자가 프로그램 프로필 별로 프로그램의 역량을 제한할 수 있게 해주는 리눅스 커널 보안 모듈
  • SUSE 계열 (SUSE Linux), 데비안 계열 (Debian, Ubuntu)
  • MAC 적용 (전통적인 Linux는 DAC)
  • 개별 응용 프로그램을 보호하는 일에 집중
  • 응용 프로그램 단위의 보안 모델 구현
  • AppArmor는 SELinux를 대체하는 한 부분으로서 제공

둘의 차이점

  • 파일에 라벨을 적용하는 것에 기반하는 SELinux와는 달리, AppArmor는 파일 경로를 통해 작동
  • 비슷한 접근법을 취하긴 하지만 SELinux는 경로 대신 아이노드 번호로 파일 시스템 객체들을 구별
    ex) 하드 링크가 생성됐을 때 아이노드에 참조되는 데이터가 같을 것이기 때문에 SELinux가 계속 새로 생성된 하드 링크에 대한 접근을 거부하는 것과 달리 AppArmor에서는 접근 가능

 

보안 모델 :

  • DAC (임의 접근 제어, Discretionary Access Control)
    • 소유자가 사용자 또는 그룹이 자원에 접근하는 것을 조절 (소유자 자유재량)
    • 주체(소유자)가 객체(파일)를 제어
    • 계정과 소유권에만 기반
  • MAC (강제 접근 제어, Mandatory Access Control)
    • 정의된 정책을 활용해 사용자와 프로세스의 행동 제어
    • 파일의 유형, 사용자의 역할, 프로그램의 기능과 신뢰도, 데이터의 민감성과 무결성 고려

 

2. apt & aptitude

우분투에서 패키지를 관리하는 툴에는 apt, dpkg, aptitude가 있다.

  • apt

    apt는 온라인 리포지토리에서 패키지를 다운로드받고 설치하는데 사용된다.
    실질적으로 aptdpkg와 함께 동작한다. 하지만, 필요한 소프트웨어의 검색, 다운로드, 설치, 업그레이드, 검사 등 대부분의 패키지 관리작업을 apt단독으로 가능하다.

  • dpkg

    dpkg 는 Cd룸이나 다른 디스크장치에 있는 .deb 파일을 제어하는 경우에 일반적으로 사용되며, dpkg명령어는 시스템 소프트웨어에 대한 설정이나 설치 및 정보를 얻는데 사용되는 옵션을 가진다.
    apt보다는 낮은 수준에서 작업이 수행된다. apt는 우분투의 소프트웨어를 관리하기 위해 내부적으로 dpkg를 이용한다. 보통 apt명령 만으로 충분하지만 시스템에 있는 특정 파일이 어떤 패키지에 포함되는지 등의 확인 작업을 수행하기 위해 dpkg 명령이 필요한 것이다.

  • aptitude

    dpkgapt의 경우 제대로 사용하기 위해서는 좀 더 많은 지식을 요구한다. 그에 비하여 aptitude의 경우 주요 패키지 작업 과정을 자동화하여 가능한 쉽게 작업할 수 있도록 해주므로 보다 쉽게 할 수 있다.

 

3. LVM

리눅스에서 디스크를 효율적으로 관리하고 사용하기 한 방법으로는 LVMRAID 기술이 있다.

LVM(Logical Volume Manager)는 리눅스 안에서 하나의 디스크를 여러 파티션으로 분할해서 파일 시스템을 이용해 특정 디렉터리와 연결시켜 사용한다. 파티션을 논리적인 개념인 볼륨으로 나눠서 더 유동적으로 디스크의 용량을 관리할 수도 있다. 볼륨은 기본적으로 단일 파티션에 상주하게 되지만 다수의 파티션을 하나의 볼륨으로 관리할 수도 있다. 그래서 여러개의 파티션을 합치거나 분할하기에 용이하다.

  • 파티션

    디스크는 파티션이라는 논리적인 크기로 분할 / 통합해서 사용한다. 하나의 디스크를 여러 개로 분할하기도 하고 여러 개의 디스크를 하나의 파티션으로 통합하기도 한다.

    파티션은 고정적이고 물리적인 개념이 강하며 한 번 크기를 설정하면 변경하거나 추가하기 힘들고 OS는 각 파티션을 별도의 디스크처럼 인식한다.

  • 볼륨

    파일 시스템으로 포맷된 디스크 상의 저장 영역이라고도 하며 파티션과 비슷한 개념이지만 엄연히 다르다.

    볼륨은 디스크의 단일 파티션에 상주하게 되며 파티션보다 논리적이로 유동적이다. 우리는 하나의 디스크를 여러 개의 파티션으로 나누어 사용한다. 이때 볼륨은 파티션마다 하나씩 존재하기도 하고, 여러 파티션에 하나만 존재할 수도 있다.

Ex)

물리 디스크 파티션 볼륨 1 볼륨 2
하드디스크 파티션 1 C:드라이브 LVM(가상)
파티션 2 D:드라이브

디스크를 2개의 파티션으로 나누었을 때, 각각의 파티션마다 1개의 볼륨을 가져 총 2개의 볼륨을 가질 수도 있고 2개의 파티션이 1개의 볼륨을 가질 수도 있다.

 

리눅스에서 디스크를 사용하는 가장 기본적인 방법은 디스크를 파티션으로 나누어 각각의 디렉터리에 파일 시스템으로 마운트 한 뒤 지정된 위치에 데이터를 저장해서 사용하는 것이다.
(디스크 → 파티션 → 볼륨그룹 → 논리그룹 → 파일시스템(/home))

LVM을 적용하게 되면 디스크를 변경, 추가할 때 물리적인 부분을 건드릴 필요가 없어 여러 디스크를 하나로 뭉쳐서 사용할 수도 있고 하나의 디스크를 여러 디스크인 것 처럼 나누어 사용할 수도 있다.
사용 중인 파티션의 크기를 바꿀 수도 있고 디스크를 추가한 뒤 간단한 작업을 통해 용량을 확장시킬 수도 있다.

물리 디스크 물리 디스크
파티션 파티션
물리 볼륨 물리 볼륨
파일 시스템 논리 그룹 (LVM)
논리 그룹 (LVM)
파일 시스템

 

디스크를 좀 더 유연하게 사용하기 위해 물리적인 파티션을 논리적인 볼륨으로 바꿔서 사용한다. LVM에서는 여러 파티션을 하나의 논리적인 볼륨으로 묶은 뒤 다시 필요한 크기만큼 나눠서 사용할 수 있다.

LVM의 구성 :

  • PV(Physical Volume)

    • 물리적 볼륨으로 디스크를 LVM에서 사용할 수 있게 변환하는 작업
    • 디스크의 파티션을 PV로 초기화시켜 일정한 크기의 PE로 구성
  • VG(Volume Group)

    • PV가 모여 만들어진 그룹
    • 물리적인 일정한 크기의 PE로 구성된 PV들이 모여 VG가 만들어짐
    • VG는 다시 LV로 할당할 수 있는 공간을 말하기도 함
  • PE(Physical Extent)

    • PV에서 나누어 사용하는 블록
    • 보통 1PE의 크기는 4MB이며 VG가 새롭게 나누는 논리적인 LVLE와 1:1 대응
  • LV(Logical Volume)

    • VG에서 사용자가 필요한 만큼 할당되서 만들어지는 공간
    • 논리적인 파티션이라고 볼 수 있으며 이는 다시 LE로 나누어짐
  • LE(Logical Extent)

    • LV가 나누어진 일정한 크기의 블록으로 물리적 크기인 PE와 1:1 대응
물리 디스크
파티션1 파티션2
PV (물리적 볼륨) PV (물리적 볼륨)
PE (4MB) PE (4MB) PE (4MB) PE (4MB)
VG (볼륨 그룹)
LV (논리적 볼륨) LV (논리적 볼륨)
LE (4MB) LE (4MB) LE (4MB) LE (4MB)

 

물리적인 크기를 논리적인 크기로 바꿔서 분할, 결합이 더 유연하다.
물리적 크기인 PE는 논리적 크기인 LE와 1:1 맵핑하게 된다.

 

4. SSH

SSH(Secure Shell)는 컴퓨터와 컴퓨터가 인터넷과 같은 Public Network를 통해 서로 통신을 할 때 보안적으로 안전하게 사용하기 위해 사용하는 네트워크 프로토콜이다.

대표적인 사용 예 :

  • 데이터 전송 (소스 코드를 원격 저장소인 GitHub에 Push할 때)
  • 원격 제어 (AWS와 같은 클라우드 서비스에 접속하여 해당 머신에 명령을 내릴 때)

FTP나 Telnet과 같은 다른 컴퓨터와 통신을 위해 사용하는 프로토콜도 있는 반면 SSH를 사용하는 이유는 보안이다. FTP나 Telnet은 민감한 정보(로그인 정보 등)를 주고 받기에는 정보를 직접 네트워크를 통해 넘기기 때문에 누구나 해당 정보를 열어볼 수 있으므로 보안에 상당히 취약하다. 반면 SSH는 먼저 보안적으로 훨씬 안전한 채널을 구성한 뒤 정보를 교환하기 때문에 민감한 정보를 주고 받기에 훨씬 유용하다.

SSH 작동 원리

SSH는 다른 컴퓨터와 통신을 하기 위해 접속을 할 때 우리가 일반적으로 사용하는 비밀번호의 입력을 통한 접속을 하지 않는다. 기본적으로 SSH는 한 쌍의 Key를 통해 접속하려는 컴퓨터와 인증 과정을 거치게 된다. 한 쌍의 키는 다음과 같다 :

  • Private Key
  • Public Key

Public Key는 공개되어도 비교적 안전한 Key이다. 이 Public Key를 통해 메시지를 전송하기 전 암호화를 하게 된다. Public Key로는 암호화는 가능하지만 복호화는 불가능하다.

이와 쌍을 이루는 Private Key는 절대로 외부에 노출이 되어서는 안되는 Key로 본인의 컴퓨터 내부에 저장하게 되어있다. 이 Private Key를 통해 암호화된 메시지를 복호화할 수 있다.

이 한 쌍의 Public Key와 Private Key는 서로 매우 복잡한 수학적인 관계를 맺고 있다. Private Key와 Public Key를 통해 다른 컴퓨터와 통신을 하기 위해서는 먼저 Public Key를 통신하고자 하는 컴퓨터에 복사하여 저장한다. 그리고 요청을 보내는 클라이언트 사이드 컴퓨터에서 접속 요청을 할 때 응답을 하는 서버 사이드 컴퓨터에 복사되어 저장된 Public Key와 클라이언트 사이드에 해당 Public Key와 쌍을 이루는 Private Key와 비교를 하여 서로 한 쌍의 Key인지 아닌지를 검사한다.

이렇게 서로 관계를 맺고 있는 Key라는 것이 증명이 되면 비로소 두 컴퓨터 사이에 암호화된 채널이 형성이 되어 Key를 활용해 메시지를 암호화하고 복호화하며 데이터를 주고 받을 수 있게 된다.

 

4. TTY

우리가 사용하는 리눅스 환경은 기본적으로 TTY(Teletypewriter) 위에 그려져 있다. 즉, 데스크탑 GUI (xwindows) 환경은 실질적으로 콘솔위에 올려져 있는 형태인 것이다.

콘솔은 CLI 혹은 CUI라고도 불리며 컴퓨터를 운용하기 위한 목적으로 텍스트를 사용자와 컴퓨터가 주고 받는 인터페이스를 말한다. 정확하게 말하자면 xwindow 데스크탑 환경에서 작동하는 콘솔은 pts/1에 올려져 있다.

전체 콘솔은 다음과 같은 구성을 가지고 있다 :

  • /dev(device)
    • TTY(일반 CLI 콘솔)
      • TTYs(시리얼 tty)
      • PTS(기본 xwindows를 위한 가상 콘솔)
        • PTY(외부의 원격 접속을 위한 가상 콘솔)

콘솔모드는 모니터, 키보드로 직접 본체에 연결된 모드를 말하고, 2번째 콘솔부터가 가상콘솔이다. 2번째 모니터, 키보드는 실제로 존재하지 않으니까 가상(pseudo)이라는 말이 붙는다.

Ctrl + Alt + F2를 누르면 2번째 가상콘솔로 이동하고 사용가능한 콘솔은 6번까지 있다. 7번부터는 ttyN이 아닌 xwindows(pts/N)환경으로 돌아온다.

터미널모드는 본체의 LAN으로 연결된 모드를 말하며, 원격 접속을 의미한다. PTY(pseudo-terminal, 가상터미널)

 

참고 사이트 :

profile
블록체인 개발 어때요

0개의 댓글