진짜 귀찮기도 하고 안하기 위해서 넷왓으로 통과를 했으나, 프로젝트 및 코로나로 인한 집돌이가 되어 나태해진 과정으로 과제를 안하였기에 눈덩이처럼 불어난 블랙홀 소비를 드디어 멈추고 fractol 과제를 마치니 3월 21일 현재기준 21일 남았다.
기본 서브젝트에서 요구사항은
2021.06.22 - [42 Seoul] - born2beroot
VM(Virtual-Machine) : 가상 머신
물리적 컴퓨터 대신 소프트웨어를 사용하여 프로그램을 실행, 앱을 배포하는 컴퓨팅 리소스
하나 이상의 가상 "게스트" 시스템이 물리적 "호스트" 시스템에서 실행
다양한 수준의 처리 능력 요구 사항을 수용하거나, 다른 운영 체제가 필요한 소프트웨어를 실행 혹은 안전한 환경에서 애플리케이션을 테스트 하기 위해 VM을 사용
Hypervisor(하이퍼바이저)🁤 라 불리는 소프트웨어는 가상 머신의 리소스를 분리, Provisioning(프로비저닝)🁥 하여 가상머신에서 사용할 수 있도록 한다.
🁤 Hypervisor : 가상 머신(VM)을 만들고 실행하는 소프트웨어
🁥 Provisioning : 사용자의 요구에 맞게 시스템 자원을 할당, 배치, 배포해 두었다가 필요시 시스템을 즉사 사용할 수 있는 상태로 준비
운영체제의 선택 Debian vs CentOS
CentOS와 Debian은 모두 인터넷 서버 또는 웹, 이메일, FTP 등과 같은 웹 서버로 사용
Debian은 패키지 설치 및 업그레이드가 단순, 안정성과 보안에 중점을 두며 사용자 편리성이 강한 Ubuntu 등 많은 리눅스 배포판의 기반으로 쓰인다.
CentOS는 Red Hat Enterprise Linux 와 완벽하게 호환되는 무료 기업용 컴퓨팅 플랫폼을 제공할 목적, Red Hat Enterprise Linux의 소스 코드를 그대로 가져와 빌드해 내놓으며 이 과정에서 이루어지는 변형은 레드햇의 상표가 잘리고 그 자리에 CentOS의 상표가 붙음 (Red Hat의 기술 지원은 받지 않는다.)
LVM(Logical Volume Manager)
Logicla Volume을 효율적으로 유연하게 관리하기 위한 커널의 한 부분이자 프로그램
물리적 스토리지 이상의 추상적 레이어를 생성해서 논리적 스토리지(가상의 블록 장치)를 생성할 수 있게 해줍니다
다양한 측면에서 유연성을 제공하는데, 유연한 용량 조절, 크기 조정이 가능한 스토리지 풀(Pool), 편의에 따른 장치 이름 지정, 디스크 스트라이핑, 미러 볼륨 등을 제공
SSH(Secure Shell Protocol)
네트워크 프로토콜 중 하나로 컴퓨터와 컴퓨터가 인터넷과 같은 Public Network를 통해 서로 통신을 할 때 보안적으로 안전하게 통신을 하기 위해 사용하는 프로토콜
서버에 접속할때 비밀번호 대신 key를 제출하는 방식으로 비밀번호보다 높은 수준의 보안요건을 필요로 할때 사용
UFW (Uncomplicated Firewall)
보안이 필요한 네트워크의 통로를 단일화하여 관리함으로써 외부의 불법침입으로부터 내부의 정보자산을 보호하기 위한 시스템
사용자 인증, 주소변환, 감사기록 등이 장점
강력한 접근제어를 제공하기 위해 외부망과 내부망의 구성을 위한 별개의 네트워크를 가진다
바이러스와 같은 맬웨어 형태로 존재하는 위협은 방어할 수 없다.
Aptitude vs Apt(Advanced Packaging Tool)
Aptitude는 사용자 인터페이스를 추가해 사용자가 대화형으로 패키지를 검색해 설치, 제거할 수 있는 패키지 관리 도구로 Apt보다 더 방대하고 apt-get, apt-cache를 포함한 기능들을 포함하며, 제거 중 충돌이 일어날 경우 해결 방법을 제시 가능
Apt는 소프트웨어 설치 및 제거를 할 수 있는 오픈소스 소프트웨어로 패키지 설치, 삭제, 검색, 업데이트 및 다양한 기능을 수행, GUI가 없으며, 설치 및 제거 중에 충돌이 일어날 경우 종료
AppArmor vs SELinux
SELinux는 파일 및 프로세스의 레이블을 기반으로 액세스를 제어하며 보안에 더 중점을 둡니다. 모든 걸 차단하고 필요한 것만 허용
AppArmor는 프로그램 파일의 경로를 기반으로 액세스를 제어하며, 관리가 쉽다. SELinux 와는 반대
예를 들어 애플리케이션이 암호 파일(/etc/shadow)에 액세스하는 것을 방지하기 위해서는 SELinux는 소수의 전용 프로그램 권한만 부여하면 되는 반면 AppArmor는 불가능하다고 말하고 싶지 않은 경우 수천 개의 애플리케이션을 방지하기 어렵.
AppArmor는 네트워크 규칙에 대한 권한이 없고, 커널 코드를 따라잡지 않는다.
Debian 설치
공식사이트 - netinst CD image (generally 150-280 MB), amd64
VirtualBox 설치 및 실행
클러스터 미설치시 software Center에서 설치
도구 - 환경설정 - 디스플레이 - 300%
도구 - 환경설정 - 언어 - 한국어
새로 만들기
이후에는 언어, 국가 등을 설정 하고 Hostname 설정
이후에는 도메인(공백), 비밀번호, 유저이름, 비밀번호를 설정하고
여기까지 진행하면 설치되는 동안 스트레칭도 하고 물도 마시면서 기분전환을 한 다음에
비밀번호 설정하고, 용량에 대한 내용 고지? 받고
Configure the Logical Volume Manager 선택
Delete Logical Volume 모든 걸 삭제
위에 보너스에 해당하는 캡쳐본에 맞춰서 volume group 및 logical volume 이름 및 용량 설정
각각 Use as 및 Mount point 설정
swap - Use as : swap area
var--log - Mount point : Enter manually - /var/log
나머지는 Ext4, 그리고 각자 맞게끔 하면 된다.
그리고는 맨 아래로 내려가서 finish and write changes to disk를 누르고 진행하다
미러아카이브 설정 / deb.debian.org 으로 주소 설정
프록시(공백) 설정
문제 발생 리포트 No
//로그아웃 없이 root 계정으로 접속
su -
//sudo 설치
apt-get update
apt-get install sudo
//vim 설치
sudo apt-get install vim
//ssh 설치
apt install openssh-server
//ssh 상태 확인
systemctl status ssh
//ssh 서버 상태 설정
sudo vim /etc/ssh/sshd_config
ssh 포트 설정 및 Root 관리자 접속 제한
#Port 22 -> port 4242
#PermitRootLogin prohibit-password -> PermitRootLogin no
#제거 필수 (#은 주석 처리를 의미)
ssh 포트포워딩 설정
포트포워딩 : 컴퓨터 네트워크에서 포트를 통해 특정 호스트를 식별할 수 있도록 처리하는 일
hostname -I : 가상머신 ip 확인
VirtualBox 설정 - 네트워크 - 고급 - 포트포워딩
호스트 ip : System Preferences - Network - IP Address 확인
게스트 ip : (가상머신에서)hostname -I
ufw 설치
su -
//설치
sudo apt install ufw
//확인
ufw status
//가상머신 실행될 때 실행
ufw enable
//특정포트 개방
ufw allow 4242/tcp
//그외 포트 개방하지 않음
ufw default deny
ufw status
//삭제 : $ sudo ufw status numbered를 통해 포트에 해당하는 번호를 확인 후
//$ sudo ufw delete N을 통해 포트 설정을 해제할 수 있다.
//호스트 이름 확인
hostnamectl
//호스트 이름 변경
hostnamectl set-hostname "변경할 이름"
vi /etc/login.defs
login.defs : 사용자 계정의 설정과 관련된 기본 값을 정의한 파일
apt install libpam-pwquality
//패스워드 관련 수정
vi /etc/pam.d/common-password
minlen=10
// -1 은 최소 한 글자 이상
ucredit=-1 (대문자)
lcredit=-1 (소문자)
dcredit=-1 (숫자)
maxrepeat=3
// 사용자 이름 불가
reject_username
// 루트 비밀번호도 동일하게 적용
enforce_for_root
// 이전 비밀번호가 아닌 7글자 이상
difok=7
//sudo권한을 주기위한 설정파일 (sudoers) 열기
visudo
sudoers : 일반 계정이 sudo 명령어를 이용하여, 임시로 root 권한을 얻을 수 있도록 하는 파일(일반 계정에 sudo 권한을 부여하기 위해선 /etc/sudoers파일에 대한 수정이 필요하다.)
// sudo에서 제공하는 또 다른 보안 기능 중 하나이다.
// 사용자의 부주의로 인해 현재 계정의 PATH에 악의적인 경로가 포함된 경우
// 이를 무시함으로써 sudo를 통한 전체 시스템이 해킹되는 경우를 방지
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
Defaults authfail_message="권한 획득 실패"
Defaults badpass_message="비밀번호 실패"
//sudo 명령 로그 저장 위치 설정
Defaults iolog_dir="/var/log/sudo/"
//sudo 명령 실행 시 input/output명령어를 로그로 저장하는 설정
Defaults log_input
Defaults log_output
//sudo 명령 실행 시 tty(teletypewriter : 리눅스 터미널)를 강제하는 설정(스크립트를 통한 sudo 제한)
Defaults requiretty
Defaults passwd_tries=3
입/출력 관련 작업은 아카이브되기 위한 로그파일이 저장될 폴더 생성
mkdir /var/log/sudo
- log의 경우 /var/log/sudo/00/00에서 확인할 수 있으며 sudo 명령어 하나마다 하나의 폴더가 생성된다.
- Details
- sudo 실행 시 실행한 위치와 실행한 명령어의 위치가 저장되어 있다.
- sudo로 실행한 명령어가 오류로 인해 실행되지 않았을 시 출력되는 내용이 저장되어 있다.
- sudo로 실행한 명령어가 표준 입력을 받은 내용이 저장되어 있다.
- sudo로 실행한 명령어가 표준 출력으로 결과를 출력한 내용이 저장되어 있다.
- session timing file.
- sudo로 실행한 명령어가 tty로 입력받은 내용이 저장되어 있다.
- sudo로 실행한 명령어가 tty로 출력한 결과가 저장되어 있다.
- log
- Details
- 폴더에는 총 7개의 log 파일이 존재한다.
useradd "사용자명" (새 사용자 생성)
//userdel "사용자명" (기존 사용자 삭제)
passwd "새로운 사용자" (새 사용자 비밀번호 설정)
groupadd user42 (그룹 생성)
//gourpdel "그룹명" (그룹 삭제)
usermod -aG sudo,user42 jaewpark
//sudo, user42 그룹에 jaewpark을 추가
//-G : 사용자를 포함할 그룹들을 지정
// 특정 그룹(user42)의 속성을 primary group이 되도록 변경
usermod -g user42 jaewpark
// CPU load에 필요한 mpstat
apt-get install sysstat
vi monitoring.sh
mornitoring.sh
printf "#Architecture: "
uname -a
printf "#CPU physical : "
nproc --all
// 가상 프로세서(vCPU)의 갯수를 출력
printf "#vCPU : "
cat /proc/cpuinfo | grep processor | wc -l
// free 사용가능한 메모리확인 (-m : MB)
printf "#Memory Usage: "
free -m | grep Mem | awk '{printf"%d/%dMB (%.2f%%)\n", $3, $2, $3/$2 * 100}'
// df 명령어는 "Disk Free"의 약어(현재 사용중인 파일시스템의 전체크기, 사용중인 크기, 사용가능한 크기, 사용율, 마운트정보등을 표시)
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"
// 13번째 필트 값 : 유휴 사용량
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 입력
- sudo service cron start : 크론탭 시작
- sudo service cron stop : 크론탭 중지
- sudo service cron restart : 크론탭 재시작
shasum 만들어진.vdi
해당 코드를 signature.txt 에 넣고 제출
평가 중에 사용된 명령어
cat /etc/group
cat /etc/passwd
apt list | grep sudo
'42 Seoul' 카테고리의 다른 글
[42Seoul/push_swap] 최적화는 어떻게 하는데요? (0) | 2022.04.04 |
---|---|
[42Seoul/leaks 사용] leak 왜 터지는지 아직도 몰라? (0) | 2022.04.04 |
[42Seoul/Fractol] 다시 시작 mlx (0) | 2022.03.07 |
[42Seoul/minitalk] 구현 (1) | 2021.09.28 |
[42Seoul/minitalk] 개념 2편 (3) | 2021.09.25 |
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!