100%를 한번에 바꾸는건 어려워도 1%를 100번 바꾸는건 쉽다.

생각정리 자세히보기

42 Seoul

[42 Seoul] Born2beRoot

dc-choi 2022. 5. 9. 19:24
반응형

 

Instructions

이 프로젝트는 가상화의 멋진 세계를 소개하는 것을 목표로 합니다.

특정 지침에 따라 VirtualBox(또는 VirtualBox를 사용할 수 없는 경우 UTM)에 첫 번째 시스템을 생성합니다. 그러면 이 프로젝트가 끝나면 엄격한 규칙을 구현하면서 자신만의 운영 체제를 설정할 수 있습니다.

 

https://dc-choi.tistory.com/56

 

[42 Seoul] Born2BeRoot 설치가이드(Debian)

사진만 따라하면 누구나 설치가 가능하도록 작성하였습니다. 본 게시글은 Born2BeRoot의 Mandatory part만 구현을 했습니다. Bonus part까지의 구현을 원하신다면 다른 블로그의 게시글을 확인해주시기

dc-choi.tistory.com

https://dc-choi.tistory.com/59

 

[42 Seoul] Born2BeRoot 설정가이드(Debian)

사진만 따라하면 누구나 설치가 가능하도록 작성하였습니다. 본 게시글은 Born2BeRoot의 Mandatory part만 구현을 했습니다. Bonus part까지의 구현을 원하신다면 다른 블로그의 게시글을 확인해주시기

dc-choi.tistory.com

 

알아야할 선수지식

가상머신 동작 원리, 사용 목적

물리적으로 1대인 컴퓨터에서 마치 여러 대의 컴퓨터로 운영하는 것과 같은 환경을 제공해주는 소프트웨어

고로, 각 운영체제 환경은 격리상태에서 동일한 하드웨어에서 병렬실행 가능함 (자원의 낭비를 줄인다.)

 

CentOS와 Debian의 차이점

CentOS: RedHat에서 공개한 RHEL을 그대로 가져와 로고만 바꿈, 대규모 커뮤니티에서 지원, RPM 패키지형식 / YUM과 DNF를 패키지 관리자로 사용, CentOS가 Debian보다 데스크톱 응용 프로그램을 지원하는데 약간 우위를 가지고 있음, 엔터프라이즈급에서 사용

Debian: 데비안 프로젝트에 속한 개인 그룹이 구축 및 지원, DEB 패키지 형식 / dpkg와 APT를 패키지 관리자로 사용, 많은 패키지를 가지고 있음, 패키지 설치 및 업그레이드의 단순함, 개인 사용자들이 많이 사용

 

aptitude, apt, apt-get

셋 다 소프트웨어 설치 및 제거를 정상적으로 처리하는 무료 오픈소스 소프트웨어

dpkg: 패키지 관리자 원형

apt-get: 의존성 관리가 되는 패키지 관리자

apt: apt는 apt-get의 기능을 간소화하고, 사용자가 보기 편한 UI를 제공하여 더 사용하기 편하도록 함.

aptitude: 패키지 설치 혹은 삭제 중 충돌될 경우 마땅한 조치를 제안함, 사용하지 않는 패키지를 자동으로 제거함, apt-get이나 apt보다 상위 수준의 패키지 관리자이다.

 

DAC, MAC

임의접근제어(Discretionary Access Control): 소유자가 사용자 또는 그룹이 자원에 접근하는 것을 조절

강제접근제어(Mandatory Access Control): 정의된 정책을 활용해 사용자와 프로세스의 행동을 제어

 

APPArmor

시스템 관리자가 프로그램 프로필 별 프로그램의 역량을 제한할 수 있게 해주는 리눅스 커널 보안 모듈

강제적 접근 통제(MAC)를 제공함으로써 전통적인 유닉스 임의적 접근 통제 모델(DAC)을 지원

개별 응용프로그램을 보호하는 일에 집중, 응용프로그램 단위의 보안 모델 구현

APPArmor는 순전히 정책 파일을 기반으로 함

 

sudo & sudoers

sudo: 유닉스 및 유닉스 계열 운영체제에서, 다른 사용자의 보안 권한, 보통 슈퍼유저로서 프로그램을 구동할 수 있도록 하는 프로그램

root는 무한대의 권한을 가지고 있음 ⇒ 침입자들은 root 권한 얻어내는게 최우선

여러 사람이 root 패스워드를 공유하면, 정기적인 변경의 어려움과 외부 노출확률이 높아진다.

log 추적이 쉬워진다.

sudoers: 모든 계정에게 sudo 권한을 부여한다면, 보안상 큰 문제가 있음.

따라서 /etc/sudoers 라는 sudo 명령어의 config file을 통해 sudo를 사용 가능한 계정을 제한하고 몇 가지 설정으로 보안을 강화한다.

직접 /etc/sudoers 파일을 편집하다가 실수가 발생하면, sudo를 사용할 수 없게 된다. visudo는 문법체크를 해준다.

 

LVM

Logical Volume을 효율적이고 유연하게 관리하기 위한 커널의 한 부분이자 프로그램이며, 물리적 스토리지 이상의 추상적 레이어를 생성하여 논리적 스토리지를 생성할 수 있게 해줌

파티션: 어떤 하나의 무언가를 여러개로 나누는 개념, LVM: 여러 디스크 공간, 짜투리 공간을 합쳐서 하나로 만든 것

사용이유: 여러 디스크 공간을 합쳐서 하나인 양 사용하기 위해, 사용하기 애매한 공간의 디시크 파티션들을 활용하기 위해, 기존에 사용중인 디스크의 공간을 확장할 수 있기에

 

SSH

Secure Shell Protocol의 약자로, 네트워크 프로토콜 중 하나로 컴퓨터와 컴퓨터가 인터넷과 같은 Public Network를 통해 서로 통신을 할 때 보안적으로 안전하게 통신하기 위해 사용하는 프로토콜이다.

ssh는 공개키방식의 암호화를 사용한다. public key를 통해 메세지를 전송하기 전 암호화를 하게 됨. 복호화는 불가, 절대로 외부에 노출되어서는 안되는 private key로 본인의 컴퓨터 내부에 저장되어 있고 이를 통해 복호화함

 

Firewall

보안이 필요한 네트워크의 통로를 단일화하여 관리함으로써 외부의 불법침입으로부터 내부의 정보자산을 보호하기 위한 시스템

사용자 인증, 주소변환, 감사기록 등이 장점, 바이러스와 같은 맬웨어 형태로 존재하는 위협은 방어할 수 없다

 

ufw

Uncomplicated Firewall의 약자로, Debian 계열 및 다양한 리눅스 환경에서 작동되는 사용하기 쉬운 방화벽 관리 프로그램이며, 프로그램 구성에는 iptable를 사용한다. (iptable 설정과 관리가 매우 복잡함)

리눅스의 핵심인 커널은 server에 대한 client의 네트워크 접속을 제어하는 넷필터라는 모듈을 가지고 있는데, 그것을 활용하여 서버 접속에 대한 네트워크 정책을 세우는 프로그램이 바로 Firewall. 설치했다고 바로 작동되지는 않고 시스템 시작시에도 방화벽이 백그라운드에서 자동으로 활성화되게끔 하기 위해선 터미널에서 작업을 해주어야 한다.

 

iptable: 시스템관리자가 리눅스 커널 방화벽이 제공하는 테이블과 그것들을 저장하는 체인, 규칙들을 구성할 수 있게 해주는 사용자 공간 응용프로그램

 

cron

특정한 시간에 or 특정 시간마다 어떤 작업을 자동으로 수행하게 하는 명령어

 

crontab

cron작업을 설정하는 파일

cron프로세스는 /etc/crontab 파일에 설정된 것을 읽어 작업을 수행

분 시 일 월 요일 명령

 

/usr/sbin/anacron

크론과 같이 동작하는 프로그램으로 서버가 일정시간 중지되었을 때에도 작업이 실행되는 것을 보장하기 위해 사용하는 도구

 

/etc/cron.daily /etc/cron.weekly /etc/cron.monthly

시스템 크론 설정 디렉토리, cron은 주기적으로 실행할 내용을 시스템 크론 설정 디렉토리에 넣어 작동시킴.

 

/var/log/cron

크론 실행내용이 기록

 

General guidelines

VirtualBox(또는 VirtualBox를 사용할 수 없는 경우 UTM)의 사용은 필수입니다.

당신은 서명만 하면 됩니다.저장소의 루트에 있는 txt 파일입니다.

시스템 가상 디스크의 서명을 붙여 넣어야 합니다.

자세한 내용은 제출 및 동료 평가로 이동하십시오.

 

Mandatory part

이 프로젝트는 특정 규칙을 따라 첫 번째 서버를 설정하는 것으로 구성됩니다.

서버를 설정하는 문제이기 때문에 최소한의 서비스를 설치하게 됩니다.

이러한 이유로, 그래픽 인터페이스는 여기서 쓸모가 없다.

따라서 X.org 또는 기타 동등한 그래픽 서버를 설치하는 것이 금지됩니다.

그렇지 않으면 성적이 0이 됩니다.

운영 체제로 최신 안정적인 Debian 버전(테스트/불안정) 또는 최신 안정적인 CentOS 버전을 선택해야 합니다. 시스템 관리를 처음 하시는 분은 Debian을 적극 추천합니다.

센트 설정운영체제는 상당히 복잡하다. 따라서 KDump를 설정할 필요가 없습니다.

그러나 SELinux는 시작 시 실행 중이어야 하며 프로젝트의 필요에 맞게 구성을 조정해야 합니다.

AppArmor for Debian도 시작 시 실행 중이어야 합니다.

LVM을 사용하여 암호화된 파티션을 2개 이상 생성해야 합니다. 다음은 예상 파티셔닝의 예입니다.

 

방어하는 동안 선택한 운영 체제에 대한 몇 가지 질문을 받게 됩니다.

예를 들어 apt와 aptitude의 차이 또는 SELinux 또는 AppArmor가 무엇인지 알아야 합니다.

간단히 말해서, 여러분이 사용하는 것을 이해하세요!

SSH 서비스는 포트 4242에서만 실행됩니다. 보안상의 이유로 SSH를 루트로 사용하여 연결할 수 없습니다.

SSH의 사용은 새로운 계정을 설정하여 방어하는 동안 테스트될 것이다. 그러므로 당신은 그것이 어떻게 작동하는지 이해해야 한다.

운영 체제를 UFW 방화벽으로 구성해야 하므로 포트 4242만 열어 두어야 합니다.

가상 시스템을 시작할 때 방화벽이 활성화되어 있어야 합니다.

CentOS의 경우 기본 방화벽 대신 UFW를 사용해야 합니다.

이 장치를 설치하려면 아마도 DNF가 필요할 것입니다.

가상 시스템의 호스트 이름은 42(예: wil42)로 끝나는 로그인이어야 합니다. 평가 중에 이 호스트 이름을 수정해야 합니다.

강력한 암호 정책을 구현해야 합니다.

엄격한 규칙에 따라 sudo를 설치하고 구성해야 합니다.

루트 사용자 외에도 사용자 이름으로 로그인한 사용자가 있어야 합니다.

이 사용자는 user42 및 sudo 그룹에 속해야 합니다.

방어하는 동안 새 사용자를 만들어 그룹에 할당해야 합니다.

강력한 암호 정책을 설정하려면 다음 요구 사항을 준수해야 합니다.

암호는 30일마다 만료되어야 합니다.

암호를 수정하기 전에 허용되는 최소 일 수가 2로 설정됩니다.

사용자는 암호가 만료되기 7일 전에 경고 메시지를 받아야 합니다.

암호는 10자 이상이어야 합니다.

대문자와 숫자를 포함해야 합니다.

또한 연속적으로 동일한 문자를 3개 이상 포함할 수 없습니다.

암호는 사용자 이름을 포함할 수 없습니다.

다음 규칙은 루트 암호에 적용되지 않습니다. 암호는 이전 암호의 일부가 아닌 7자 이상이어야 합니다.

물론 루트 암호는 이 정책을 준수해야 합니다.

구성 파일을 설정한 후에는 루트 계정을 포함하여 가상 시스템에 있는 계정의 모든 암호를 변경해야 합니다.

sudo 그룹에 대해 강력한 구성을 설정하려면 다음 요구 사항을 준수해야 합니다.

sudo를 사용한 인증은 비밀번호가 잘못된 경우 3회까지 제한되어야 합니다.

sudo 사용 시 잘못된 비밀번호로 인한 오류가 발생할 경우 원하는 사용자 지정 메시지가 표시되어야 합니다.

sudo를 사용하는 각 작업은 입력과 출력 모두 아카이브되어야 합니다. 로그 파일은 /var/log/sudo/ 폴더에 저장해야 합니다.

보안상의 이유로 TTY 모드를 활성화해야 합니다.

보안상의 이유로 sudo가 사용할 수 있는 경로를 제한해야 합니다. 예:

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

 

마지막으로 monitoring.sh이라는 간단한 스크립트를 만들어야 합니다.

그것은 bash에서 개발되어야 한다.

서버 시작 시 스크립트는 10분마다 모든 터미널에 일부 정보(아래 목록)를 표시합니다.

배너는 선택 사항입니다.

오류가 보이지 않아야 합니다.

스크립트는 항상 다음 정보를 표시할 수 있어야 합니다.

운영 체제의 아키텍처 및 커널 버전.

물리적 프로세서의 수입니다.

가상 프로세서의 수입니다.

서버에서 현재 사용 가능한 RAM 및 사용률(백분율)입니다.

서버에서 현재 사용 가능한 메모리와 사용률(백분율)입니다.

프로세서의 현재 사용률(백분율)입니다.

마지막 재부팅 날짜 및 시간입니다.

LVM이 활성 상태인지 여부입니다.

활성 연결 수입니다.

서버를 사용하는 사용자 수입니다.

서버의 IPv4 주소와 MAC(미디어 액세스 제어) 주소입니다.

sudo 프로그램으로 실행된 명령의 수.

방어하는 동안 이 스크립트가 어떻게 작동하는지 설명하라는 메시지가 표시됩니다.

또한 수정하지 않고 중단해야 합니다. 크론을 보세요.

다음은 스크립트의 작동 방식을 보여 주는 예입니다.

root@wil (tty1) (2021년 4월 25일 일요일 15:45:00):
#아키텍처: Linux 4.19.0-16-amd64 #1 SMP Debian 4.19.181-1 (2021-03-19) x86_64 GNU/Linux #CPU 물리적: 1
#vCPU: 1
#메모리 사용량: 74/987MB(7.50%)
#디스크 사용량: 1009/2Gb(39%) #CPU 부하: 6.7%
#마지막 부팅: 2021-04-25 14:45 #LVM 사용: 예
#연결 TCP: 1 설정됨
#사용자 로그: 1
#네트워크: IP 10.0.2.15 (08:00:27:51:9b:a5) #수도:42cm

다음은 주제의 요구 사항 중 일부를 확인하는 데 사용할 수 있는 두 가지 명령입니다.

 

Bonus part

다음과 같은 구조를 얻을 수 있도록 파티션을 올바르게 설정합니다.


lighttpd, Mari-aDB 및 PHP와 같은 서비스를 제공하는 WordPress 웹 사이트를 설정합니다.

유용하다고 생각되는 서비스를 설정합니다(NGINX / Apache2 제외!). 방어하는 동안, 당신은 당신의 선택을 정당화해야 할 것이다.

보너스 부분을 완료하기 위해 추가 서비스를 설정할 수 있습니다.

이 경우 필요에 따라 더 많은 포트를 열 수 있습니다.

물론 UFW 규칙은 그에 따라 조정되어야 한다.

보너스 부분은 필수 부분이 PERFICE일 경우에만 평가됩니다.

Perfect는 필수 부품이 통합적으로 수행되었으며 오작동 없이 작동함을 의미합니다.

필수 요건을 모두 충족하지 못한 경우 보너스 부분은 전혀 평가되지 않습니다.

반응형

'42 Seoul' 카테고리의 다른 글

[42 Seoul] Born2BeRoot 설정가이드(Debian)  (0) 2022.05.13
[42 Seoul] Born2BeRoot 설치가이드(Debian)  (0) 2022.05.12
[42 Seoul] Printf  (0) 2022.04.22
[42 Seoul] Get Next Line  (0) 2022.03.07
[42 Seoul] Libft  (0) 2022.01.07