[42 Seoul] Born2beRoot

한종민·2023년 5월 19일
0

42SEOUL

목록 보기
5/6

born2beroot


본투비 화이팅!

VM(virtual machine)

  • 물리적 하드웨어 시스템에 CPU, 메모리, 네트워크 인터페이스 및 스토리지를 갖추고 가상으로 컴퓨터 시스템을 동하는 가상환경 리소스 가상화 프로그램

    • 에뮬레이션
      • 모든 부품의 모든 기능을 소프트웨어적으로 구현. 범용성 제일 좋음
    • 가상화
      • cpu같은 주요 부품의 기능에서 하드웨어의 기능을 지원받음. 하드웨어에 종속되서 범용성이 떨어짐.
    • 반가상화
      • 기반이 되는 하드웨어, 소프트웨어와 동일하지는 않지만 비슷한 가상머신에 UI를 제공
  • 하나의 물리 서버를 보다 효율적으로 사용하기 위해 vm을 사용.

  • 호스트-게스트로 구성되어있다.

    • 호스트(호스트 머신, 호스트 컴퓨터, 호스트 운영체제)
      • 하이퍼바이저가 탑재된 물리적 머신임
    • 게스트(게스트 머신, 게스트 컴퓨터, 게스트 운영체제)
      • 하이퍼바이저로 인해 리소스를 사용하는 머신임
  • 하이퍼 바이저가 무엇일까

    • 호스트 컴퓨터에서 다수의 운영체제를 동시에 운영하기 위한 논리적 플랫폼
    • 호스트 시스템에서 다수의 게스트를 구동할 수 있게 해주는 소프트웨어
    • 하이퍼 바이저의 유형
      • 네이티브 or 하이퍼 바이저형 (Xen, 마이크로소프트 HYPER-V, KVM)
        • 하이퍼바이저가 하드웨어를 직접 제어해서 효율적임
        • 여러 하드웨어 드라이버를 세팅해야해서 설치가 어렵다
      • 호스트형(VMware server, VMware Workstation, Virtual box)
        • 일반적인 소프트웨어처럼 호스트OS위에서 실행됨.
        • VM내부의 게스트 OS에 하드에어자원을 에뮬레이트하는 방식
        • 게스트OS에 대한 제약이 없다.

Debian과 Rocky

Debian

  • 온라인 커뮤니티에서 제작하여 배포됨.
  • 초반에는 레드햇 계열에 비해 사후지원과 유틸성능이 뒤쳐졌으나 현재는 뒤쳐지지않으며 넓은 유저층을 가짐
  • 데비안의 특징은 패키지 설치 및 업그레이드의 단순함에 있다. 일단 인스톨을 한 후 패키지 매니저인 APT 업데이트 방식을 이용하면 소프트웨어의 설치나 업데이트에서 다른 패키지와의 의존성 확인, 보안관련 업데이트 등을 자동으로 설정 및 설치해준다.

Rocky

  • CentOS의 후속작
  • 기업에서 유료로 만들어 초창기에 안정성이 좋아 기업에서 많이 사용하였다.

aptitude와 apt의 차이점

apt와 aptitude는 모두 Debian 패키지 관리를 위한 명령행 도구입니다.

apt는 Advanced Package Tool의 약자로, 간단하고 직관적인 인터페이스를 제공합니다. 패키지를 검색, 설치, 업그레이드, 삭제하는 데 사용됩니다. 또한 의존성 문제를 자동으로 처리하므로 사용자가 수동으로 처리해야 하는 작업이 줄어듭니다.

반면에 aptitude는 apt와 같은 목적을 가지고 있지만, 보다 강력한 패키지 관리 기능을 제공합니다. aptitude는 apt와 달리 패키지 의존성을 더 정확하게 추적하고 해결할 수 있습니다. 또한 다양한 검색, 필터링, 정렬 기능을 제공하여 원하는 패키지를 더 쉽게 찾을 수 있습니다. 또한 aptitude는 사용자가 선택한 패키지와 관련된 패키지를 자동으로 설치 및 삭제할 수 있습니다. 그리고 패키지 간의 의존성 그래프를 시작적으로 보여주는 등 패키지 관리를 보다 세밀하게 제어할 수 있는 기능을 제공.

또한 삭제에서도 의존성 문제를 해결하는 데에 차이가 존재하는데, apt의 경우 의존성 패키지를 삭제하고 싶은 경우 따로 옵션을 제공하여야 처리를 하는 반면, aptitude는 자동으로 삭제를 해주는 기능이 존재한다.

따라서, apt는 간단하고 직관적이며 쉽게 사용할 수 있으며 대부분의 패키지 관리 작업을 수행할 수 있습니다. aptitude는 더 많은 기능과 강력한 의존성 처리를 제공하지만, 더 복잡하고 사용하기 어렵습니다.

APPARMOR

리눅스 시스템에서 적용되는 보안 모듈 중 하나로, 애플리케이션을 보호하는 보안 프레임워크이다.

리눅스 컨널에 내장되어 있으며, 다양한 배포판에서 기본

할 수 있습니다. 또한 AppArmor은 사용자가 애플리케이션에 대한 보안 규칙을 직접 작성할 수 있도록 도와줍니다. 이러한 규칙은 애플리케이션 실행 파일의 경로, 파일 시스템, 네트워크 액세스 등을 제한할 수 있습니다.

sudo aa-enabled

LVM(logical volume Manage)

하드 디스크는 일반적으로 여러 개의 파티션으로 나뉘어져 있습니다. 각 파티션은 하나의 독립된 공간으로 인식되며, 운영체제에서는 각각의 파티션에 대해 별도로 파일 시스템을 생성하고 관리합니다.

하지만 LVM을 사용하면 하드 디스크를 논리적으로 분할할 수 있습니다. 이렇게 분할된 논리 볼륨은 여러 개의 하드 디스크나 파티션에 걸쳐서 구성될 수 있으며, 운영체제에서는 이를 하나의 큰 디스크로 인식합니다.

LVM을 사용하면 하드 디스크의 사용량을 효율적으로 관리할 수 있습니다. 예를 들어, 여러 개의 작은 파티션을 하나의 큰 논리 볼륨으로 합치면, 디스크 공간을 보다 효율적으로 사용할 수 있습니다. 또한, LVM을 사용하면 디스크의 용량을 동적으로 조절할 수도 있습니다.

  • 논리 볼륨 관리자
  • 물리적인 디스크를 논리적인 디스크로 할당하여 유연하게 관리할 수 있게해줌
    • 운영체제 설치시 파티션을 지정해줘야하는데, 기존의 파티션 크기변경은 재설치만으로 해결하였다.
    • LVM은 재설치없이 크기를 조정한다.
    • 여러개의 디스크 공간을 합쳐서 하나처럼 사용할 수 있음
  • 용어
    • 물리볼륨(PV)
      • 물리볼륨은 각각의 파티션을 LVM으로 사용하기 위해 형식을 변환시킨 것이다.
    • 논리볼륨(LV)
      • 사용자가 다루게 되는 부분이며 마운터 포인터로 사용할 실질적인 파티션이다.
    • 볼륨그룹(VG)
      • pv로 되어있는 파티션을 그룹으로 설정한다. 하나의 그룹으로 만들 수도 있고, 파티션 두 개를 하나의 그룹으로 만들 수 있다.
    • 물리적 범위(PE)
      • LVM이 물리적 저장공간을 가리키는 단위이다. 기본단위는 4MB
    • 논리적 범위(LE)
      • LE는 LVM이 논리적 저장공간을 가리키는 단위이다. 기본 단위는 물리적 범위와 동일합니다.
    • VGDA(Volume Group Descriptor Area)
      • 볼륨 그룹의 모든 정보가 기록되는 부분. VG의 이름, 상태, 속해있는 PV, LV, PE, LE들의 할당 상태 등을 저장한다. VGDA는 각 물리볼륨의 처음부분에 저장된다.

SSH(Secure Shell)

  • 원격 호스트에 접속하기 위해 사용되는 보안 프로토콜
  • 기존에 사용하던 텔넷이 암호화를 제공하지 않아서 보안상에 취약했어서 나오게됨.
  • 작동원리
    • 클라이언트와 호스트가 각각 키를 보유하고 이를 활용하여 주고 받는 데이터를 암호화함. 중간에 누가 가로채도 암호화가 되어있기 때문에 무슨 정보인지 알 수 없음.
  • 방식
    • ssh-keygen 명령어를 사용해 한쌍의 key를 생성할 수 있다.

UFW(Uncomplcated FireWall)

  • 방화벽
    • 보안확보를 위해 내부 네트워크와 외부통신을 제어하고, 내부 네트워크의 안전을 유지하기 위해 사용하는 기술
    • 데비안 및 리눅스에서 작동되고 파이썬으로 개발됨.
    • 해당 과제의 요구사항중 UFW가 작종해야하며, 4242번 포트만 열려있어야함. sudo ufw enable #활성화 sudo cat /etc/ufw/user.rules #rules 조회 sudo ufw allow 8080/tcp # 특정 TCP 포트 허용 sudo ufw deny 8080/tcp # 특정 TCP 포트 차단

TTY

  • 콘솔, 터미널, TTY는 깊은 연관을 가지고 있으며, 상호작용을 위한 장비를 뜻함.
  • 유닉스 시스템의 기본적인 이용방법은 유닉스가 인스톨된 호스트에 네트워크를 통해서 다른 컴퓨터가 접근하여 작업을 수행하는 것임 이때 사용자로 부터 명령을 받아 전달하는 역할을 콘솔이 담당.

데몬

컴퓨터 백그라운드에서 실행되는 프로그램입니다. 시스템관리 작업을 수행하거나, 서비스를 제공하거나, 백억을 수행하거나, 자동 업데이트를 제공하거나, 등등 다양한 기능을 수행할 수 있다.

cron이란? → 특정작업을 특정시간에 자동으로 실행시키기 위한 시간기반형 데몬이다. 또한 cron은 crontab이라는 설정파일을 기반으로 작동한다.

  • 멈추기 - sudo /etc/init.d/cron stop
  • 시작 - sudo /etc/init.d/cron start
  • 리부트시 cron 자동실행 중단 - sudo systemctl disable cron
  • command
    | | | | | // 요일
    | | | |
    // 월
    | | | // 날짜
    | |
    // 시간
    |_ // 분

SDA

sda란 데비안 리눅스 시스템에서 디스크 드라이브를 식별하는방법 중 하나.

LIGHTTPD

오픈소스 경량 웹서버

웹 서버란 우리가 인터넷에서 사용하는 웹 페이지가 들어있는 파일을 사용사에게 제공하는 서버 프로그램이다.

빠른 처리 속도와 가벼운 용량이 장점이다.

PHP

서버측에서 실행되는 프로그램 언어로 스크립트 형식으로 작성되어 있다. 웹 개발에 특화된 언어이다.

PHP를 사용하는 이유는 페이지가 요청될 때마다 다른 데이터를 가지고 그 작업을 수행할 수 있다.

PHP-FPM : PHP FastCGI Process Manager

CGI : 웹서버와 외부 프로그램을 연결해주는 표준화된 프로토콜

FastCGI : 하나의 요청에 하나의 프로세스를 생성하는 CGI와는 달리 하나의 프로세스로 요청들을 처리하여 프로세스를 생성하고 제거하는 부하를 경감.


데비안 설치 후 해야 할 일

이 내용은 단순 데비안을 어떻게 조작하여야 하는지만 설명하는 글입니다. 명령어나 동작원리에 대해서는 설명이 없으니 참고하시길 바랍니당.

데비안 설치

https://www.debian.org/releases/stable/debian-installer/
좌측 최상단 amd64 클릭 후 설치

데비안을 처음 설치해보신다면 아래 링크를 참고하여 설정해보기
https://techdebt.tistory.com/18

Sudo 설치

  • apt-get update로 패키지 목록 업데이트 해주기
  • apt-get install sudo로 sudo 설치
    visudo로 sudoers로 접근
  • sudo를 사용하기 위한 인증에서, 잘못된 비밀번호의 입력의 경우 3번의 시도로 제한
  • 잘못된 패스워드로 인한 에러가 발생했을 때에 설정한 메시지가 출력되어야 한다. Defaults authfail_message="권한 획득 실패 메세지" Defaults badpass_message="비밀번호 틀릴때 메세지" Defaults iolog_dir="/var/log/sudo/" Defaults log_input Defaults log_output Defaults requiretty Defaults passwd_tries=3
  • sudo를 통한 모든 동작은 저장되어야 한다. log 파일들은 /var/log/sudo 폴더에 저장되어야한다.
  • 만약 /var/log/sudo 가 없다면 mkdir 해주기
    루트로 로그인 한 다음 /var/log/sudo/00/00/01/log 열어서 위에서 입력한 명령어가 잘 들어갔는지 확인
  • 보안적인 이유로 인해, TTY 모드는 적용되어 있어야 한다.
  • sudo를 사용할 수 있는 경로는 제한되어있어야 한다.
    /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin
    /A:/B ⇒ A에 없으면 B에서 찾자
  • usermod -aG sudo jonhan 입력해서 sudo그룹에 넣고 로그인 한 다음 sudo 명령어 아무거나 실행

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 으로 가상머신의 ip를 확인
  • 가상머신 종료 후 setting → network 에서 포트포워딩 해주기
  • HOST IP에 ifconfig의 en0에서 확인한 IP 넣기
  • GUEST IP에 10.0.2.15 넣기 (hostname -I)
  • 재부팅 하고 터미널에서 ssh <ID>@<IP> -p 4242

패스워드 정책 설정

  • vim /etc/login.defs
  • 패스워드 최대 유효기간 30일 PASS_MAX_DAYS 30
  • 패스워드 최소 유효기간 2일 PASS_MIN_DAYS 2
  • 패스워드 만료 7일 전 메시지 PASS_WARN_AGE 7
  • apt-get -y install libpam-pwquality
  • vim /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 <사용자명> // 사용자 pw expiry

새로운 그룹 추가 : groupadd <새그룹 이름>

새 유저 추가 : adduser <새 유저 이름>

💡 adduser와 useradd의 차이점 공부해보기

그룹에 유저 추가 : usermod -aG <그룹> <이름>

monitoring.sh 설정

  • apt-get -y install sysstat
  • vi /root/monitoring.sh
printf "#Architecture: "
uname -a

printf "#CPU physical : "
cat /proc/cpuinfo | grep "physical id" | sort -u | wc -l

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/mapper | awk ‘{sum1+=$3; sum2+=$4}END{printf “%d”, sum1 / (sum1 + sum2) * 100}| tr -d ‘\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 |grep COMMAND | wc -l | tr -d '\n'
printf " cmd\n"

TCP소켓만을 대상으로 하는 이유 :

TCP 소켓은 연결 기반 프로토콜이기 때문에 클라이언트와 서버 간의 신뢰성 있는 연결을 제공합니다. 따라서 현재 활성화된 TCP 연결을 확인하면 현재 시스템에서 활발하게 사용되는 네트워크 서비스를 파악하는 데 도움이 됩니다.

반면 UDP 소켓은 연결을 생성하지 않고 데이터그램(datagram) 방식으로 데이터를 전송하는 비연결성 프로토콜입니다. UDP는 신뢰성 있는 전송을 보장하지 않으므로, 데이터가 손실될 가능성이 있습니다. 따라서 UDP 연결 정보를 확인하면 현재 네트워크 환경에서 발생할 수 있는 장애 상황에 대한 정보를 파악하는 데 도움이 됩니다.

따라서, 활성화된 TCP 연결을 확인하는 것이 네트워크 상태를 파악하는 데 더 유용하며, 이를 위해서 ss 명령어에서 -t 옵션을 사용하여 TCP 소켓만 대상으로 출력하도록 설정합니다.

  • chmod +x monitoring.sh
  • crontab -e
  • 맨 마지막 줄 /10 * * * /root/monitoring.sh | wall

Bonus Part

LVM 파티션 조절

처는 유튜브를 참고해서 파티션 설정을 했습니당.

lighttpd 설치

  • sudo apt-get install lighttpd
  • sudo systemctl stop lighttpd.service
  • sudo systemctl start lighttpd.service
  • sudo systemctl enable lighttpd.service

PHP 설치 및 연동

  • sudo apt-get install php7.4-fpm
  • sudo apt-get install php7.4-mysql
  • 설치 후, php.ini파일의 cgi.fix_pathinfo=1 행 주석을 해제
  • → vim /etc/php/7.4/fpm/php.ini
  • vim /etc/lighttpd/conf-available/15-fastcgi-php.conf
  • “bin-path” ⇒ ~주석처리
  • “socket” ⇒ ~ 주석처리
  • 바로 아래줄에 "socket" => "/var/run/php/php7.4-fpm.sock" 추가
  • sudo lighttpd-enable-mod fastcgi
  • sudo lighttpd-enable-mod fastcgi-php
  • service lighttpd force-reload
  • vim /etc/lighttpd/lighttpd.conf 에서 80번 포트가 설정되어있음을 확인
  • ufw allow 80으로 방화벽 해제
  • 호스트의 8080과 게스트의 80포트를 연결, 포트포워딩
  • 연결 확인
    호스트 ip : 8080 접속해서 placeholder page가 뜨는 지 확인
    위의 웹페이지는 /var/www/html의 index.lighttpd.html 파일이다.
    해당 디렉토리에서 info.php를 작성하여 호스트 ip : 8080/info.php에 접속해본다.
    
    ```c
    <?php
    	phpinfo();
        ?>
    ```

Maria DB

  • sudo apt-get install mariadb-server mariadb-client
  • sudo systemctl stop mysql.service
  • sudo systemctl start mysql.service
  • sudo systemctl enable mysql.service
  • sudo mysql_secure_installation
  • sudo systemctl restart mysql.service

wordpress에 연동할 DB 생성

  • sudo mysql -u root -p
  • CREATE DATABASE wpdb;
  • CREATE USER ‘wpdb-user’@’localhost’ IDENTIFIED BY ‘wp-pw’;
  • GRANT ALL ON wpdb.* TO ‘wpdb-user’@’localhost’ IDENTIFIED BY ‘wp-pw’ WITH GRANT OPTION;
  • FLUSH PRIIVILEGES;

WordPress

profile
내가? 이것도?

0개의 댓글