-> 가상머신(버츄얼 박스)은 컴퓨터 환경을 소프트웨어로 구현한 것으로, 하드웨어가 없이 PC내에서 새로운 PC를 사용하는 방법이라고 이해하면 간단함, 그러고 우리가 사용하는 가상머신은 시스템 가상머신으로 이는 OS의 실행을 지원해서 OS를 설치하고 그 OS를 실행하면 PC사용환경과 동일하게 사용가능
-> 하이퍼바이저라는 프로세스에서 가상머신이 동작을 하며, 컴퓨터의 리소스를 가상으로 공유하여 호스트 컴퓨터가 여러 게스트 가상머신을 지원할 수 있도록 하는 프로세스
-> 하이퍼바이저에서 가상머신을 실행하면 가상머신이 호스트의 하드웨어와 독립되어서 실행되므로 이를 통해서 OS를 2개이상을 실행할 수 있음
-> 하나의 PC로 2개 이상의 os를 실행하려고 할 때
-> 이를 통해서 위험한 환경을 직접 호스트에서 실행하기 어려울 경우 하나의 가상머신을 통해서 위험한 작업을 실행하고 이를 해결할 수 있음
-> 단점으로는 가상머신이 호스트PC에서 진행되는 것이다 보니, 호스트 PC의 성능에 영향을 줄 수 있고, 일반적인 PC로 실행하는 환경보다는 속도가 느림
-> uname -a 를 통해서 OS가 무엇인지 확인 할 수 있음
공통 -> 리눅스 운영체제 -> 리눅스는 보통 서버용 OS로 많이 사용, GUI, CLI를 모두 지원
차이점
-> CentOS를 사용하며 이는 레드햇 엔터프라이즈 리눅스(RHEL)의 소스코드를 이용해서 만듦
-> 기업용 서버로 출시된 os가 있으며 이는 유료
-> 로키는 오픈소스 os
-> 데비안에 비해서 기능이 조금 더 많음
-> 오픈소스 OS로 무료
-> 보통 개인용으로 많이 사용되며 사용하기가 Rocky(CentOS)에 비해편리함
AppArmor / Rocky(CentOS) -> SELinux를 사용
-> 시스템 관리자가 프로그램을 관리하기 위해서 사용하는 리눅스 커널 보안 모듈
-> 네트워크 액세스, Raw 소켓 엑세스, 파일의 읽기,쓰기,실행 능력 통제
-> 말 그대로 지역 볼륨 매니저로 볼륨(저장공간)을 관리하는 것으로 곳곳에 흩어져있는 저장공간을 관리하는것
-> 만약 물리적인 공간(PV, 하드디스크 총 공간: 12GB(4GB로 나뉘어 있음))이 있을 때 이를 각각 3개의 파티션(4GB,4GB,4GB)로 나눠서 사용할 수도 있고, 한번에 12GB(VG, 12GB)를 사용할 수도 있음
-> 이를 통해 유연하게 공간을 확장,축소할 수 있음, 즉 물리적으로는 분할되어있지만 이를 논리적으로 합쳐서 확장, 축소를 한다는 의미
-> lsblk로 설치된 공간을 보게 될 경우, type에 lvm이라고 적힌것들이 해당 내용이며, sda5_crypt에 할당된 공간이 아래의 3개의 파트로 분리된 용량의 총합과 같음(LVM을 통해서 파티션을 나눠준것)
-> 파티션으로 나뉘어져 있을 때, 이를 물리볼륨(PV)로 변환 / 기본단위는 4MB
-> 하나이상의 물리볼륨을 그룹화해서 볼륨그룹으(VG)로 만듦
-> 물리그룹을 나누어 할당한 것이 논리볼륨
-> 논리볼륨을을 새 시스템에다가 1:1로 연결(마운트)
-> LVM encryption -> 해당 암호로 인코딩을 해서 생성하는것으로, 해당 암호로 디코딩을 해서 내용을 파악하는 것으로 이를 통해 비밀번호처럼 동작할 수 있다.
-> 기본적으로 둘다 Advanced Packaging Tool로 패키지 관리툴이다.
-> aptitude가 apt의 상위호환이라고 생각을 하면 되며, apt는 CLI(현재 사용하는 방식)만 제공하고, aptitude는 CLI 및 GUI(현재 맥)도 제공
-> apt가 aptitude보다 간단하고 보기 편하지만, 기능이 많이 부족함
-> aptitude는 사용되지 않는 패키지까지 삭제 / apt는 명시적으로 삭제를 해야함
-> aptitude는 작업 시 충돌이 일어날 경우 해결방법을 제시해주지만 apt는 바로 종료
-> 네트워크 프로토콜 중 하나로, 개인적인 네트워크 망을 통해서 서로 통신하는 것으로 ssh는 키가 있기때문에 보안성이 높음
-> 프로토콜이기 때문에 데이터의 전송, 제어 등등 통신의 기능 제공
-> private, public key가 있으며, private은 클라이언트, public은 호스트가 가지고 있음
-> private를 통해서 암호화를 하며 public을 통해서 암호화를 해제해서 확인을 함
-> 확인결과 문제가 없으면 통신을 주고받음
-> NAT(Network Address Translation)은 단어 그대로 네트워크 주소 변환을 설정하는 것으로 IP를 작성하는것을 통해서 네트워크 연결을 하는것
-> 포트포워딩 : 포트를 지정해주는 것으로 간단하게 4242라는 포트를 지정해서 이 통로로만 ssh통신을 할 수 있도록 설정하는것
-> 포트 : 해당 기기의 문과 같은 역할이라고 생각을 하면 되며, 각각의 포트를 통해서 데이터 전송 및 접근 등등 해당 기기 안의 내용들에 접근할 수 있는 통로
-> systemctl status ssh : ssh의 현재 상태 표시 / ssh -V로 ssh의 현재 버전 확인
-> 방화벽 관리프로그램으로 ssh를 통해서 원격접속을 진행할 때, 방화벽을 해제해줘야지 접근이 가능, 예시로 윈도우에서 원격접속을 하기 위해서 방화벽설정을 해야한다는 맥락으로 이해하면 편함
-> 네트워크를 보호하기 위해서 사용하며, 서브젝트에서 포트4242를 열고 이를 통해 ssh접속을 해야한다고 하는데 이것을 설정해주는 부분
-> ufw 에서 기본포트는 22인데 이를 서브젝트 내용처럼 4242로 변경한것
-> system status ufw or ufw status verbose로 설치 확인 및 실행상태 확인가능
-> ufw allow로 포트 허용(룰 자동 추가)
-> ufw status numbered로 룰 번호 확인 / ufw delete 넘버로 해당 번호의 룰 삭제
-> 로그인한ID@seykim42 -> @뒤에 내용이 호스트네임을 뜻함
-> hostnamectl : 호스트네임을 확인할 수 있음
-> sudo hostnamectl set-hostname “”: 호스트네임 변경
-> /etc/login.defs 은 사용자 계정의 설정과 관련된 디폴트값을 정의한 파일
-> 이 파일 내에서 max_days, min_days, pass_warn_age(경고 주기) 정의해주면 됨
-> libpam-pwquality : 패스워드 강도를 설정하는 모듈
-> /etc/pam.d/common-password 이 경로 안에서 내용을 찾아서 추가하면 그 정책이 적용됨
-> retry -> 입력횟수 / minlen -> 암호 최소 길이 / ucredit=-1 -> 대문자 1개 이상 포함 /lcredit = -1 -> 소문자 1개 이상 포함 / dcredit=-1 -> 숫자 1개 이상 포함 / reject_username -> 유저이름과 같은 내용(정방향/역방향) 사용거부 / enforce_for_root -> root를 변경하려고 할 때에도 동일한 룰 적용 / difok -> 기존 패스워드와 달라야하는 개수
-> sudo adduser “” : user를 새로 생성
-> groupadd “” : 그룹 추가
-> usermod -g user42 “” : “”의 그룹이름을 user42로 변경
-> usermod -aG ㅁ ㅂ : ㅁ의 위치에 그룹이름, ㅂ위치에 유저 이름
-> userdel -r “” : 유저 삭제
-> root에서 grep /bin/bash /etc/passwd | cut -f1 -d: -> 현재 있는 유저의 아이디만 짤라서 보여줌
-> 관리자 권한으로 실행하는 것으로 sudo를 사용함으로써 기록이 남음
-> 이 기록들을 통해서 외부에서 원치않은 접근이 있었는지 파악 및 어떠한 내용들을 실행했는지 확인할 수 있음
-> 또한 비밀번호를 설정할 수 있기 때문에 효율적으로 관리가 가능함
-> sudo 로그 기록을 확인할 때, 각 실행마다 로그가 번호가 매겨져서 저장
-> visudo에서 requiretty : 이게 외부에서 sudo명령어를 실행하지 못하도록 설정하는것, crontab 이나 기타등등에서 실행되지 않도록 방지하는것
-> secure_path : sudo명령어를 실행할 수 있는 목록이 저장된 위치
-> zcat -> 깨진 내용들을 복구해서 보여주는것으로 ttyout에 sudo실행결과가 저장되어있음
-> uname -a : 현재 운영체제의 각종 버전들에 대한 모든 정보 출력
-> nproc —all : 설치된 물리 프로세서의 개수 출력
-> cat /proc/cpuinfo | grep “physical id” | wc -l -> cpu의 코어 개수 확인하는 명령어로 processor를 그립하면 process만 확인가능하며, 갯수만 세면 되기 때문에 wc -l을 통해서 개수만 세서 출력
-> cat /proc/cpuinfo | grep processor | wc -l -> cpu의 코어 개수 확인하는 명령어로 processor를 그립하면 process만 확인가능하며, 갯수만 세면 되기 때문에 wc -l을 통해서 개수만 세서 출력
-> free —mega | grep Mem | awk '{printf"%d/%dMB (%.2f%%)\n", $3, $2, $3/$2 * 100}' -> RAM의 사용률을 파악하는 코드로 free : 시스템 메모리 사용현황 출력 명령어로 —mega플래그를 통해서 메가바이트 단위로 표시하는것 / grep으로 Mem의 사용만 가져옴 / 3번째 필드 : 사용량 / 2번째 필드 : 전체 공간
-> df -a -BM | grep /dev/map | awk '{sum+=$3}END{print sum}' | tr -d '\n'
: df -a 로 디스크 사용량의 전체를 -BM플래그를 통해서 MB단위로 변경 / grep /dev/map을 통해서 root와 home의 내용을 그랩 / sum += $3이라고 되어있는 것은 현재 LVM으로 2개로 나뉘었기 때문에 전체의 크기를 파악하기 위해서 더해주는 것으로 $3은 사용량을 의미하는 파트
$4는 전체용량의 파트
-> mpstat | grep all | awk '{printf "%.2f%%\n", 100-$13}' : mpstat(syssat설치) 프로세서의 사용률을 확인하기 위함. all부분의 내용을 그랩 / $13은 %idle으로 I/O를 제외한 CPU의 대기율로 100에서 빼주게 된다면 이는 전체 사용량이 나옴
-> who -b | awk '{printf $3" "$4"\n"}' : 호스트에 로그인한 사용자 정보 출력으로 -b플래그로 마지막 시스템 부팅시간을 출력 $3이 날짜파트 $4가 시간파트
-> if [ "$(lsblk | grep lvm | awk ‘{printf $6”\n”}’ | wc -l)" -gt 0 ] ; then printf "yes\n" ; else printf "no\n" ; fi : lsblk가 현재 하드웨어 구성이 어떻게 되어있는지 확인을 할 수 있음 / -gt 플래그는 if에서 사용되는 것으로 greater로 크다는 의미를 설정 / then이면 yes 프린트 / 아니면 no프린트
-> ss -t | grep -i ESTAB | wc -l | tr -d '\n' : ss -> 소켓 상태를 조회할 수 있는 유틸리티 / ssh가 연결될 경우 TCP로 설정을 해줘서 tcp로 그랩해서 개수 출력 / ESTABLISHED => 커넥션이 된 상태로, 이 상태가 되어야지 활성화 된 상태를 의미
-> who | wc -l : 현재 연결된 유저 수 확인
-> hostname -I : 현재 호스트의 IP 확인
-> ip link show | awk '$1 == "link/ether" {print $2}' | sed '2, $d' | tr -d '\n'
Ip link -> 연결된 link들을 표시 / 첫번째 필드를 link/ether로 변경하고 바뀐 필드의 2번째 내용을 출력 / sed를 통해 맨 마지막이 d로 끝나는 것을 잘라내서 출력
-> journalctl _COMM=sudo | grep “COMMAND=”| wc -l | tr -d '\n' : journalctl은 systemd의 로그를 확인하는것으로 systemd는 모든프로세스들을 관리하는 init시스템 / _COMM= : 특정로그를 보기위한 플래그로 sudo플래그만 찝어서 보는것
-> 특정 파일을 주기적으로 실행 시킬 수 있는 프로그램으로 백그라운드에서 실행됨, 따라서 동작하는지 눈으로 확인하기 어려움
-> -e 플래그로 파일을 편집
'# 분 시 일 월 요 [ 실행할 작업 ]'
-> 이 방식으로 작성할 경우, 사용하지 않을 내용들은 로 빈칸이라는 것을 명시
-> 요일의 경우 0~6(일~토)로 되어있음
-> 주기를 입력할 경우 /를 통해서 설정
-> 따라서 매 10분마다 출력을 해야할 경우, /10 * * * 실행할 파일 을 입력하면 됨