Born2beRoot & UTM Setting

Born2beRoot & UTM Setting

UTM 과 Debian을 이용한 가상머신과의 첫 악수

문제 요약

~~클러스터의 mac 에 virtual box를 이용해 Debian을 설치하고,~~
(개인 맥북을 이용해 과제를 하는 것으로 변경)
M1 프로세서가 탑제된 맥북 에어 에선 Virtual Box 가 지원되지 않기에 UTM을 사용하여 Debian 을 설치하는 방법을 선택했다. (UTM이 가상 프로세서를 지원하기 때문에 클러스터와 똑같이 x86_64 프로세서 버전의 debian 을 설치할 수 있다.)

먼저 UTM과 Debian을 설치한다.
파티션 분리, 비밀번호 설정, 루트 디렉터리 설정, sudo 권한 설정, 네트워크 설정, ssh 설정, 등 요구사항을 수행하고,
가상머신의 상태 요약하여 보여주는 동작을 수행하는 쉘 스크립트(monitoring.sh)를 작성하고
crontab을 이용하여 해당 스크립트가 주기적으로 실행되도록 세팅한다.
마지막으로 가상머신의 스냅샷을 촬영하고, 스냅샷의 sha 형식의 암호문을 shasum 명령을 수행한 결과를 signature.txt 라는 파일에 담아 제출한다.

UTM 및 Debian 설치

사용 소프트웨어 정보

가상 머신: UTM 3.0.4

OS: debian-11.2.0-amd64-netinst

Debian 설치 전 UTM 세팅

UTM을 설치하는 것은 어렵지 않기 때문에 생략하겠다.

UTM을 실행하면 다음과 같은 화면을 볼 수 있다.
클러스터와 같은 x86_64 아키텍처용 Debian을 사용할 것 이므로 Emulate 을 선택한다.

install-1
실행시 화면

Debian은 리눅스다. Linux 선택

install-2
Linux 선택

다운 받은 amd64 iso 파일을 선택한다.

install-3
iso 선택

할당할 자원에 대한 정보이다. 아마 호스트 컴퓨터의 성능에 따라 다르게 나올 것으로 생각된다.
따로 건들지 않고 Next 를 눌렀다.

install-4
그냥 Next 클릭

할당할 드라이브 저장공간 에 대한 정보를 입력한다.
클러스터에서 8GB를 할당하고 문제가 없었으므로 8GB를 할당하고 넘어가겠다. (사용할 공간이 별로 크지 않기 때문에 더 적어도 상관없을 것으로 생각된다.)

install-5
8Gb 할당

Next 를 눌러준다.

install-6
Next 눌러줘요

Open VM Settings 에 체크를 걸어준다. (체크 하면 바로 뒤에서 리눅스의 팽귄 이미지를 Debian의 빨간색 문양? 으로 변경할 수 있다. 다른 기능도 있으나 건들지 않았다.)

install-7
Open VM Settings 체크

세련된 Debian 문양으로 이미지를 변경한다.

install-8
Debian 문양 선택

VM에서의 세팅은 이로써 끝났다. 재생 버튼을 눌러 Debian 을 설치하는 단계로 넘어가자

install-9
VM 세팅 완료, 실행하자

Debian 설치

드디어 Debian 의 Installer가 실행되었다.
Graphical install옵션 말고 그냥 install으로 진행하자. (결과에 차이는 없으나 왠지 Graphic은 거부감이 들었다.)

install-10
일반 install 클릭

국가설정, 언어 설정이 나타난다. 어차피 영어만 사용할 예정이므로 빠르게 Enter를 눌러 넘어가자

install-11
Enter
install-12
Enter

과제 요구사항을 읽어보면 hostname에 대한 규칙이 있을 것이다.

install-13
hostname 입력

도메인 이름은 입력하지 말고 넘어간다.

install-14
Domain명은 필요 없다.

Root 의 비밀번호를 설정하라고 한다.
과제에 규칙이 나와있으니 그것을 따라서 비밀번호를 만들어 입력하자.

install-15
Root 비밀번호 설정

한 번 더 입력!

install-16

사용자 한명을 만들라고 한다. 마찬가지로 과제에 사용자 이름에 대한 요구사항이 있다. 맞추어 입력하자

install-17
사용자 추가

사실 방금것은 사용자의 실명을 입력한 것이었고 지금 입력창이 그 사용자의 계정명(username)을 입력하는 창이다.
알아서 입력되어 있으니 Continue

install-18
Continue 누르면 된다.

방금 계정의 비밀번호를 작성해야 한다. 마찬가지로 과제 요구사항을 준수하여 비밀번호를 설정하자.

install-19
비밀번호를 설정한다.

과제에서 encrypted LVM 저장공간을 만들라고 했다. 3번째를 선택하고 엔터를 누르자.

install-20
encrypted LVM 을 만들어야 한다.

엔터.

install-21
넘겨요

과제에서 2개 이상의 LVM을 만들라고 했었고, lsblk 명령 예시를 참고하면 home 파티션이 root와 뚝 떨어져 있는 것을 확인 할 수 있다.

install-22

Yes

install-23
예스

encrypted LVM 을 선택했으니 디스크 복호화 암호도 있어야 한다. 입력창 상단에 적힌 안내문을 준수하여 비밀번호를 설정하자.
이것 잊어버리면... 절대 안된다!

install-24
디스크 복호화 암호 설정

한 번 더 입력!

install-25

자신이 Debian 할당한 디스크 용량에서 조금 차감한 값이 자동으로 입력되어있을 것이다.

install-26

위와 같이 파티셔닝 하겠다고 한다. 엔터를 눌러 허가하자

install-27
Enter

중간에 스크린샷 남기는 것을 잊어버려 파티셔닝을 다시했어야 했는데 아래 창이 나타난 것은 아마 그 때문으로 생각된다. 정상적으로 잘 진행했다면 아마 안나타나지 않았을까??
아무튼 yes 해준다.

install-28

추가로 설치할 미디어파일이 없으므로 No를 선택한다.

install-29
거절

American
(뭘 선택하든 상관없다.)

install-30

뭘 선택하든 상관없다.

install-31

공백으로 남기자.

install-32

ssh와 기본 유틸리티만 있으면 된다.
바로 엔터 눌러주자.

install-33

설문은 참여하지 않는다. No

install-34
설문 안해

이후 설치가 완료되었다는 메세지가 나타나고 엔터를 누르면 재부팅이 시작된다.
그런데 다시 설치화면으로 돌아와 있을 것이다.
Debian을 종료하고 아래 그림처럼 설치 iso를 clear 해준다.

install-35
설치 완료시 Debian 종료 하고 iso clear

과제 요구사항 세팅

로그인

돌발상황 첫 실행에선 나타나지 않고, 두 번째 실행부터 grub를 실행 안하고 얼타는 듯 하다.
만약 다음과 같은 화면을 마주했다고 해서 당황하지 말자.
침착하게 다음 명령어를 입력하면 해결된다.
리눅스 부트로더인 grub를 실행하라는 명령이다.

fs0:\EFI\debian\grubx64.efi
debian_setting-3
grub 경로를 주고 실행시키자

Debian 을 실행하면 대뜸 비밀번호를 요구한다.
설치시 만들었던 그리고 절대 잊지 말라고 했던 encrypt 암호를 입력하면 된다.

debian_setting-1
디스크 복호화 암호 입력

login은 root 계정으로 하고, root 암호를 입력한다.

debian_setting-2
login: root, root 암호 입력

sudo Install & Setting

apt-get 을 이용해 sudo를 설치할 것이다.

먼저 apt-get을 update해준다.

apt-get update
debian_setting-4
apt-get update

sudo 를 설치한다.

apt-get install sudo
debian_setting-5

/etc/sudoers 라는 파일에 sudo 관련 세팅이 저장되어 있으나 해당 파일은 readonly 파일으로 특수한 명령어를 통해 내용 변경이 가능하다.

visudo
debian_setting-6

과제 요구사항을 반영하여 설정을 다음과 같이 변경해준다.

debian_setting-7

ctrl+c로 종료를 하고 하단에 버퍼의 내용을 적용할 것이냐는 질문에 y, 그리고 저장할 파일 이름에서 .tmp를 지워주는 것을 잊지 말자.

debian_setting-7_1

ufw Install & Setting

UFW는 Uncomplicated Fire Wall의 약자이다.
리눅스 의 네트워크 보안장치인 ip table을 설정하는 것이 상당히 복잡하기 때문에 이를 쉽게 조작하게 도와주는 프로그램이 ufw이다.

ufw에 볼일은 한 가지이다.
4242번 포트를 제외한 모든 포트에서의 접근을 막는것.

일단 Install 해준다.

apt-get install ufw
debian_setting-8
ufw 설치

설치는 되었지만, 실행중인 상태는 아니다.

debian_setting-9

ufw enable 위 명령으로 실행상태로 돌려주자 (ufw는 자동으로 시작시 실행하는 설정이 되어 있어 startup시 실행에 대해서는 따로 건들지 않아도 된다.)

모든 포트를 막고 4242만 열게한다.

ufw default deny
ufw allow 4242
debian_setting-10
모든 포트 막고 4242만 열자

ssh Install & Setting

openssh를 이용해 호스트와 ssh 연결을 할 것이다.
일반적으로 openssh는 깔려있다.

그러나 vim은 안깔려있다.
깔아준다.

debian_setting-vim
vim을 깔자

ssh의 기본 포트는 22로 되어 있고, rootlogin 또한 허용하기에 이에대한 설정을 바꾸기 위해 /etc/ssh/sshd_config 파일을 조작한다.

vim /etc/ssh/sshd_config
debian_setting-11
sshd 설정
systemctl restart ssh

를 통해 설정을 적용시킨다.

debian_setting-12
변경 내용 적용

Port Forwarding

호스트 컴퓨터에서 Debian에 원격 접속하기 위한 SSH 설치와 포트 설정까지 완료 하였다.
이젠 Debian의 4242포트와 호스트의 4242포트를 연결 시키는 작업이 남았다.

먼저 Debian의 사설 IP를 확인한다.

ip a
debian_setting-13
사설 Ip 확인

Debian을 종료하고 UTM 화면의 우측 상단 설정버튼을 누른다.

debian_setting-14
Debian 종료 후 UTM 설정 진입

아래와 같이 변경해준다.

debian_setting-15

호스트의 쉘에서 다음과 같은 형식으로 데비안에 접속할 수 있다.

ssh [ID이름]@[Debian의 사설 ip 주소] -p [호스트 포트 번호]
debian_setting-16

짜잔~! iterm에서 Debian 에 접속한 모습이다!

debian_setting-17

Password Setting

이번엔 비밀번호 규칙(대문자, 중복방지 등)과 정책(변경 주기)을 설정할 차례이다.

3가지 할일이 있다.

  1. 비밀번호 규칙 설정
  2. 비밀번호 정책 설정
  3. 현재 사용중인 root, chanhale 계정 비밀번호 정책 설정 및 업데이트

비밀번호 생성규칙을 세팅하기 위해선 설치할 것이 하나 있다.

apt-get install libpam-pwquality
debian_setting-18
libpam-pwquality 설치

비밀번호 생성규칙을 바꾸기 위해 해당 파일로 접근한다.

vim /etc/pam.d/common-password
debian_setting-19

과제의 요구사항대로 파일의 내용을 변경한다.

debian_setting-20
비밀번호 규칙파일 내용 변경

다음은 비밀번호 변경 정책에 관한 설정을 할 차례이다.
관련 규칙이 작성되어 있는 파일에 접근한다.

vim /etc/login.defs
debian_setting-21
변경 주기 관련된 설정

과제의 요구사항에 맞추어 설정을 다음과 같이 변경한다.

debian_setting-22

방금의 설정은 새로 생성한 계정에 적용되는 정책으로 이미 생성된 계정의 비밀번호 정책은 수동으로 세팅해주어야 한다.
chage -l [확인할유저명] 명령으로 이를 확인할 수 있다.

debian_setting-23
이미 생성된 유저는 따로 정책 변경해줘야 한다.

chage -m 명령으로 minimum을 바꿀 수 있고
chage -M 명령으로 Maximum을 바꿀 수 있다.
root와 로그인 유저 둘 다 변경해준다.

chage -m 2 [user_name]
chage -M 30 [user_name]
debian_setting-24
root 포함 기 생성 모든 사용자의 정책 업데이트

정책을 모두 변경했으니 과제 요구 사항대로 비밀번호도 변경해주자.

debian_setting-25
과제에선 비밀번호 정책 설정 후 새 비밀번호로 바꾸라고 했다.

Group Setting

다음은 유저가 속한 그룹과 유저의 프라이머리 그룹을 변경해줘야 한다.

먼저 과제 요구사항에 나온 user42 라는 그룹을 만들자.

groupadd user42
debian_setting-26
user42 그룹 생성

유저가 소속된 그룹에 user42,sudo을 추가적으로 등록하도록 한다.

usermod -aG sudo,user42 [user_name] usermod -g user42 [user_name]

debian_setting-27
사용자의 소속 그룹 추가
debian_setting-28
로그인 그룹 세팅

ss -tunlp에서 dhclient 없애기

ss -tunlp 를 실행하면 과제의 요구사항과는 다르게 dhclient가 떡하니 존재하는 것을 확인할 수 있다.

ip할당을 동적으로 처리하는 세팅을 정적으로 할당하도록 바꿈으로써 이를 없앨 수 있다.

vim /etc/network/interfaces

을 하여 해당 설정 파일로 이동하고 다음과 같이 내용을 변경하자

debian_setting-29
dhclient 없애기

이후 ss -tunlp 를 실행하면 과제 요구사항과 같은 결과를 확인할 수 있다.

debian_setting-30
짜잔

monitoring.sh

컴퓨터의 상태정보를 출력하는 스크립트를 구성해야한다.
자세히 언급하긴 너무 양이 많아 그 동작들에 대해 간략하게 보여주는 식으로 넘어가겠다.

완성된 결과이다.

debian_setting-m0
목표 상태

아키텍처

debian_setting-m1
architecture

물리 CPU 개수

debian_setting-m3
cpu physical

참고로 nproc 명령의 manpage 는 다음과 같다.

debian_setting-m4
man nproc

vCPU

debian_setting-m5
vCPU

메모리 사용량

debian_setting-m6
memory usage

free 의 man page

debian_setting-m7
man free

디스크 사용량
여기서 주의할 점은 used와 Available의 합이 총 공간이 된다는 점에 주의하여 스크립트를 짜야한다.

debian_setting-m8
Disk usage, 각 항목이 의미하는 것이 무엇인가 생각해보자 (몇 가지 연산이 있어야 원하는 값을 얻을 수 있다.)

DF 의 man page

debian_setting-m9
man DF

CPU 사용량

apt-get install sysstat

위 기능을 깔아야 cpu사용량 확인하는데 필요한 명령어를 실행할 수 있다.

debian_setting-m2
sysstat 설치
debian_setting-m10

Last Boot

debian_setting-m11

Who의 man page

debian_setting-m12

LVM 사용여부: 생략
TCP 연결 개수: 생략
로그인 계정 수: 생략

네트워크 IP

debian_setting-m13

ip의 man page -1

debian_setting-m14
man ip

ip의 man page -2

debian_setting-m15
man ip

sudo 명령 청구 횟수
journalclt의 man page

debian_setting-m16
sudo 명령 횟수

스크립트 내용

** 중요 추가 **
겉보기엔 정상적인것 같지만... 아래 스크립트 내용 중 한가지 오류가 있어요
그게 무엇인지 찾고 수정하는 과정에서 명령들을 직접 실행해보고 오류를 찾길 바랍니다.

debian_setting-m17

crontab setting

crontab은 어떤 함수? 라기보단 cron + table의 합성, 축약어 인 듯 하다. (cron은 유닉스 계열의 작업 스케줄러이다.) 즉 작업할 거리들이 모여있는 table을 뜻한다고 할 수 있겠다. 우리가 사용한 -e 옵션은 특정한 editor 를 사용하여 crontab의 내용을 edit하는 명령이다.

crontab -e

위 명령을 통해 접근한 cron table에 들어가 보면, 주석 외엔 별다른 내용이 보이지 않는다.
방금 만들었던 monitoring.sh를 실행하는 명령을 추가해준다.

*/10 * * * * /root/monitoring.sh | wall

위 명령의 의미는 먼저 '*' 문자의 경우 아무 시간이라는 뜻이다.
앞에서부터 분, 시, 일, 월, 년 을 뜻하며 상기 명령은 10 분에 1번씩 실행하라는 명령이 되겠다.

debian_setting-crontab

다음으로 wall의 의미는 모든 사용자에게 출력한다는 뜻이다.
즉 ssh를 통해 호스트 컴퓨터에서 chanahle 계정으로 접속하든, 가상머신에서 새로운 계정으로 접속해있든 상관없이 monitoring.sh의 실행 결과를 전달 받을 수 있다.

기타 참고 사항

동료평가시 평가지 자체에 있는 내용도 어마어마하게 많으나 과제 요구사항 중 You must understand what you use! 라는 내용이 있다.
질문자가 평가지 외의 내용을 질문하더라도 답변하지 못하면 fail을 받을 수 있다는 의미로 해석될 수도 있다.
최대한 자세하게 준비해서 평가에 임하는 것을 추천한다.