본문 바로가기
Virtualization & Cloud/Server & Linux

Ubuntu Linux (4) - 디스크 관리 : Quota, E-Mail 서비스 구축

by TwoJun 2024. 9. 20.
728x90
반응형

2024-09-19(THU)

 

 

 

01. 전일 내용 - 하드 디스크 관리

01-1. 단순 볼륨 

(1) 하드 디스크 1개 추가

 

 

 

01-2. 다수의 하드 디스크 관리

(1) HDD 장착

(2) 파티션 작업 수행

(3) 파일 시스템 생성

(4) Mounting Directory 생성

(5) Mounting

(6) /etc/fstab에 Mounting 추가

 

 

 

01-3. 파티션 작업

(1) fdisk /dev/sdb 커맨드를 주면 해당 디렉터리를 기준으로 /dev/sdb1의 Mounting Directory가 생성된다.

 

(2) File System 생성 작업 : 데이터를 저장하고 관리하기 위해 해당 파티션에 대한 주소지를 지정해 주는 작업

 

(3) mkfs.ext4 /dev/sdb1

 

 

 

01-4. 마운트 작업 

- 디렉터리와 파일 시스템을 생성한 하드 디스크와 연동하는 작업, 마운트 작업을 진행해야 데이터를 저장하거나 관리할 수 있게 된다.

 

(1) Mounting Directory 생성 

- Ex) mkdir myData

 

(2) Mounting 작업

- Ex) mount /dev/sb1 /myData

 

(3) Mounting 작업 이후 확인

- Ex) df -k

 

(4) 여기까지만 진행한 경우 문제점이 하나 있는데 시스템 재부팅 시 마운트 작업 내역이 모두 소실된다는 점이다. 따라서 영구적으로 연결을 유지하기 위한 추가 작업이 필요하다 : /etc/fstab 디렉터리에 마운팅 내역 추가

 

 

 

01-5. /etc/fstab

(1) 추가 작업 시 주의사항 : 이전까지의 과정을 모두 마무리하고 System Snapshot을 미리 생성해 둔 뒤 작업한다. OS가 구동될 때 마운팅된 리스트를 모두 읽어서 부팅하고, 시스템을 구동하기 때문에 마운팅 작업으로 인해 디렉터리 경로가 꼬이거나 변수가 생긴다면 시스템 자체가 부팅이 불가능해질 수 있기 때문이다.

 

(2) 위의 디렉터리를 기준으로 편집기를 열어서 아래 형식의 구문을 마운트 내역별로 추가해줘야 한다. 

Ex) /dev/sb1    /myData     ext4     defaults     0     0

 

 

 

 

02. 전일 내용 - RAID(Redundant Array of Inexpensive/Independent Disks)

02-1. RAID(Redundant Array of Inexpensive/Independent Disks)

(1) 여러 개의 하드 드라이브를 하나의 논리적 장치로 구성하여 데이터의 안전성과 성능을 향상시키는 기술을 의미한다.

 

 

 

02-2. H/W RAID

(1) 가격이 비싼 편이지만 속도나 성능이 좋은 편이다.

 

 

 

02-3. S/W RAID

(1) 비용이 저렴하지만 운영체제 레벨에서 구현된 기술이기 때문에 OS에서 작업 및 관리가 가능하다는 점은 장점이지만 하드웨어 RAID보다는 성능이 다소 떨어진다는 단점이 존재한다. 

 

 

 

02-4. RAID Level

(1) 주로 Linear, 0~6 레벨을 사용한다.

 

 

 

02-5. Linear RAID

(1) 처음부터 순차적으로 데이터를 저장하는 방식이다. 

 

 

 

02-6. RAID 0

(1) 스트라이핑 방식으로 데이터 저장 시 동시에 2개의 하드 디스크에 나누어 저장한다.

 

 

 

02-7. RAID 1

(1) 데이터를 저장할 때 실제 저장 공간을 2개로 나누어서 사용함에 따라 이중화해서 저장하고 관리(Mirroring)하기 때문에 데이터가 소실될 부분에 대해선 문제가 없지만 미러링 방식으로 동작하기 때문에 실제 설계 용량보다 2배 적은 공간밖에 사용하지 못한다. 따라서 하드 디스크 용량을 기존 설계보다 2배로 잡아줘야 한다는 단점이 있다.

 

 

 

02-8. RAID 5

(1) 3개 이상의 하드 디스크를 사용하고, 패리티 정보가 각 디스크에 분산되어 저장된다. 데이터 복구 시 패리티 비트를 사용해서 복구하게 된다.

 

 

 

02-9. RAID 6

(1)  4개 이상의 하드 디스크를 사용하고, 2개의 패리티 블록이 분산되어 저장된다. 데이터 복구 시 패리티 비트를 사용해서 복구하게 된다.

 

 

 

02-10. RAID 작업

(1) 선처리 과정 

- 파티션 생성 후 작업 : fdisk 

- fdisk 타입 변경 시 Linux Raid Auto로 적용한다(Hex code : fd)

 

 

(2) 볼륨 그룹 생성 : mdadm (RAID 구성 관리 도구)

Ex) mdadm --create /dev/md1 -level=1 --raid-devices=2 /dev/sdc1 /dev/sde1

 

 

(3) 작업 내역 확인 

> mdadm --detail --scan

 

 

(4) File System 생성

Ex) mkfs.ext4 /dev/md1

 

 

(5) Mounting 작업

> Directory 생성 : mkdir /raid1

 

> mount /dev/md1 /raid1 

- 해당 작업으로 Mounting Directory가 변경된다.

 

> /etc/fstab에 영구적 마운트 연결을 위한 등록 작업 진행

/dev/md1    /raid1    ext4    defaults    0    0

 

 

 

02-11. 기타 사항

(1) RAID 구성 시 하드 디스크는 같은 규격의 디스크를 사용해야 한다.

 

 

 

 

 

03. 전일 내용 - LVM(Logical Volume Manager)

03-1. LVM

(1) 여러 개의 물리적 디스크를 논리적으로 결합해서 한 개의 파티션으로 구성한 후 필요에 따라 분할해서 사용할 수 있는 디스크 관리 기술을 의미한다.

 

(2) 물리적 볼륨(PV, Physical Volume)

- /dev/sdb1, /dev/sdc1 등의 파티션을 의미한다.

- LVM에 의해 실질적으로 관리되는 물리적 저장 장치

 

(3) 볼륨 그룹(VG, Volume Group)물리 볼륨을 합쳐서 1개의 논리적 볼륨을 구성한 것

- 하나 이상의 물리 볼륨을 모아 관리할 수 있는 집합체 

 

(4) 논리 볼륨 : 볼륨 그룹을 1개 이상으로 나눈 각 개체

- 볼륨 그룹 내부에서 생성된 가상의 논리적인 파티션으로 논리 볼륨을 물리적 디스크처럼 사용 가능하다.

 

 

 

03-2. 순서 1 : 선처리 작업 

(1) fdisk 커맨드로 파티션 작업 진행

(2) Type의 경우 LVM을 지정한다.

 

 

 

03-3. 순서 2 :  물리 볼륨, 논리 볼륨 생성

(1) pvcreate /dev/sdf1 : 물리 볼륨 생성

 

(2) vgcreate myVG /dev/sdf1 /dev/sdg1 : 볼륨 그룹 생성

 

 

 

03-3. 순서 3 : 논리 볼륨 그룹 생성 

(1) lvcreate --size 1G --name MYLG1 myVG

 

 

 

03-4. 순서 4 : 파일 시스템(File System) 생성

(1) mkfs.ext4 /dev/myVG MYLG1

 

 

 

03-5. 순서 5 : Mounting Directory 생성, /etc/fstab 디렉터리에 등록

(1) mkdir myLG1

(2) mount /dev/myVG/MYLG1 /myLG1

(3) /etc/fstab 디렉터리 편집기를 열어서 마운팅 내역을 추가한다.

 

 

 

 

 

 

1.  Quota

1-1. Quota

(1) 리눅스는 여러 명의 사용자가 동시에 접속해 사용할 수 있는 운영체제 환경이다. 만약 일반 사용자가 루트 파일 시스템에 큰 파일들을 계속 복사했다고 가정해볼 때 해당 작업의 반복으로 하드 디스크가 꽉 차면 시스템이 부팅되지 않는 문제를 일으킬 수도 있다.

 

(2) 이러한 상황을 방지하기 위해 각 사용자별로 사용할 수 있는 디스크 공간을 제한할 필요성이 존재한다.

 

Quota 실습 진행 순서

(3) Quota는 리눅스에서 파일 시스템이나 스토리지 구성에서 사용자나 그룹이 사용할 수 있는 저장 용량이나 디스크 공간을 제한하고 관리할 수 있는 기능을 말한다.

 

 

 

 

1-2. 사용자를 생성하고 사용자에게 공간을 할당

(1) Server VMs로 접속 후 df -k 옵션으로 마운트 내역을 확인한다.

 

 

(2) 새로운 사용자 "john"을 생성한다.  (pwd =  1234)

 

 

(3) 새로운 사용자 "daniel"을 생성한다. (pwd = 1234)

 

 

(4) /etc/passwd 파일 확인 시 새로운 사용자의 정보가 추가된 것을 확인할 수 있다.

 

 

(5) /mydata 디렉터리에서 ls -l 옵션으로 확인해 보면 생성된 사용자를 확인할 수 있다.

 

 

(6) /etc/fstab 파일을 편집하는데,  /dev/sb1가 마운트된 경로를 기준으로 defaults,usrjquota=aquota.user,jqfmt=vfsv0으로 수정한다.

 

 

(7) quota를 사용하기 위해 apt 패키지 관리자로 설치한다.

 

 

(8) quotaoff -avug

- 모든 파일 시스템에서 사용자 및 그룹의 Quota를 비활성화한다.

 

(9) quotacheck -augmn

- Quota 파일을 체크하고 파일 시스템의 사용량을 업데이트한다.

 

(10) rm -f aquota.*

- Quota 파일인 aquota.user, aquota.group을 강제로 삭제한다.

 

(11) touch aqouta.user aquota.group

- Quota 파일을 생성한다.

 

(12) chmod 600 aquota.*

- Quota 파일의 허가권을 설정한다. 600의 경우 소유자만 읽고 쓸 수 있도록 제한하게 된다.

 

(13) quotaon -avug

- 모든 파일 시스템에서 사용자 및 그룹의 Quota를 활성화한다.

 

 

(14) 사용자별로 실제 공간을 할당하는 작업이다.

 

 

(15) 루트 계정을 기준으로 vmlinuz* 파일의 허가권을 777로 변경한다.

 

 

(16) 이전에 생성한 "john" 계정으로 접속한다.

 

 

(17) 현재 복사한 파일은 용량이 11MB쯤 된다. 파일을 계속 복사하다 보면 디스크의 공간을 모두 사용하게 된다.

 

(18) 현재 test 4 파일의 경우 정해진 하드 디스크의 용량을 초과하여 더 이상 사용할 수 없다. 현재 생성된 test 4 파일은 하드의 한도 사용량까지 남은 용량만큼을 사용해서 파일이 생성된다. (이에 따라 정상적인 형태의 test4는 찾아볼 수 없다.)

 

 

(19) 해당 사용자는 quota 커맨드로 자신에게 할당된 디스크 공간을 확인할 수 있다.

 

 

 

 

 

 

 

 

 

2. Mail Server 설치와 운영

2-1. 메일 서버를 운영하기 위한 주요 프로토콜

(1) SMTP(Simple Mail Transfer Protocol)

- 클라이언트가 메일을 보내거나 메일 서버끼리 메일을 주고받을 때 사용되는 프로토콜

 

(2) POP3(Post Office Protocol)

- 메일 서버에 도착한 메일을 클라이언트로 가져올 때 사용하는 프로토콜

 

(3) IMAP(Internet Mail Access Protcol)

- POP3와 용도가 비슷한 프로토콜

 

 

이메일 서버의 작동 개요

 

(1) kim이라는 사용자는 daum.net이라는 메일 서버에 kim@daum.net 계정이 존재한다. lee라는 사람은 naver.com 이라는 메일 서버에 lee@naver.com 계정이 존재하는 상황이다.

 

(2) 우선 pc 1에서 메일 클라이언트 프로그램을 실행해서 daum.net에 접속한 후 lee@naver.com에게 메일을 보낸다. (SMTP 프로토콜 사용)

 

(3) 메일 서버 1은 kim이 보낸 메일을 잠시 임시 저장소에 보관한 후 메일 서버 1은 KIM이 보낼 메일의 수신자 주소인 NAVER.COM 메일 서버 IP 주소를 DNS 서버에 요청한다.

 

(4) 메일 서버 1은 인터네승ㄹ 통해 메일을 메일서버 2로 전송한다.

 

(5) 메일 서버 2는 메일 서버 1로부터 받은 메일의 수신자 이름을 확인한다. lee라는 수신자 이름이 관리하는 계정 중에 있는지 확인하고 lee라는 이름이 자신의 계정 중에 존재하면 lee의 메일 박스에 kim에게 받은 메일을 넣어둔다.

 

(6) lee는 PC 2에서 메일 클라이언트 프로그램을 실행해서 자신의 메일 서버인 naver.com에 접속한다. 접속 후 자신의 메일 박스에 도착한 편지들을 PC 2로 전송한다. (이때 POP3/IMAP 프로토콜을 사용한다.) 이후에 kim으로부터 온 메일을 읽는다.

 

 

 

 

2-2. Send-Mail 서버

 

- 이번 LAB에서 구현할 메일을 주고받는 과정인 Send-mail 서버가 동작하는 부분을 Topology로 표현하면 위와 같다.

 

(1) 메일 클라이언트 1은 SMTP 프로토콜을 사용해서 메일 서버 1의 Send-mail 서비스(Daemon)에 메일을 전송하라고 요청하게 된다.

 

(2) Send-mail 서비스는 메일을 메일 Queue에 보관한다. (/var/spool/mqueue)

 

(3) Send-mail 서비스는 시간이 되면 MDA에 메일을 보내달라고 요청한다.

 

(4), (5) MDA는 SMTP 프로토콜을 사용해서 메일 서버 2의 Send-mail 서비스로 메일을 전송한다.

 

(6), (7) 메일 서버 2의 Send-mail 서비스는 받은 메일을 MDA를 통해 사용자의 메일 박스에 보관한다.

 

(8) 메일 클라이언트 2는 메일 서버 2의 dovecot 서비스에 자신의 메일을 달라고 요청한다.

 

(9), (10) dovecot 서비스는 메일 박스에서 메일 클라이언트 2의 메일을 POP3 또는 IMAP 프로토콜을 사용해 전송한다.

 

- 위와 같은 과정이 Send-mail 서버를 이용해 메일을 보내는 과정에서 발생하게 된다. 

 

 

 

 

 

 

3. Send-Mail 서버 구현

3-1. Topology

(1) VMWare 내부의 사설 네트워크를 내부 네트워크라고 생각하지 않고 외부 인터넷 환경으로 간주한다.

 

(2) 메일 서버 2대를 구현한다. Server를 naver.com, ServerB를 daum.net 메일 서버로 구현한다.

 

 

(3) 실습 이전 서버를 초기 상태의 Snapshot으로 복원한다. (Server, ServerB, Client, WinClient)

 

 

 

 

3-2. naver.com, daum.net 도메인 관리를 위한 네임 서버 구현

(1) server, serverb 모두 apt -y install sendmail 커맨드를 수행한다.

 

 

(2) Server를 기준으로 apt -y install bind9 bind9tuils 커맨드를 수행한다.

 

 

(3) Server, ServerB를 기준으로 apt -y install dovecot-pop3d 커맨드를 수행한다.

 

 

(4) Ubuntu-Client 기준으로 apt -y install evolution

 

 

 

(5) WinClient에서 Opera-Mail Client를 다운로드 받고 설치한다.

 

 

 

(6) Server에서 위의 3개 파일에 대한 수정이 필요하다.

 

 

(7) /etc/hostname 파일을 수정한다 (Server)

 

 

(8) /etc/hosts 파일을 위와 같이 수정한다.(Server)

 

 

(9) /etc/mail/local-host-names 파일에 위의 내용을 추가한다.

 

 

(10) 반영 사항을 저장하기 위해 시스템을 재부팅한다.

 

 

 

(11) ServerB의 /etc/hostname을 위와 같이 수정한다.

 

 

(12) serverB의 /etc/mail/local-host-name을 위와 같이 수정한다. (mail.daum.net 추가)

 

 

(13) ServerB에서 마지막으로 /etc/hosts 파일에서 192.168.100.161 mail.daum.net을 추가한다. 마찬가지로 serverB도 재부팅한다.

 

(14) 다시 Server VMs로 돌아와서 hostname으로 반영사항을 둘 다 확인한다.

 

 

(15) geditor 편집기로 /etc/bind/.named.conf.options, /etc/bind/named.conf 파일에 대한 수정이 필요하다.

 

 

(16) Server VMs 기준, /etc/bind/named.conf.options 파일을 편집기로 열고 붉은색으로 표시한 구문을 추가한다.

- dnssec-validation no;

> DNSSEC(Domain Name System Security Extensions) 검증을 비활성화하며 보안 요구사항에 따라 활성화/비활성화 여부가 달라진다.

 

- recursion yes;

> DNS 쿼리 중 재귀(Recursive) 쿼리를 허용한다.

> DNS 서버가 요청된 도메인명을 찾기 위해 다른 DNS 서버에 재귀 쿼리를 보낼 수 있도록 하는데 일반적으로 내부 DNS 서버에서 사용되고 클라이언트의 쿼리에 대해 최종 응답을 제공할 수 있게 한다.

 

- allow-query { any };

> 어떤 클라이언트든 DNS 쿼리를 보낼 수 있도록 하여, DNS 서버가 누구에게나 응답할 수 있게 설정한다. 보안상 문제가 있을 수 있으므로 제한된 환경에서만 사용하는 것이 권장된다.

 

> 해당 설정들은 DNS 서버가 보안 검증을 하지 않고, 재귀 쿼리를 허용하며, 모든 클라이언트의 쿼리를 받아들이도록 구성되어 있다. 보안 요구사항에 따라 문제가 될 수 부분들이 존재한다는 점을 유의한다.

 

 

(17) server에서 DNS 서버 설정을 위한 작업을 진행한다.

- /etc/bind/named.conf 파일에 대해 주황색 영역으로 표시한 스크립트를 추가한다.

 

 

 

(18) /etc/bind 디렉터리에서 각 도메인에 대한 db 파일을 touch를 통해 생성한다.

 

 

 

(19) geditor를 열어서 /etc/bind/naver.com.db, daum.net.db 파일에 위와 같은 스크립트를 작성한다.

 

 

(20) named-checkconf 커맨드로 지금까지 진행한 설정에 문제가 없는지 체크한다. 명령 수행 시 반응이 없어야 정상적으로 설정이 완료된 상태

> named-checkconf는 DNS 서버의 설정 파일을 검사하는 유틸리티이며 새로운 설정을 추가한 후 전체 설정이 올바른지 검사할 때 사용한다. 

 

 

(21) named-checkzone naver.com naver.com.db / daum.net daum.net.db 커맨드로

- named-checkzone : BIND(DNS 서버 소프트웨어)의 도구 중 하나로, DNS 설정 파일의 구문과 유효성을 검사하는 데 사용되는 명령어

 

> named-checkconf, named-checkzone 두 개의 차이는 checkconf의 경우 전체 DNS 설정에 대해 이상 여부를 검사하고 checkzone은 특정 DNS Zone 파일의 이상 여부를 검사하는데 사용한다.

 

 

(22) systemctl enable 또는 restart named, systemctl status named로 DNS 서비스가 Running 상태인지 체크한다.

 

(23) Server의 DNS 서버 주소를 Server의 IPv4 주소로 변경한다.

 

 

(24) nslookup 명령으로 각 도메인 네임에 대한 주소가 잘 불러와지는지 확인한다.

- 각 도메인에 대해 ping 테스트도 정상 수행되는지 체크

 

 

 

 

3-2. Ubuntu Client, ServerB, WinClient로 접속해서 DNS 주소 변경 후 ping, nslookup 수행되는지 확인

(1) 작업 이전 Server의 방화벽을 끈다. (ufw disable)

- 이후 Client, ServerB로 접속해서 DNS 주소를 Server의 주소로 변경해 준다.

 

 

 

 

3-3. naver.com, daum.net 메일 서버 구현(Server)

(1) 98번, 273, 274번 라인을 위와 같이 변경한다.

- 273, 274 라인의 경우 메일 전송 에이전트(MTA)의 구성 옵션을 변경하는 부분이다. 

 

 

(2) /etc/mail/access 파일을 편집기로 열어서 맨 하단에 새로운 라인을 추가해서 위와 같이 스크립트를 작성한다.

 

 

(3) makemap 커맨드를 적용시킨다.

- makemap을 사용하여 메일 서비스에서 해시 맵(Hash Map)을 생성하는 커맨드로,/etc/mail/access가 해시를 생성할 경로가 되고 보통 메일 서버의 접근 제어 설정을 포함하고 있는 디렉터리다.

 

- <은 입력 다이렉션으로 우측 경로의 파일을 읽어서 맵으로 변환한다.

 

 

(4)  /etc/dovecot/dovecot.conf 파일을 열고 각 라인을 위와 같이 수정한다.

- 위의 수정 옵션들은 Dovecot 메일 서버의 구성 파일에서 사용되는 옵션들이다.

- 각 라인마다 순서대로 Dovecot이 모든 네트워크 인터페이스에서 연결을 수신하도록 하며 dovecot의 기본 디렉터리를 /var/run/dovecot/으로 지정하며, 평문 인증을 활성화한다는 의미를 갖는다.

 

 

(5) /etc/dovecot/conf.d/10-mail.conf 파일로 접속해서 각 라인을 위와 같이 수정한다.

- mail_access_groups = mail의 경우 메일 서버가 접근 제어 파일(/etc/mail/access)을 읽을 때 사용할 그룹을 지정한다.

- lock_method = fcntl : 파일 잠금 설정 메커니즘을 지정, fcntl은 파일 잠금을 관리하기 위한 표준 방법 중 하나

 

(6) 새로운 사용자를 추가한다.

 

 

(7) 해당 설정으로 sendmail, dovecot 데몬을 시스템 부팅 시 자동으로 시작하도록 활성화한다.

- sendmail 메일 전송 에이전트, dovecot 메일 수신 서버 데몬(IMAP/POP3)을 부팅 시 자동으로 실행하도록 설정한다.

 

 

(8) 각 데몬이 Running 상태임을 확인한다.

 

 

(9) Client로 접속해서 evolution 마법사를 연다. (evolution 커맨드)

 

 

(10) 위와 같이 신상 정보를 입력한다.

 

 

 

 

 

(11) 모든 정보를 입력하고 다음으로 넘어간다.

 

 

(12) 계정 정보를 위와 같이 설정해주고 나머지 정보를 확인한다.

 

 

(13) 위의 전송 버튼을 클릭한다.

 

 

(14) 관련된 인증 절차를 완료하고, 메일을 자신에게 보냈을 때 메일을 수신받았다면 메일 서비스가 정상적으로 동작하는 상태를 의미한다.

 

 

 

 

 

 

 

4. Reference

(1) https://www.hanbit.co.kr/store/books/look.php?p_code=B3658372395

 

이것이 우분투 리눅스다(개정판)

1대의 컴퓨터에 4개의 가상머신을 생성! \\\'실무형 실습 환경\\\'에서 초보자도 막힘없이 실습할 수 있다.

www.hanbit.co.kr

※ 해당 포스팅을 기준으로 내용 추가가 필요하다고 생각되면 기존 내용에 다른 내용이 추가될 수 있습니다.

개인적으로 공부하며 정리한 내용이기에 오타나 틀린 부분이 있을 수 있으며, 이에 대해 댓글로 알려주시면 감사하겠습니다!

728x90
반응형

댓글