virtual machine 가볍게 둘러보기 (born2beroot)

koeyhoyh·2022년 4월 18일
1

42Seoul

목록 보기
8/11

juson 님과 함께 작성했습니다.

  1. bonus 대로 partition 설정 : https://velog.io/@appti/born2beroot-Virtualbox-Debian-%EC%84%A4%EC%B9%98
  2. 기본 설정 : https://techdebt.tistory.com/18?category=833728

나는 이 과제의 목표를
1. (가장 중요) 가상 머신의 사용 방법을 알고,
2. 각 OS의 차이점을 알고 선택할 수 있으며,
3. 최소한의 설정만이 되어있는 리눅스를 이용해 자신이 필요한 서비스를 설치하고 이용할 수 있다.

라고 생각했다.

따라서, 자세히 찾아본다고 해도 쉽게 이해되지 않는 개념들은 간단히 찾아보고 사용 방법을 중점적으로 찾았다.

예) ufw (Uncomplicated firewall)
(간단한 설명)
Uncomplicated FireWall의 약자이다. 복잡하지 않고 쉽게 방화벽을 관리하고 사용할 수 있게 해준다. 데비안 계열에서 주로 사용하고 있다.

지금 우리가 사용할 때는 허용된 포트에서만 ssh 연결을 허용해주는 역할을 맡고 있다. 아무 사람들이나 들어와서 마구잡이로 연결한다면 내 정보, 문서, 심지어는 내 컴퓨터 자원까지 이용할 것이다.😡

사용 예제)
ufw allow [port number]
ufw status
ufw status verbose (verbose 옵션은 추가 세부정보 제공)
ufw status numbered
ufw enable
ufw delete [number]
등등 ...

사용하지 않고, 필요하지 않은데 찾아보고 외우는 것은 금방 잊어버릴 뿐더러, 비효율적이라고 생각합니다.


General instructions

  1. cloned repository 안에 있는 signature.txt file 파일이 실제 가상머신의 "sha 체크섬 값"과 같은지 확인하자.

-> 프로젝트를 제출할 때의 가상머신과 동료평가를 받을 때의 가상머신이 완전히 같은지 알려주는 방법이다.

sha-chechsum 값은 보통 파일의 유효성을 검사할 때 많이 사용한다. (파일이 위-변조 되었을 때 등등...)

터미널에서 가상머신이 존재하는 폴더 안으로 들어가 shasum [virtual Machine Name]

이 값은, vm을 실행할 때마다 바뀌므로 Vm을 복제해놓거나, 저장한 상태를 사용해야 한다.

-> virtual machine 에서 full clone을 이용해 새로운 가상머신을 보여주면 될 것 같다.

정확히는, 파일이 수정될 때마다 바뀐다. 로그인하면, 다른 명령어들을 사용한다면 그에 따른 로그가 생성될 것이고, 그로 인해 파일이 바뀌는 것 같다.

Project overview

가상 머신에 대해 간단히 소개하자면, 컴퓨팅 환경을 소프트웨어로 구현한 것이다. 컴퓨터가 만들어 낸 가상의 컴퓨터라고 할 수 있겠다.

Debian을 사용했다.

CentOS 와 Debian의 차이점

보통 redhat(CentOS) vs debian(Ubuntu)
이렇게 비교를 많이 하고는 한다.

CentOS : 전문 기업에서 만들어진 redhat 기반의 무료 배포용 linux OS
이제 다시는 새로운 버전을 만들지 않고, 지원도 종료한다고 공식적으로 알렸다.
-> 업데이트가 느리지만, 안정성이 좋고 보안측면이 강하다.

(하지만 7버전은 24년, 8버전(최신)은 21년 지원 종료)

Debian : 온라인 커뮤니티에서 만들어진 OS

전문 회사의 지원 X, only Community
개인 유저 커뮤니티에 의해 문서, 매뉴얼 등을 습득 가능하다.


apt, aptitude, AppArmor란??

참고 : https://www.fosslinux.com/43884/apt-vs-aptitude.htm

apt (Advanced Packaging Tool)

aptittude

APPArmor

apt의 프론트엔드 프로그램
-> apt를 더 사용하기 쉽게 만든 상위 레벨의 프로그램이라고 보면 편하다.

apt 는 low-level package manager 이기 때문에, 다른 high-level package manager 들에게 사용될 수 있다.

aptittude도 apt를 사용하는 high-level package manager이다.
-> 더 많은 기능, 패키지를 설치할 때 충돌 문제 자동 해결 (apt는 불가), 대화형 UI 제공

AppArmor("Application Armor")는 시스템 관리자가 프로그램 프로필 별로 프로그램의 역량을 제한할 수 있게 해주는 리눅스 커널 보안 모듈이다.
파일 경로를 통해 작동한다.

enforce mode -> 해당 프로세스의 정의되지 않은 행동, 허용되지 않는 행동 아예 금지

complain mode -> 허용되지 않는 행동도 실제로 실행되지만, log에 남는다.
(시스템에 따라 syslog, auditd, kernel log, journald logs에서 로그를 찾을 수 있다.)
(👍 apparmor_status 명령어를 쳐보면 지금 어떻게 작동하는지 알 수 있음!!)


Simple setup

Check that the UFW service

ufw service verbose

Check that the SSH service

systemctl status ssh

Check that the chosen operationg system is Debian

lsb_release -a


User

참고 : https://reddb.tistory.com/22 [비밀번호 정책 변경]

libpam-pwquality : 패스워드 설정 강화를 위한 pam 모듈

PAM(Pluggable Authentication Modules)
: 리눅스 시스템에서 사용하는 인증 모듈로써 응용 프로그램(서비스)에 대한 사용자의 사용 권한을 제어한다.

출처 : http://www.igloosec.co.kr/BLOG_%EB%A6%AC%EB%88%85%EC%8A%A4%20PAM%20%EB%AA%A8%EB%93%88%EC%9D%98%20%EC%9D%B4%ED%95%B4?searchItem=&searchWord=&bbsCateId=49&gotoPage=1

passwd 파일에 직접 접근해 권한을 받아오는 굉장히 위험하고, 침해사고가 일어나는 문제점을 해결한 방법이다.

내 비밀번호 정책 확인 방법

vi /etc/pam.d/common-password
vi /etc/login.defs

reject_username : 비밀번호에 username이 정방향, 또는 역방향으로 되어있을 경우 거부

enforce_for_root : root의 비밀번호에도 똑같은 정책 적용

difok : 이전 비밀번호와 몇 개 이상의 문자는 달라야 한다.

참고 !:

chage -l [UserName] // root, hyojeong, juson ...
정책 확인
(정책은 수정된 이후 생성된 계정만 적용)
-> chage -m 2 [UserName]
-> chage -M 30 [UserName]
-> chage -W 7 [UserName]
로 변경해주어야 한다.

User가 sudo, user42 group에 속해있는지 확인

groups [이름] // root, hyojeong, juson

실제 유저를 만들어봄으로써, 패스워드 정책이 잘 되어 있는지 확인

chage -l [UserName] // root, hyojeong, juson, ...

  1. create a new user (Assign it a password of your choice, respecting the subject rules

    useradd [UserName] + passwd [UserName]

  2. Now that you have a new user, ask the student being evalutated to create a group named "evaluating" in front of you and assign it to this user.

    groupadd [evaluating] (그룹 생성) + usermod -aG evaluating [UserName] (그룹 넣기) + groups UserName

  3. finally, ask the student evaluated to explain the advantages of this password policy
    (물론, "서브젝트에 그렇게 나와있어서." 같은 답변은 안된다~)

    참고 : https://www.itworld.co.kr/news/111039
    https://jbonneau.com/doc/BS12-USEC-passphrase_linguistics.pdf
    https://nakedsecurity.sophos.com/2012/03/19/multi-word-passphrases/
    장점은 비슷하게 알 것이라고 생각한다. 단점을 위주로 조사해왔다. 패스워드 : 정책을 강제해도, 사람들은 그렇게 복잡한 패스워드를 사용하지 않는다. (만국 공통, 연구 결과 사람들은 대부분 영문,숫자,특수문자 순으로 설정한다.) 무작위로 정하기에는 기억하기에 문제가 있기 때문에 여러 도메인에서 똑같거나 거의 비슷한 패스워드를 사용하게 된다.
    그리고 최근의 연구결과에 따르면 복잡한 비밀번호가 반드시 '안전'하다고 할 수 없다고 말한다.

    출처 : https://xkcd.com/936/


Hostname and Partitions

호스트 네임은 [***]42 의 형식을 따라야 한다.

Modify this hostname by replacing the login with yours, then restart the machine
호스트 네임을 변경해보아라, 그리고 다시 시작해 변경되었는지 확인하라.

hostnamectl set-hostname [New-hostname]

ask the student evaluated how to view the partitions for this virtual machine

lsblk

Compare the output with the example given in the subject
subject에 나와있는 예제와 비교해라.


SUDO

Check that the "sudo" program is properly installed on the virtual machine

dpkg -l [부가 명령어] //(설치된 패키지 목록을 볼 수 있는 명령어)
dpkg -l | grep sudo

dpkg - 데비안 패키지 관리 시스템 (apt와 같이 다른 곳에 이용되는 low-level 의 도구)

The evaluated student should now show assigning your new user to the "sudo" group
new user를 sudo 그룹에 할당하는 것을 보여야 한다.

groups -aG sudo [new user]

The subject imposes strict rules for sudo. The evaluated student must first explaing the value and operation of sudo using examples of their choice.
sudo의 가치와, 작동방식을 예를 들어 설명해라.

sudo 명령어는 보통 unix 계열에서 사용되며 다른 사용자의 보안 권한으로서 프로그램을 구동할 수 있게 만들어준다. 보통은 root(super user)의 권한을 많이 이용한다.

1. 보안 상의 이유로, 보통 운영체제들은 root로써 작동하는 시간을 최대한 줄이는 것을 권장한다.
2. root가 무슨 작업을 했는지는 알 수 없지만, sudo를 사용한다면 '어떤 사용자가' root권한으로 '무슨 행동을 했는지' log에 기록된다.
3. 이 것도 보안상의 이유인데, sudo 명령은 sudoers에 기록된 사용자만 사용할 수 있기 때문에 누군가 침입했는지의 여부를 알 수 있기도 하다.
출처 : https://deois.tistory.com/entry/sudo%EC%82%AC%EC%9A%A9%EC%9D%98-%ED%95%84%EC%9A%94%EC%84%B1

In a second step, it must show you the implementation of the rules imposed by the subject.
sudo 규칙이 구현되었다는 것을 보여라.

visudo 로 규칙 구현한 것들을 보여줄 것. (실제 작동하는 모습도!)

Verify that the "var/log/sudo/" folder exists and has at least one file.
try to run a command via sudo. See if the file in the "/var/log/sudo/" folder have been updated
"var/log/sudo/" 폴더가 존재하고, 적어도 하나의 파일이 있음을 보여라.
sudo 커맨드를 사용해 해당 폴더에 로그가 남겨지고 있음을 보여라.

cd var/log/sudo/00/00
해당 폴더에 들어가면, 00 ~ ?? 까지 로그가 존재한다. 까서 해당 유저가 이러한 명령어를 사용했다고 보여드리면 된다.
예)


UFW

Check that the "UFW" program is properly installed on the virtual machine.
Check that it is working properly

ufw status verbose

The evaluated student being evaluated should explain to you basically what UFW is and the value of using it

Uncomplicated FireWall의 약자이다. 복잡하지 않고 쉽게 방화벽을 관리하고 사용할 수 있게 해준다. 데비안 계열에서 주로 사용하고 있다.

지금 우리가 사용할 때는 허용된 포트에서만 ssh 연결을 허용해주는 역할을 맡고 있다. 아무 사람들이나 들어와서 마구잡이로 연결한다면 내 정보, 문서, 심지어는 내 컴퓨터 자원까지 이용할 것이다.😡

List the active rules in UFW. A rule must exist for port 4242.

ufw status verbose

Add a new rule to open port 8080. Check that this one has been added by listing the active rules.

ufw allow 8080 + ufw status verbose

Finally, delete this new rule with the help of the student evaluated.

sudo ufw status numbered
sudo ufw delete (8080 port's number)


SSH

Check that the SSH service is properly installed on the virtual machine

systemctl status ssh

Check that it is working properly

systemctl ststus ssh 명령어에 같이 들어있다.

The evaluating student must be able to explain to you basically what SSH is and the value of using it.
SSH가 뭐고, 어떨 때 사용하는지를 간단히 설명해라.

Secure Shell Protocol
네트워크 프로토콜 중 하나로, 컴퓨터와 컴퓨터가 통신할 때 안전하게 통신하기 위해 만들어졌다. 주 목적은 (데이터 전송, 원격 제어)

처음 42서울에 왔을 때, 42서울의 git 주소를 사용하기 위해 ssh-key를 만들어 등록했던 때를 생각하는가? 이 또한 ssh를 이용한다. github 등의 원격 저장소에 데이터를 전송할 때, aws 인스턴스 서버에 접속해 머신에 명령을 내릴 때 등등... 수 많은 곳에 사용하고 있다.

Verify that the SSH service only uses port 4242.

netstat -anp | grep LISTEN | grep sshd

netstat 명령어가 뭐야? // man netstat

linux networking subsystem의 정보를 출력해주는 명령어!

-a : 비활성화된 것들까지 모두 보여라
-n : program을 숫자로 표기해라
-p : 소켓에 속한 프로그램의 PID를 보여라

LISTEN : 다가올 연결에 대비해, 해당 포트에 있는 것들은 신호가 오는 것을 듣고 있다는 뜻이라고 알고 있으면 된다!!

The student evaluated should help you user SSH in order to log in with the newly created user.
To do this, you can use a key or a simple password.
It will depend on the student being evaluated.
새로 만든 유저로 ssh를 이용해 가상머신에 접속할 수 있는가? 😺

terminal (zsh) 에서
ssh [userName]@192.168.56.1 -p 4242 + password 입력
원격으로 접속할 수 있다는 것을 보여준다.


Script monitoring

참고:

위의, 따라하기 블로그에서는 sudo 명령어의 개수를 잘못 세어주고 있다.
로그가 기록되는 올바른 폴더를 참조하도록 바꿀 것.

The operation of its script by displaying its code.

10분마다 monitoring.sh 가 작동하고 있음은 자동적으로 보였을 것이다.
shell script를 보여주면 된다.
cat root/monitoring.sh

What is "cron".

일종의 자동 scheduler program 이다. 원하는 주기, 원하는 시간, 원하는 요일이나 때에 자동으로 등록한 프로그램을 실행시킬 수 있다!!

Once the correct functioning of the script has been verified, the student evaluated should ensure that this script runs every 30s. (...)

crontab -e 이용해 들어간다.
*/10 * * * * /root/monitoring.sh | wall 라고 되어있는 script를 수정한다.
* * * * * sleep 30; /root/monitoring.sh | wall
현재, crontab에서 초 단위로 작동하게 할 수는 없으며, sleep을 주어 30초마다 작동하게 만들 수는 있다.

default가 1분을 가지고 있어서, 1분마다 실행되는 것 하나. 30초 기다린 후 실행되는 것 하나 이렇게 만들면 30초마다 실행 가능하다!!


bonus

WP 홈페이지 구성 참고 : https://nostressdev.tistory.com/12?category=868784

위 홈페이지의 글은 이 페이지를 참고한 것 같다.
https://www.osradar.com/install-wordpress-debian-10/
참고 2: https://www.osradar.com/install-wordpress-with-lighttpd-debian-10/

ftp 사용법 참고 : https://jjeongil.tistory.com/1374
https://github.com/hanshazairi/42-born2beroot


99. 나머지, network setting하기.

vboxnet1 생성

port forwarding rule

rule2 : 192.168.57.1 | 8080 | 10.0.2.15 | 80

후, adapter2에 똑같이 host-only

안에 port4242 있는 스크립트에
port 8080 추가

ufw allow 80

위의 참고 사이트를 따라하고, 네트워크를 추가하면 바로 wordpress 홈페이지를 사용할 수 있다 : )


Useful Service

FTP

file transfer protocol

원래, 클러스터 컴퓨터에서 sftp 를 이용해 파일을 전송하는 모습을 보여주고 싶었는데 관리자 권한으로 막혀서, 다른 디렉토리(원격 디렉토리)에 있는 파일을 hyojeong 의 디렉토리 (로컬 디렉토리)로 옮기는 모습을 보여준다.

get [file Name] 으로 파일을 가져오는 것을 보여주고, 파일이 정상적으로 다운로드 되었다는 것을 보여준다.

ftp 10.0.2.15
id : hyojeong
pwd : ****

입력하고 접속.

나의 경우 ftp에 hyojeong, root 만 접속할 수 있게 설정해놓았기 때문에, 그 외의 유저들은 접근할 수 없다.

ls 로 디렉토리 이동 후, 임시로 만들어 놓은 파일 "get hello.c" 로 다운로드

그러면 var/www/html/ftp directory에 hello.c가 있을 것이다. (hyojeong 계정의 홈 디렉토리이다.)

profile
내가 만들어낸 것들로 세계에 많은 가치를 창출해내고 싶어요.

0개의 댓글