본 Subject를 진행하기 위한 리눅스 개념 잡기
SELinux
AppArmor
둘의 차이점
보안 모델 :
- DAC (임의 접근 제어, Discretionary Access Control)
- 소유자가 사용자 또는 그룹이 자원에 접근하는 것을 조절 (소유자 자유재량)
- 주체(소유자)가 객체(파일)를 제어
- 계정과 소유권에만 기반
- MAC (강제 접근 제어, Mandatory Access Control)
- 정의된 정책을 활용해 사용자와 프로세스의 행동 제어
- 파일의 유형, 사용자의 역할, 프로그램의 기능과 신뢰도, 데이터의 민감성과 무결성 고려
우분투에서 패키지를 관리하는 툴에는 apt
, dpkg
, aptitude
가 있다.
apt
apt
는 온라인 리포지토리에서 패키지를 다운로드받고 설치하는데 사용된다.
실질적으로 apt
는 dpkg
와 함께 동작한다. 하지만, 필요한 소프트웨어의 검색, 다운로드, 설치, 업그레이드, 검사 등 대부분의 패키지 관리작업을 apt
단독으로 가능하다.
dpkg
dpkg
는 Cd룸이나 다른 디스크장치에 있는 .deb 파일을 제어하는 경우에 일반적으로 사용되며, dpkg
명령어는 시스템 소프트웨어에 대한 설정이나 설치 및 정보를 얻는데 사용되는 옵션을 가진다.
apt
보다는 낮은 수준에서 작업이 수행된다. apt
는 우분투의 소프트웨어를 관리하기 위해 내부적으로 dpkg
를 이용한다. 보통 apt
명령 만으로 충분하지만 시스템에 있는 특정 파일이 어떤 패키지에 포함되는지 등의 확인 작업을 수행하기 위해 dpkg
명령이 필요한 것이다.
aptitude
dpkg
와 apt
의 경우 제대로 사용하기 위해서는 좀 더 많은 지식을 요구한다. 그에 비하여 aptitude
의 경우 주요 패키지 작업 과정을 자동화하여 가능한 쉽게 작업할 수 있도록 해주므로 보다 쉽게 할 수 있다.
리눅스에서 디스크를 효율적으로 관리하고 사용하기 한 방법으로는 LVM
과 RAID
기술이 있다.
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
가 새롭게 나누는 논리적인 LV
의 LE
와 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 맵핑하게 된다.
SSH
(Secure Shell)는 컴퓨터와 컴퓨터가 인터넷과 같은 Public Network를 통해 서로 통신을 할 때 보안적으로 안전하게 사용하기 위해 사용하는 네트워크 프로토콜이다.
대표적인 사용 예 :
FTP나 Telnet과 같은 다른 컴퓨터와 통신을 위해 사용하는 프로토콜도 있는 반면 SSH
를 사용하는 이유는 보안
이다. FTP나 Telnet은 민감한 정보(로그인 정보 등)를 주고 받기에는 정보를 직접 네트워크를 통해 넘기기 때문에 누구나 해당 정보를 열어볼 수 있으므로 보안에 상당히 취약하다. 반면 SSH
는 먼저 보안적으로 훨씬 안전한 채널을 구성한 뒤 정보를 교환하기 때문에 민감한 정보를 주고 받기에 훨씬 유용하다.
SSH 작동 원리
SSH
는 다른 컴퓨터와 통신을 하기 위해 접속을 할 때 우리가 일반적으로 사용하는 비밀번호의 입력을 통한 접속을 하지 않는다. 기본적으로 SSH
는 한 쌍의 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를 활용해 메시지를 암호화하고 복호화하며 데이터를 주고 받을 수 있게 된다.
우리가 사용하는 리눅스 환경은 기본적으로 TTY
(Teletypewriter) 위에 그려져 있다. 즉, 데스크탑 GUI (xwindows) 환경은 실질적으로 콘솔
위에 올려져 있는 형태인 것이다.
콘솔은 CLI 혹은 CUI라고도 불리며 컴퓨터를 운용하기 위한 목적으로 텍스트를 사용자와 컴퓨터가 주고 받는 인터페이스를 말한다. 정확하게 말하자면 xwindow 데스크탑 환경에서 작동하는 콘솔은 pts/1에 올려져 있다.
전체 콘솔은 다음과 같은 구성을 가지고 있다 :
콘솔모드는 모니터, 키보드로 직접 본체에 연결된 모드를 말하고, 2번째 콘솔부터가 가상콘솔이다. 2번째 모니터, 키보드는 실제로 존재하지 않으니까 가상(pseudo)이라는 말이 붙는다.
Ctrl + Alt + F2
를 누르면 2번째 가상콘솔로 이동하고 사용가능한 콘솔은 6번까지 있다. 7번부터는 ttyN이 아닌 xwindows(pts/N)환경으로 돌아온다.
터미널모드는 본체의 LAN으로 연결된 모드를 말하며, 원격 접속을 의미한다. PTY(pseudo-terminal, 가상터미널)
참고 사이트 :