본문 바로가기

프로그래밍

[42서울] Born2beroot 설치 및 세팅만 정리

주의! 

이것만 보고 평가받으면 절대 통과할 수 없습니다. 이대로만 진행하면 평가를 받을 수 있는 상태가 되지만, 이 글은 평가를 통과하기 위한 글이 아님을 유의해주세요.

 

이 글은 평가표가 150줄 쯤 되는 대장정의 시작일 뿐입니다. 치트 시트 논란을 피하기 위해 일부러 설명은 빼고 적었습니다.

 

데비안 설치

https://www.debian.org/releases/stable/debian-installer/

가서 amd64 다운로드 먼저 누르고 시작

 

command + space에서 vir 검색하면 바로 버츄얼박스 나옴

 

당연히 아무것도 없을테니 위에 new 클릭

 

이름과 설정 하고 Continue 누른 다음부터는 엔터 눌러서 넘겨도 됨

 

잘 되면 start버튼 클릭. 잘 안되면 대부분 goinfre 용량 문제임. 자리를 옮기고 다시 할 것.

 

시작할 때 설치한 debian 찾아서 넣고 start 클릭

 

gui 쓰지 말라고 했으니 install. 처음 키면 엄청 작을텐데 command + c 누르면 키울 수 있음

 

한국어 해봐야 아무 의미 없음 그냥 영어 ㄱ

 

지역 미국으로 될텐데 other - asia 가서 남한으로 설정. 이후에 timezone 등 편하게 하려고 하는거라 안 해도 괜찮음. 북한은 안해봤는데 아마 북한도 별 상관은 없을 듯.

 

엔터 엔터 후 멍 때리기

 

서브젝트에서 하라는 대로 id + 42

 

그냥 엔터

 

루트 비밀번호 설정 + 비밀번호 확인

 

유저 네임 입력. 친절하게 한번 하면 다음에도 들어가 있음

 

방금 입력한 유저의 비밀번호 설정 + 입력한 비밀번호 확인

 

서브젝트 요구사항이라 세번째걸로

 

그냥 엔터

 

서브젝트에서 나누라고 했으니까 나누고 YES 누른 다음 물 한잔 마시고 오면 됩니다.

 

여기에도 비밀번호 입력 - 입력한 비밀번호 확인

 

엔터 엔터 Yes 누른다음 일어나서 허리 한번 피기

 

엔터 엔터

 

카이스트로 바꾸고 엔터 엔터 후 멍 때리기

 

엔터 엔터 후 잠시 멍 때리기

 

Yes! 11버전을 클러스터 맥에 설치할 때 no 누르면 설치 다해도 실행 안됨.

 

어?! 서브젝트에서 sda1에다가 설치하랬는데? 싶은 생각이 들어도 그냥 2번 고르시면 됩니다. 물 한잔 더 마시고 허리 한번 더 필거면 1번 고르시고 /dev/sda1 입력하시면 되구요

 

설치 끝! 엔터 누르면 자동으로 재부팅됨. 기다렸다가 화면 나오면 한번 더 엔터

 

LVM 설정할때 입력한 비밀번호 입력.

 

'뭐야 왜 폰트가 변했어' 라고 생각하면서 root 로 로그인

 

lsblk 해보면 부트로더를 /dev/sda 에다가 설치했지만 서브젝트에서 원하는 대로 sda1에 설치된 모습을 확인 가능. 설명을 다 빼려다가 궁금할 것 같아서 이건 남겼음.

 

 

sudo 설치

apt-get update 해서 패키지 목록 업데이트 해주고

apt-get install sudo 로 sudo 설치

 

visudo 로 sudoers에 접근.

 

서브젝트에는 secure_path를

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin

으로 하라고 되어있으니 /snap/bin 추가

Defaults	authfail_message="권한 획득 실패 메세지"
Defaults	badpass_message="비밀번호 틀릴때 메세지"
Defaults	iolog_dir="/var/log/sudo/"
Defaults	log_input
Defaults	log_output
Defaults	requiretty
Defaults	passwd_tries=3

그 밑에 다른 정책들 추가

 

이런 모습이 되면 control + x 를 누르고 Y 를 눌러서 저장하면서 나가기

visudo 한번 더 해서 제대로 입력했는지 확인

 

서브젝트에 적힌대로 /var/log/sudo에 저장하기로 했으니 해당 폴더가 있는지 확인.

없으면 mkdir /var/log/sudo 실행해서 만들어줘야함.

 

usermod -aG sudo youjeon 을 입력해서 해당 유저를 sudo 그룹에 넣은 다음 해당 유저로 로그인해서 sudo 명령어 아무거나 실행

 

su - 로 루트로 다시 로그인 한 다음 /var/log/sudo/00/00/01/log 열어서 위에서 입력한 명령어가 잘 들어갔는지 확인

 

 

UFW 설치

su - 
apt-get install ufw -y 
ufw status verbose 
ufw enable
ufw default deny 
ufw allow 4242
ufw status verbose

 

이렇게 나온걸 확인

 

 

SSH 설치

su -
apt install openssh-server  거의 대부분 이미 깔려있음
vim /etc/ssh/sshd_config 
#Port 22 -> Port 4242 로 변경
#PermitRootLogin prohibit-password -> PermitRootLogin no 로 변경
systemctl restart ssh 
systemctl status ssh

이렇게 되어있던걸

 

이렇게 변경

 

hostname -I(쉬프트 i) 입력해서 가상머신의 ip 확인

 

그 다음 잠시 vm을 끄고 나옴(반드시 power off 해야함)

 

버츄얼 박스로 나와서 Tools 옆에 network 눌러줌

 

위에 create 누르면 새로운 네트워킹이 만들어짐

 

vm 클릭해서 위에 setting 누르고 Network 누른다음 Advanced 눌러서 밑에 Port Fowarding 눌러줌

 

오른쪽에 + 버튼 눌러서 포트 포워딩 룰을 새로 만든 다음 Host IP 에 vboxnet0 에 적힌 ip 를 Guest IP 에 위에서 hostname -I 에 나온 ip 를 입력하고 양쪽 포트는 모두 4242를 입력한 다음 OK 눌러서 나옴

 

Adapter 2 눌러서 새로운 어댑터를 만들어주고 Attached to 를 Host-only Adapter로, name을 vboxnet0 로 바꿔줌

 

가상머신 다시 킨 다음 터미널에 ifconfig 치면 vboxnet0 와 그 ip 가 적힌걸 확인 가능

 

터미널에서 ssh id@192.168.56.1 -p 4242 이렇게 치고 패스워드 입력하면 ssh 로 접근 가능

 

만약에 IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! 이런 문구가 나오면서 ssh 로그인이 안된다면

터미널에서 
cd
cd .ssh/
rm -r known_hosts
이렇게 입력한 다음 다시 로그인하면 해결

 

설정에서 막아둬서 root 로는 로그인 불가능한거 확인

 

 

패스워드 정책 설정

su -

vi /etc/login.defs 
PASS_MAX_DAYS 30
PASS_MIN_DATS 2
PASS_WARN_AGE 7

좀 많이 내려야 있음

 

apt-get -y install libpam-pwquality

vi /etc/pam.d/common-password 
retry=3 뒤로 설정들 쭉 붙일것
minlen=10 ucredit=-1 lcredit=-1 dcredit=-1 maxrepeat=3 reject_username enforce_for_root difok=7

passwd -e <사용자명>

오타 있나 한번 더 확인할 것

 

 

monitoring.sh 설정

apt-get -y install sysstat
vi /root/monitoring.sh

아래 내용 그대로 입력. 틈틈히 저장하고 출력 확인하면서 만들 것.

printf "#Architecture: "
uname -a

printf "#CPU physical : "
nproc --all

printf "#vCPU : "
cat /proc/cpuinfo | grep processor | wc -l

printf "#Memory Usage: "
free -m | grep Mem | awk '{printf"%d/%dMB (%.2f%%)\n", $3, $2, $3/$2 * 100}'

printf "#Disk Usage: "
df -a -BM | grep /dev/map | awk '{sum+=$3}END{print sum}' | tr -d '\n'
printf "/"
df -a -BM | grep /dev/map | awk '{sum+=$4}END{print sum}' | tr -d '\n'
printf "MB ("
df -a -BM | grep /dev/map | awk '{sum1+=$3 ; sum2+=$4 }END{printf "%d", sum1 / sum2 * 100}' | tr -d '\n'
printf "%%)\n"

printf "#CPU load: "
mpstat | grep all | awk '{printf "%.2f%%\n", 100-$13}'

printf "#Last boot: "
who -b | awk '{printf $3" "$4"\n"}'

printf "#LVM use: "
if [ "$(lsblk | grep lvm | wc -l)" -gt 0 ] ; then printf "yes\n" ; else printf "no\n" ; fi

printf "#Connections TCP : "
ss | grep -i tcp | wc -l | tr -d '\n'
printf " ESTABLISHED\n"

printf "#User log: "
who | wc -l

printf "#Network: IP "
hostname -I | tr -d '\n'
printf "("
ip link show | awk '$1 == "link/ether" {print $2}' | sed '2, $d' | tr -d '\n'
printf ")\n"

printf "#Sudo : "
journalctl _COMM=sudo | wc -l | tr -d '\n'
printf " cmd\n"

잘 나오나 확인

 

chmod +x monitoring.sh 
crontab -e
*/10 * * * * /root/monitoring.sh | wall 입력

10 말고 1분으로 놓고 ssh 로 로그인해서 잘 나오는지 보면 좋다.

 

 

평가 전 준비

평가 전에 그룹 지정
groupadd user42
usermod -aG sudo,user42 <사용자이름>
usermod -g user42 <사용자이름>
vm을 상태 저장하면서 종료

스냅샷을 남긴다.

터미널에서 cd /goinfre/intra id/vm이름 으로 가상머신이 설치된 폴더로 진입

shasum vm이름.vdi 를 실행

잠시 기다리면 가상머신의 서명이 나옴

여러차례 실행하면서 바뀌는지 확인

shasum vm이름.vdi > signature.txt 에 넣고 git push 해서 평가준비