데비안 10(buster) 설치

한국 데비안 사용자 모임
둘러보기로 가기 검색하러 가기

80x15.png Westporch에 의해 작성된 <데비안 10(buster) 설치>는 크리에이티브 커먼즈 저작자표시-동일조건변경허락 4.0 국제 라이선스에 따라 이용할 수 있습니다.

<데비안 10(buster) 설치> 문서를 통해 데비안 10(buster) 뿐만 아니라 데비안 9(stretch)도 설치할 수 있습니다.

서문

Buster?

Buster는 애니메이션 Toy Story 시리즈에 등장하는 강아지입니다.


데비안 10(buster) 설치 방법에 대한 안내

데비안 10(buster)와 기존 데비안(jessie, stretch 등)의 설치 방법은 동일합니다. 크게 달라진 점이 없습니다.

객체 지향의 캡슐화(encapsulation)라는 개념을 데비안 인스톨러에 적용해 볼까요? 프로그래머가 기존 프로그램의 내부 로직 등을 변경해도 사용자에게 기존과 동일한 인터페이스를 제공한다면 사용자는 기존과 동일하게 프로그램을 사용할 수 있습니다. 예를 들어 새로운 차(車)가 기존의 모델보다 성능이 뛰어난 엔진을 장착했다고 해서 우리가 새로운 운전 방법을 익힐 필요는 없습니다. 평소처럼 차(車)를 운전하면 됩니다. 차(車)와 데비안의 관계를 아래와 같이 유사코드(pseudo-code)로 나타내 봤습니다.

새로운 차(車) ← 데비안 10(buster)
뛰어난 엔진 ← buster에 적용된 커널
운전 방법 ← 데비안 10(buster)의 설치 방법

마찬가지로 메이저(major) 버전이 릴리스된 데비안이 나와도 평소와 동일하게 데비안을 설치하면 됩니다. 저는 데비안 4.x(etch)를 처음 접하고 지금까지 사용하고 있습니다. 버전 4.x 부터 버전 10까지 데비안의 설치 방법은 동일합니다. 크게 달라진 점이 없습니다. 만약 약간의 달라진 점이 있다면 기존과 동일한 인터페이스를 제공했기 때문에 제가 미처 느끼지 못한 것이라 생각합니다. 또한 앞으로 메이저 버전의 릴리스가 있어도 데비안 설치 방법은 기존과 동일할 것이라고 예상하며 그래야만 한다고 생각합니다.

설치 환경

Windows 10(host)에서 버추얼박스를 사용하여 데비안 buster(guest)를 텍스트 모드로 설치했습니다.


Host HW 정보

CPU 메모리 디스크 NIC 노트북 제조사/모델명
Intel(R) Core(TM) i5-3317U CPU @ 1.70GHz 4G * 2ea (DDR3) SSD 120G Realtek PCIe GBE Family Controller SAMSUNG/NT900X4C


Host 기본 정보

OS Virtualbox Network IP
Windows 10 Enterprise (64bit) v5.2.8 r121009 (Qt5.6.2) DHCP 192.168.0.5/24


Guest 기본 정보

OS Kernel RAM Disk Network IP
Debian GNU/Linux testing (buster)/alpha2 4.13.13-1 1GB 8GB (가상 하드디스크, vdi) 어댑터에 브리지 192.168.0.11/24

데비안 10(buster)를 설치 완료한 후에 확인한 파티션 정보는 다음과 같습니다.

root@debian-buster:~# parted -l
Model: ATA VBOX HARDDISK (scsi)
Disk /dev/sda: 8590MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number  Start   End     Size    Type      File system     Flags
 1      1049kB  7516MB  7515MB  primary   ext4            boot
 2      7517MB  8589MB  1072MB  extended
 5      7517MB  8589MB  1072MB  logical   linux-swap(v1)
root@debian-buster:~# fdisk -l
Disk /dev/sda: 8 GiB, 8589934592 bytes, 16777216 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xe5f976fd

Device     Boot    Start      End  Sectors  Size Id Type
/dev/sda1  *        2048 14680063 14678016    7G 83 Linux
/dev/sda2       14682110 16775167  2093058 1022M  5 Extended
/dev/sda5       14682112 16775167  2093056 1022M 82 Linux swap / Solaris

설치 이미지 다운로드

위 주소에서 데비안 10(buster) iso 파일을 내려받습니다. Intel CPU(64bit)를 사용한다면 amd64 아키텍처를 선택하면 됩니다. 저는 debian-buster-DI-alpha2-amd64-DVD-1.iso를 다운로드 했습니다. 저처럼 꼭 DVD 이미지를 다운로드할 필요는 없습니다. 대부분의 사람들은 netinst(network install) iso를 주로 사용합니다.

netinst iso는 buster를 설치하기 위한 최소한의 설치 이미지라고 생각하면 됩니다. 그래서 iso 파일의 용량은 150~280MB 정도입니다. netinst로 설치시 나머지 시스템 운영에 필요한 프로그램들은 네트워크를 통해 설치합니다.

반면에 DVD iso는 시스템을 운영하기 위한 기본 패키지들을 대부분 포함하고 있습니다. 그래서 꼭 네트워크를 통해 설치하지 않아도 DVD iso 자체만으로도 buster를 설치할 수 있습니다. 그래서 netinst iso에 비해 용량이 매우 큽니다 (대략 3.6 ~ 4.4G). 대신에 네트워크를 통해 추가 패키지를 설치하더라도 대부분의 패키지들이 DVD iso에 있기 때문에 추가로 다운로드할 패키지들을 적기때문에 netinst 보다 buster를 빠르게 설치할 수 있습니다.

결론은 자신이 선호하는 유형(netinst 또는 DVD)의 iso를 다운로드하면 됩니다.


iso 파일의 무결성 검증

다운로드한 iso 파일이 서버에 있는 iso 파일과 동일한지 무결성(integrity)을 검증해볼 필요가 있습니다. 왜냐하면 다운로드를 하면서 오류가 발생할 수도 있기 때문입니다. 물론 우리가 다운로드한 iso 파일은 대부분 원본과 동일할 것 입니다. 하지만 꼼꼼해서 나쁠 것은 없습니다.

데이터 통신에서 전송된 데이터의 오류를 검출하기 위해서 패리티 비트(parity bit) 또는 해밍 코드(hamming code)를 사용합니다. 해밍 코드는 오류의 검출 뿐만 아니라 오류의 수정도 가능하기 때문에 ECC(Error-Correcting Code) 메모리에서도 사용합니다. ECC 메모리를 사용할 경우에는 일반 메모리와는 달리 오류의 검출 및 수정을 할 수 있습니다. 파일(file)에 대한 무결성을 검증하기 위해서는 해시(hash) 함수를 사용합니다. 서버에 있는 iso 파일과 우리가 다운로드한 iso 파일의 해시 값이 같다면 올바른 파일이므로 안심하고 사용해도 됩니다. 만약 해시 값이 서로 일치하지 않다면 iso 파일을 다시 다운로드 해야합니다. 참고로 해시 값은 메시지 다이제스트(message digest) 또는 핑거프린트(fingerprint)라고도 부릅니다.

리눅스에서 해시 값을 검증하는 도구로 md5sum을 사용합니다. md5sum은 데비안에 기본적으로 내장되어 있기 때문에 별도로 설치할 필요가 없습니다. md5sum은 MD5라는 해시 알고리즘을 사용합니다. 참고로 MD는 Message Digest를 의미하며 해시 알고리즘에는 MD5 뿐만 아니라 MD4, SHA 등도 있습니다.

서버에 iso 파일이 저장된 위치에 있는 MD5SUMS파일에서 iso 파일의 해시 값을 확인할 수 있습니다. MD5SUMS의 내용은 다음과 같습니다.

3b0b59c40f896c881b9e53635815907f  debian-buster-DI-alpha2-amd64-DVD-1.iso
2a319f3ec24ce80e48777b6bfac5cc58  debian-buster-DI-alpha2-amd64-DVD-10.iso
7f8c7aeed55b8a89f2937127f4388714  debian-buster-DI-alpha2-amd64-DVD-11.iso
a7fab3afe9da26f8f2c217b80cc95f44  debian-buster-DI-alpha2-amd64-DVD-12.iso
8f6dc89a5b24c832ba7900113752f555  debian-buster-DI-alpha2-amd64-DVD-13.iso
44996983766328a49dd0651a3b9ca463  debian-buster-DI-alpha2-amd64-DVD-14.iso
fb19033593e82b077663dcfcfc788b93  debian-buster-DI-alpha2-amd64-DVD-2.iso
16f810a06a30827361d82ac3643e0c55  debian-buster-DI-alpha2-amd64-DVD-3.iso
112d8c1aae30a04acd17f632fee41625  debian-buster-DI-alpha2-amd64-DVD-4.iso
8f64206cbeb701f01ce326a6f80e7cd4  debian-buster-DI-alpha2-amd64-DVD-5.iso
b0bd852b08b8d70529ef18e7734abd6f  debian-buster-DI-alpha2-amd64-DVD-6.iso
dd9a6778429755030e3431b41dfc2bfb  debian-buster-DI-alpha2-amd64-DVD-7.iso
223b459188cd67a5528bd8fa81e242ae  debian-buster-DI-alpha2-amd64-DVD-8.iso
be484010a192d5b11b0709033553c721  debian-buster-DI-alpha2-amd64-DVD-9.iso

위 화면에서 정상적인 debian-buster-DI-alpha2-amd64-DVD-1.iso 파일의 해시 값은 3b0b59c40f896c881b9e53635815907f임을 알 수 있습니다.

이제 다운로드한 debian-buster-DI-alpha2-amd64-DVD-1.iso 의 해시 값을 아래와 같이 구합니다. 프롬프트에 md5sum debian-buster-DI-alpha2-amd64-DVD-1.iso을 입력하면 됩니다.

# md5sum debian-buster-DI-alpha2-amd64-DVD-1.iso
3b0b59c40f896c881b9e53635815907f  debian-buster-DI-alpha2-amd64-DVD-1.iso

서버에 있는 iso 파일과 다운로드한 iso 파일의 해시 값이 서로 같으므로 해당 파일을 안심하고 사용해도 됩니다.

참고로 해시함수는 시스템의 무결성(integrity)을 점검하는 트립와이어(tripwire)에서도 사용합니다. 정보 보안에서 중요한 목표 중의 하나는 무결성입니다. 트립와이어를 사용하면 시스템에 침입한 공격자가 파일을 변경했는지를 알아차릴 수 있습니다. 왜냐하면 트립와이어는 시스템의 파일들을 시스템의 파일들에 대한 해시 값을 가지고 있기 때문입니다. 만약 공격자가 파일을 변조했다면 해당 파일의 해시 값이 변경되기 때문에 파일이 변조되었음을 알아차릴 수 있습니다. 유사하게 안티 바이러스(antivirus) 프로그램도 해시 함수를 통해 시스템의 바이러스를 검출합니다.


만약 USB로 buster를 설치한다면 윈도우에서는 Win32 Disk Imager를 사용하거나 리눅스에서는 dd 명령어를 사용해서 이미지를 구우면 됩니다. Win32 Disk Imager나 dd 명령어의 구체적인 사용법은 생략합니다.

인스톨러 부트 메뉴

debian-buster-DI-alpha2-amd64-DVD-1.iso로 부팅하면 아래와 같은 화면이 나타납니다. GUI가 아닌 텍스트 모드(Text mode)로 데비안을 설치할 것이므로 두 번째 항목의 'Install'을 선택한 후 엔터 키를 누릅니다. 반드시 텍스트 모드로 설치할 필요는 없습니다. 만약 GUI 환경으로 데비안을 설치하고자 한다면 첫 번째 항목의 'Graphical install'을 선택한 후 엔터 키를 누르면 됩니다.

1 (Debian10 install) install.png


언어 선택

'한국어'를 선택합니다. 이제 설치 과정 및 향후 시스템에 사용할 기본 언어는 한국어로 설정됩니다.

2 (Debian10 install) Select a language.png


'예'를 누르고 한국어로 설치를 진행합니다.

2-1 (Debian10 install) Agree-installation.png


위치(지역) 선택

'대한민국'을 선택합니다. 대~한~민~국~! ⚽

3 (Debian10 install) Location.png


키맵 설정

키맵으로 '한국어'를 선택합니다.

4 (Debian10 install) Keymap.png


네트워크 설정(호스트 이름 설정)

저는 DHCP를 사용하고 있어서 네트워크는 자동으로 설정되었습니다. 따라서 네트워크 설정 단계에서는 호스트 이름만 설정하면 됩니다. 호스트 이름은 'debian-buster'로 설정했습니다. 호스트 이름은 아래의 조합으로 구성하는 것이 좋습니다. 되도록이면 알파벳 대문자는 사용하지 않는 것이 좋습니다.

  • 알파벳 소문자 a ~ z
  • 숫자 0 ~ 9
  • 하이픈 (-)

6 (Debian10 install) Hostname.png


도메인 이름은 별도로 설정하지 않아도 됩니다. '<계속>'을 선택한 후 엔터 키를 누릅니다.

7 (Debian10 install) Domain name.png

계정 설정

root 비밀번호 설정

루트(root·최고 관리자) 계정에서 사용할 비밀번호를 입력합니다.

8 (Debian10 install) Account-root pw.png


다시 한 번 루트의 비밀번호를 입력합니다.

8-1 (Debian10 install) Repeat-root pw.png


일반 사용자 계정 생성

새로 생성할 사용자의 전체 이름을 적습니다. 이 단계에서 입력하는 이름은 /etc/passwd 파일의 다섯 번째 필드에 저장됩니다. 이 필드에는 주로 사용자 정보(사용자의 실제 이름, 전화번호 등)가 저장됩니다.

root@debian-buster:~# cat /etc/passwd | grep westporch
westporch:x:1000:1000:westporch,,,:/home/westporch:/bin/bash

위 명령의 실행 결과는 buster 설치를 완료한 후에 확인한 모습입니다. 사용자의 전체 이름을 'westporch'로 설정했지만 실제로는 ',,,'가 붙어서 'westporch,,,'로 저장됩니다.

8-2 (Debian10 install) User-real name.png


새로 만들 계정의 사용자 이름은 리눅스 시스템에서 로그인할 때 사용합니다. 즉 사용자 ID를 지정합니다. 저는 'westporch'로 설정했습니다. 여기서 설정하는 이름(ID)은 /etc/passwd 파일의 첫번 째 필드에 저장됩니다.

root@debian-buster:~# cat /etc/passwd | grep westporch
westporch:x:1000:1000:westporch,,,:/home/westporch:/bin/bash

8-3 (Debian10 install) Username.png


새로 생성할 계정(westporch)의 비밀번호를 입력합니다.

8-4 (Debian10 install) Set-user pw.png


새로 생성할 계정(westporch)의 비밀번호를 다시 한 번 입력합니다.

8-5 (Debian10 install) Repeat-user pw.png


/etc/shadow에 대하여[1]

아래 실행 결과에서 root와 westporch 계정의 비밀번호가 'x'라는 뜻이 아닙니다. 두 번째 필드의 'x'는 crypt 함수를 이용해서 얻은 ‘해시 값’이 섀도 파일(/etc/shadow)의 두 번재 필드에 위치한다는 것을 의미합니다. 암호화된 데이터가 아니라는 해시 값이라는 것에 주의해야 합니다.

root@debian-buster:~# cat /etc/passwd | grep root
root:x:0:0:root:/root:/bin/bash
root@debian-buster:~# cat /etc/passwd | grep westporch
westporch:x:1000:1000:westporch,,,:/home/westporch:/bin/bash

crypt 함수는 내부적으로 해시 알고리즘(MD5, SHA-256, SHA-512)을 사용합니다. 물론 crypt 함수는 대칭 키 암호 알고리즘 중의 하나인 DES(Data Encryption Standard)도 지원합니다. 하지만 DES는 키 길이(56비트)가 짧기 때문에 DES를 사용하는 것은 안전하지 않습니다. 2^56의 경우의 수는 금방 뚫립니다. 따라서 DES는 절대로 사용하면 안됩니다. 암호 알고리즘이라고 모두 안전한 것은 아닙니다.

RSA사가 주관한 DES의 키 찾아내기 콘테스트(DES Challenge)에서 1997년의 DES Challenge Ⅰ에서는 96일, 1998년의 DES Challenge Ⅱ-2에서는 56시간, 1999년의 DES Challenge Ⅲ에서는 22시간 15분 만에 DES 키가 깨졌습니다. [2]

DES는 1977년에 미국의 연방정보처리표준규격(FIPS: Federal Information Processing Standard)으로 채택[3]되었습니다. 하지만 2005년에 DES는 FIPS에서 제외되었습니다. [4]

이뿐만 아니라 인증성을 제공하는 커버로스(Kerberos) 버전 4에서도 그동안 DES를 사용했지만 커버로스를 개발한 MIT(Massachusetts Institute of Technology)에서도 커버로스 버전 5로 마이그레이션 할 것을 권고하고 있습니다. 왜냐하면 커버로스 버전 5는 커버로스 버전 4에서 제공하던 DES보다 향상된 암호화 기능을 제공하기 때문입니다.[5]

또한 crypt 함수는 DES의 약점을 보완하기 위해서 glibc2에서는 대칭키 암호 알고리즘인 blowfish와 해시 알고리즘인 MD5, SHA-256, SHA-512를 지원합니다.

해시 함수는 일방항성(one-way)을 갖기 때문에 섀도 파일의 두 번재 필드에 저장된 해시 값은 절대로 역산(逆算)할 수 없습니다. 따라서 정확히 말하면 섀도 파일의 두 번째 필드에 저장된 값은 ‘암호화’된 것이 아닙니다. 왜냐하면 해시 값은 ‘복호화’해서 원래의 메시지(평문)를 얻을 수 없기 때문입니다. [6]

그동안 ‘암호화’된 데이터가 섀도 파일에 저장된다고 알았다면 잘못 알고 있는 것입니다. 앞에서 설명한 것처럼 섀도 파일의 두 번째 필드에는 암호화된 데이터가 아닌 ‘해시 값’이 저장됩니다. (단, crypt 함수를 사용해서 대칭키 암호 알고리즘인 blowfish를 사용했을 경우에는 암호화가 맞습니다. 왜냐하면 대칭 키를 사용하여 암호화와 복호화가 가능하기 때문입니다. 하지만 blowfish는 일부 리눅스 배포판에서만 지원합니다. 적어도 데비안에서는 섀도 파일의 두 번째 필드에 blowfish가 아닌 해시 알고리즘을 적용합니다.)

그렇다면 정말로 해시 값이 저장되는지 살펴볼까요? 아래와 같이 섀도 파일에서 westporch라는 계정에 대한 두 번째 필드를 살펴보겠습니다.

root@debian-buster:~# cat /etc/shadow | grep westporch
westporch:$6$pFB/iNmg$3xGrJjY2wC613PH2JlIazInr6cNe8MNMLUJAyxHEY7ip93ll2Hdk27E90PvNg4iXMiISQqUg63MFn3yeoUTOn1:17691:0:99999:7:::

섀도 파일의 두 번째 필드($6$pFB/iNmg$3xGrJjY2wC613PH2JlIazInr6cNe8MNMLUJAyxHEY7ip93ll2Hdk27E90PvNg4iXMiISQqUg63MFn3yeoUTOn1)는 $id$salt$encrypted와 같은 형태로 구성되어 있습니다.

id가 6인 것은 SHA-512라는 해시 알고리즘을 사용했다는 것을 의미합니다. 512는 해시 값의 크기가 512비트(2^512) 라는 것을 의미합니다. 즉 $6$salt$encrypted 이라는 것은 SHA-512로 인코딩 되었음을 의미합니다. 참고로 $5$salt$encrypted는 SHA-256으로 인코딩된 것 입니다.

salt는 pFB/iNmg입니다.

86개의 문자로 구성된 Encrypted는 3xGrJjY2wC613PH2JlIazInr6cNe8MNMLUJAyxHEY7ip93ll2Hdk27E90PvNg4iXMiISQqUg63MFn3yeoUTOn1입니다. 파이썬(python)의 len 함수를 이용하면 86개의 문자임을 쉽게 확인할 수 있습니다.

root@debian-buster:~# python3
Python 3.6.5 (default, May 11 2018, 13:30:17)
[GCC 6.3.0 20170118] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> str='3xGrJjY2wC613PH2JlIazInr6cNe8MNMLUJAyxHEY7ip93ll2Hdk27E90PvNg4iXMiISQqUg63MFn3yeoUTOn1'
>>> len(str)
86
>>>

해시 값($6$pFB/iNmg$3xGrJjY2wC613PH2JlIazInr6cNe8MNMLUJAyxHEY7ip93ll2Hdk27E90PvNg4iXMiISQqUg63MFn3yeoUTOn1)에 대한 원래 메시지(평문)를 역산(逆算)을 통해 알아 낼 수 없다면, 도대체 이 해시 값에 대한 비밀번호는 어떻게 알아낼까요? 이럴 때 사용하는 것 이 레인보 테이블(rainbow table)입니다. 레인보 테이블은 여러 평문들을 해시 값들로 매핑한 일종의 표입니다. 이 표에서 공격 대상의 해시 값과 일치하는 것을 찾아내면 해당 메시지를 알아낼 수 있습니다. 하지만 salt가 추가되었기 때문에 정확한 비밀번호를 알아내려면 salt까지도 알아내야 합니다. 이처럼 salt를 추가함으로써 공격자가 원래의 메시지를 알아내는 것을 지연시킬 수 있습니다. 따라서 비밀번호를 알아내는 데에는 오랜 시간이 걸립니다. 또한 시간이 아주 충분히 많다면 몇 십년이 걸릴지라도 언젠가는 해시 값의 원래 메시지를 알아 낼지도 모릅니다. 하지만 많은 시간을 투자하여 암호를 알아낸 것에 비해 해당 정보(비밀번호)에 대한 가치가 현저히 떨어질 경우에는 비밀번호를 알아내더라도 의미가 없습니다.

파티션 설정

파티션은 특수한 경우가 아니라면 수동으로 설정하지 않고 '자동 - 디스크 전체 사용'으로 설정해도 무방합니다. 그러면 특수한 경우는 언제일까요? 시스템을 조금 더 안정적으로 운영하고자 할때가 아닐까 싶습니다. DB서버를 mysql 또는 mariaDB로 운영한다면 이들 DBMS는 /var/lib/mysql에 데이터 파일을 저장합니다. 만약 루트(/) 파티션에 통째로 사용하다가 시스템에 치명적인 문제가 생긴다면 /var/lib/mysql도 영향을 받겠지만 /var/lib/mysql 파티션을 별도로 생성했다면 /var/lib/mysql의 데이터는 안전하게 보존할 수 있습니다. 물론 디스크 자체가 물리적으로 손상된 경우라면 파티션 분할로 데이터를 보존할 수는 없습니다. 중요한 데이터를 다뤄야 한다면 반드시 백업 정책을 세워야 합니다. 여담이지만 '운영에 실패한 관리자는 용서할 수 있어도 백업에 실패한 관리자는 용서할 수 없다.'라는 말도 있지요.

파티션을 수동으로 설정하여 별도의 파티션들을 만들 경우의 단점은 관리의 효율성이 떨어지거나 디스크의 용량 낭비가 발생할 수 있다는 것 입니다. (용량 낭비가 걱정이라면 LVM을 사용해서 파티션 용량을 늘리거나 줄일 수도 있습니다.) 반면에 루트(/) 파티션을 통째로 사용하면 관리상 편합니다. 실제로 현업에서도 swap(가상 메모리)을 설정하고 루트(/) 파티션에 swap을 제외한 나머지 디스크 용량을 통째로 할당합니다. 파티션 설정은 시스템 관리자의 주관이 많이 반영되는 부분입니다. 자신이 시스템을 잘 관리할 수 있는 방법으로 파티션을 설정하는 게 가장 좋다고 생각합니다.

9 (Debian10 install) Set-partitions.png


파티션할 디스크를 선택한 후 엔터 키를 누릅니다.

9-1 (Debian10 install) Select-a disk.png


버추얼박스에서 생성한 가상 하드디스크(vdi)는 8GB로 설정했지만 실제로 시스템에서 인식한 디스크 용량은 8.6GB입니다. 실제 설정한 용량보다 0.75%가 증가했습니다. Xen에서 가상 디스크(qcow2)에 데비안을 설치할 때도 디스크 용량이 0.75% 정도가 증가했습니다. 왜 디스크 용량이 0.75%가 증가하는지는 잘 모르겠습니다.

어쨌든 저는 모두 한 파티션에 설치했습니다. 'Simple is the best!'. 만약 여러 사용자들에게 추가로 계정을 발급해야 한다면 /home 파티션은 별도로 분리하는 게 좋습니다. 또한 /var 디렉토리에 시스템 로그(웹 서버, 메일 서버 등)가 많이 쌓인다면 /var 파티션을 별도로 분리하는 게 좋겠지요. 물론 logrotate를 적용하여 로그 파일이 커지는 것을 막을 수 있습니다. 앞에서도 말씀드린 것 처럼 자신이 시스템을 잘 관리할 수 있는 방법으로 파티션을 설정하는 게 가장 좋다고 생각합니다.

9-2 (Debian10 install) Disk-partition.png


'파티션 나누기를 마치고 바뀐 사항을 디스크에 쓰기'를 선택하고 엔터 키를 누릅니다. 스왑(swap)은 가상 메모리(virtual memory)로 사용됩니다. 만약 시스템의 부하가 커서 메모리(주기억장치)를 많이 사용할 경우 스왑을 사용합니다. 즉 가상 메모리를 사용함으로써 사용자는 주기억장치의 용량이 확장된 것 처럼 느낄 수 있습니다.

9-3 (Debian10 install) Write-a disk.png


바뀐 점을 디스크에 쓰기 위해서 '<예>'를 선택하고 엔터 키를 누릅니다.

9-4 (Debian10 install) Agree-disk write.png

데비안 설치

베이스 시스템 설치

베이스 시스템이 설치됩니다. 베이스 시스템에는 가장 최소 한의 패키지들이 설치됩니다.

10 (Debian10 install) Install-base system.png


패키지 관리자 설정

다른 CD나 DVD 검사

별도의 CD/DVD가 없다면 '<아니요>'를 선택합니다.

11 (Debian10 install) Set-package manager.png


네트워크 미러 사이트

외부와 통신이 된다면 미러 사이트를 사용하는 것이 좋습니다. '<예>'를 선택합니다. 앞에서 설치한 베이스 시스템에 패키지들을 추가로 설치하기 위해 미러 사이트를 사용합니다.

11-1 (Debian10 install) Select-mirror.png


국가 선택

'대한민국'을 선택합니다. 미러 사이트로 반드시 대한민국을 선택할 필요는 없습니다. 예들 들어 독일을 선택할 경우 우리나라에서 멀리 떨어져 있기 때문에 속도가 우리나라보다 느립니다.

11-2 (Debian10 install) Select-mirror country.png


미러 사이트 선택

자신이 선호하는 미러 사이트를 선택합니다.

11-3 (Debian10 install) Select-a-mirror server.png


HTTP 프록시 정보는 별도로 설정할 필요는 없습니다. '<계속>'을 선택합니다.

11-4 (Debian10 install) Skip-http proxy information.png


아래 화면은 미러 사이트와 통신이 되는지 확인하고 있는 상태입니다. 만약 미러 사이트가 네트워크 및 기타 문제로 인해 접속이 불가능하다면 다른 미러 사이트를 선택하면 됩니다.

11-5 (Debian10 install) Check-mirror site.png


미러 사이트에서 파일을 받아옵니다.

12 (Debian10 install) Install-Get files.png


popularity-contest 설정

패키지 인기 투표에 참여할지 선택합니다. 설치 화면에 안내된 것 처럼 온라인에서 통계 자료를 확인할 수 있습니다.

12-1 (Debian10 install) Vote packages.png


설치할 소프트웨어

선택

설치할 소프트웨어를 선택합니다. 저는 GUI는 안쓰고 콘솔 환경만 사용할 것이므로 'SSH server'와 '표준 시스템 유틸리티'를 선택했습니다.

12-2 (Debian10 install) Select-sw.png


설치

선택 패키지들을 미러 사이트에서 받아온 뒤 설치합니다.

12-3 (Debian10 install) Get-files.png


부트로더(GRUB) 설치

이 단계까지 왔다면 디스크에 buster는 설치되었습니다. 이제 시스템을 부팅할 때 커널을 메모리에 적재하기 위해서 부트로더(boot loader)를 설치해야 합니다. 데비안에서 부트로더로 GRUB(Grand Unified Bootloader)을 사용합니다.

13 (Debian10 install) Install-bootloader.png


GRUB는 디스크의 0번 섹터에 위치한 MBR(Master Boot Record)에 설치됩니다. MBR의 크기는 512 바이트입니다. [7]

ch2-mbr.png


MBR은 디스크의 파티션에 대한 정보를 가지고 있습니다.

리눅스 시스템에서 커맨드로 MBR 정보를 확인할 방법은 없을까요? 아래와 같이 dd if=/dev/sda bs=512 count=1 | hexdump -C 명령을 이용해서 bs(block size)를 512 바이트로 지정(bs=512)하여 MBR의 크기만큼 1번(count=1)읽어옵니다. 이 값을 hexdump -C 명령을 통해서 hex+ASCII로 출력하면 MBR에 대한 내용을 확인할 수 있습니다.[8] 아래처럼 GRUB에 대한 아스키도 보입니다.

root@debian-buster:~# dd if=/dev/sda bs=512 count=1 | hexdump -C
00000000  eb 63 90 10 8e d0 bc 00  b0 b8 00 00 8e d8 8e c0  |.c..............|
00000010  fb be 00 7c bf 00 06 b9  00 02 f3 a4 ea 21 06 00  |...|.........!..|
00000020  00 be be 07 38 04 75 0b  83 c6 10 81 fe fe 07 75  |....8.u........u|
00000030  f3 eb 16 b4 02 b0 01 bb  00 7c b2 80 8a 74 01 8b  |.........|...t..|
00000040  4c 02 cd 13 ea 00 7c 00  00 eb fe 00 00 00 00 00  |L.....|.........|
00000050  00 00 00 00 00 00 00 00  00 00 00 80 01 00 00 00  |................|
00000060  00 00 00 00 ff fa 90 90  f6 c2 80 74 05 f6 c2 70  |...........t...p|
00000070  74 02 b2 80 ea 79 7c 00  00 31 c0 8e d8 8e d0 bc  |t....y|..1......|
00000080  00 20 fb a0 64 7c 3c ff  74 02 88 c2 52 bb 17 04  |. ..d|<.t...R...|
00000090  f6 07 03 74 06 be 88 7d  e8 17 01 be 05 7c b4 41  |...t...}.....|.A|
000000a0  bb aa 55 cd 13 5a 52 72  3d 81 fb 55 aa 75 37 83  |..U..ZRr=..U.u7.|
000000b0  e1 01 74 32 31 c0 89 44  04 40 88 44 ff 89 44 02  |..t21..D.@.D..D.|
000000c0  c7 04 10 00 66 8b 1e 5c  7c 66 89 5c 08 66 8b 1e  |....f..\|f.\.f..|
000000d0  60 7c 66 89 5c 0c c7 44  06 00 70 b4 42 cd 13 72  |`|f.\..D..p.B..r|
000000e0  05 bb 00 70 eb 76 b4 08  cd 13 73 0d 5a 84 d2 0f  |...p.v....s.Z...|
000000f0  83 d0 00 be 93 7d e9 82  00 66 0f b6 c6 88 64 ff  |.....}...f....d.|
00000100  40 66 89 44 04 0f b6 d1  c1 e2 02 88 e8 88 f4 40  |@f.D...........@|
00000110  89 44 08 0f b6 c2 c0 e8  02 66 89 04 66 a1 60 7c  |.D.......f..f.`||
00000120  66 09 c0 75 4e 66 a1 5c  7c 66 31 d2 66 f7 34 88  |f..uNf.\|f1.f.4.|
00000130  d1 31 d2 66 f7 74 04 3b  44 08 7d 37 fe c1 88 c5  |.1.f.t.;D.}7....|
00000140  30 c0 c1 e8 02 08 c1 88  d0 5a 88 c6 bb 00 70 8e  |0........Z....p.|
00000150  c3 31 db b8 01 02 cd 13  72 1e 8c c3 60 1e b9 00  |.1......r...`...|
00000160  01 8e db 31 f6 bf 00 80  8e c6 fc f3 a5 1f 61 ff  |...1..........a.|
00000170  26 5a 7c be 8e 7d eb 03  be 9d 7d e8 34 00 be a2  |&Z|..}....}.4...|
00000180  7d e8 2e 00 cd 18 eb fe  47 52 55 42 20 00 47 65  |}.......GRUB .Ge|
00000190  6f 6d 00 48 61 72 64 20  44 69 73 6b 00 52 65 61  |om.Hard Disk.Rea|
1+0 records in
1+0 records out
000001a0  64 00 20 45 72 72 6f 72  0d 0a 00 bb 01 00 b4 0e  |d. Error........|
000001b0  cd 10 ac 3c 00 75 f4 c3  fd 76 f9 e5 00 00 80 20  |...<.u...v..... |
000001c0  21 00 83 c9 f8 91 00 08  00 00 00 f8 df 00 00 ea  |!...............|
000001d0  d8 91 05 fe ff ff fe 07  e0 00 02 f0 1f 00 00 00  |................|
000001e0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
000001f0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 55 aa  |..............U.|
512 bytes copied, 0.0041475 s, 123 kB/s
00000200

참고로 제 시스템의 파티션 정보는 다음과 같습니다.

root@debian-buster:~# parted -l
Model: ATA VBOX HARDDISK (scsi)
Disk /dev/sda: 8590MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number  Start   End     Size    Type      File system     Flags
 1      1049kB  7516MB  7515MB  primary   ext4            boot
 2      7517MB  8589MB  1072MB  extended
 5      7517MB  8589MB  1072MB  logical   linux-swap(v1)
root@debian-buster:~# fdisk -l
Disk /dev/sda: 8 GiB, 8589934592 bytes, 16777216 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xe5f976fd

Device     Boot    Start      End  Sectors  Size Id Type
/dev/sda1  *        2048 14680063 14678016    7G 83 Linux
/dev/sda2       14682110 16775167  2093058 1022M  5 Extended
/dev/sda5       14682112 16775167  2093056 1022M 82 Linux swap / Solaris

리눅스의 부팅 과정은 어떻게 될까요? 간단하게 설명하자면 우선 바이오스에서 POST(Power-On Self-Test)를 수행합니다. 컴퓨터 주변 장치들에 이상이 없다면 바이오스는 MBR을 메모리에 적재합니다. MBR은 우리가 설치한 부트로더(bootloader)인 GRUB를 메모리를 적재합니다. GRUB는 커널을 메모리에 적재합니다. 커널은 디스크에 저장된 루트 파일 시스템(/)을 마운트합니다. [9] [10] [11] [12] [13] [14]

만약 컴퓨터가 부팅할 때 MBR에 문제가 생기면 어떻게 될까요? 당연히 부팅이 안됩니다. 따라서 이러한 점을 노리고 MBR을 공격하는 부트 바이러스가 존재하는 것입니다.


GRUB 설치가 완료되면 모든 설치 작업이 끝납니다. '<계속>'을 누르면 리부팅합니다.

14 (Debian10 install) Finish.png

리부팅

리부팅하면 GRUB를 볼 수 있습니다. 첫 번째의 'Debian GNU/Linux'로 부팅하면 됩니다.

15 (Debian10 install) Grub.png


로그인

buster의 로그인 화면이 나타났습니다.

16 (Debian10 install) First screen.png


루트 또는 사용자 계정으로 로그인 합니다. 첫 로그인할 때 캡처를 하지 못하고 나중에 캡처를 해서 아래와 같이 'Last login'에 접속 정보가 기록되었습니다. 로그인까지 성공했으니 이제 buster를 사용하면 됩니다. Buster라는 강아지를 앞으로 잘 다뤄주세요. Linux world~!

17 (Debian10 install) First login.png


마치며

이 설치 문서는 최대한 자세히 작성하려고 노력했습니다. 하지만 이러한 노력에도 불구하고 만약에 잘못된 내용이 있다면 아래 방법으로 따뜻한 연락을 주시면 감사하겠습니다. 이 문서를 오답노트로 삼아서 더욱더 발전하는 계기로 삼겠습니다.

혹시라도 <데비안 10(buster) 설치> 문서가 도움이 되었다면 격려의 한 말씀 부탁드립니다. :)

만약 데비안 설치 중에 문제가 발생한다면 데비안 설치 포럼에 질문을 남겨주세요. 질문을 남기시기 전에는 우선 구글링을 해주세요. 구글링을 통해 대부분의 궁금한 점들을 해결할 수 있습니다. 만약 구글링으로도 문제가 해결이 안된다면 자세한 상황(오류 메시지, 증상, 시스템 환경 등)을 데비안 설치 포럼에 남겨주시면 감사하겠습니다.


각주

  1. (2005, August 8) Linux Programmer's Manual(crypt(3) man page)
  2. 이재광, 전태일, 조재신(역) (2013). 알기 쉬운 정보보호개론 흥미로운 암호 기술의 세계 (2판). 히로시 유키의 INFORMATION SECURITY and CRYPTOGRAPHY. 서울: 인피니티북스. P95.
  3. 이재광, 전태일, 조재신(역) (2013). 알기 쉬운 정보보호개론 흥미로운 암호 기술의 세계 (2판). 히로시 유키의 INFORMATION SECURITY and CRYPTOGRAPHY. 서울: 인피니티북스. P95.
  4. https://web.mit.edu/kerberos/krb4-end-of-life.html
  5. https://web.mit.edu/kerberos/krb4-end-of-life.html
  6. 이재광, 전태일, 조재신(역) (2013). 알기 쉬운 정보보호개론 흥미로운 암호 기술의 세계 (2판). 히로시 유키의 INFORMATION SECURITY and CRYPTOGRAPHY. 서울: 인피니티북스. P222.
  7. https://gyires.inf.unideb.hu/GyBITT/20/ch02.html
  8. https://www.linuxquestions.org/questions/linux-newbie-8/how-to-see-master-boot-record-773428/#post3779598
  9. https://www.ibm.com/developerworks/library/l-linuxboot/index.html
  10. https://0xax.gitbooks.io/linux-insides/content/Booting/linux-bootstrap-1.html
  11. https://www.thegeekstuff.com/2011/02/linux-boot-process/
  12. https://www.slashroot.in/linux-booting-process-step-step-tutorial-understanding-linux-boot-sequence
  13. https://www.reddit.com/r/explainlikeimfive/comments/5a4x8f/eli5_mbr_bootstrap_bootloader/
  14. https://www.computerhope.com/jargon/b/bootload.htm