42 May- 3.Born2beroot (평가)

수현·2023년 4월 26일
0

42Seoul

목록 보기
4/8

📕 virtual machine 동작 원리

1) 개념

  • 1개의 물리적인 컴퓨터에서 여러 개의 운영체제를 구동하는 환경을 제공
  • virtual machine은 hypervisor 위에서 동작
    • hypervisor : 하드웨어에서 리소스를 사용하여 VM을 생성 및 관리
  • VM의 관점 : 단일 컴퓨터 환경과 같은 경험을 제공, 접근하는 하드웨어 디바이스가 가상이라는 것을 알지 못하고, 표준 디바이스 다루는 것처럼 인식

2) 장점

  • 비용 절감 (여러 가상 환경을 하나의 하드웨어에서 설치하여 물리적 인프라 설치 공간 줄임)
  • downtime 최소화 (VM은 호스트가 예기치 않게 중단될 경우 다른 물리적 서버의 Hypervisor로 이전 가능)

3) Hypervisor

  • 가상머신을 생성하고 구동하는 소프트웨어 (Virtual Machine Monitor)

  • 호스트 : hypervisor가 설치되는 물리 하드웨어
    게스트 : 리소스를 사용하는 여러 VM

  • Bare-metal Hypervisor

하드웨어 바로 위에 Hypervisor 설치 (KVM)
VM 리소스는 하이퍼바이저가 하드웨어에 직접 예약함

  • Hosted Hypervisor

하드웨어 위에 Host OS 위에 Hypervisor 설치 (Virtual Box)
VM 리소스는 호스트 운영 체제에 따라 예약된 후 하드웨어에 대해 실행됨

4) 가상화

  • hypervisor는 노트북 등 운영 체제에 배포하거나 서버 등 하드웨어에 직접 설치

  • hypervisor가 물리 리소스를 분할하여 가상 환경에서 사용 가능하게 함

  • 데이터 가상화

여러 곳에 분산되어 있는 데이터를 단일 소스로 통합함

  • 데스크탑 가상화

중앙 관리자 또는 자동화된 관리 툴을 통해 여러 물리 머신에 동시 배포되도록 지원 (관리자가 모든 가상 데스크탑에서 구성, 업데이트, 보안 점검을 대규모로 수행)

  • 운영체제 가상화

운영 체제의 중앙 태스크 관리자인 커널에서 이루어짐 (Linux와 Windows 환경을 함께 실행 가능)

  • 서버 가상화

서버는 특정 태스크를 효과적으로 처리하는데 가상화하면 특정 기능을 많이 수행할 수 있고 서버 파티셔닝을 통해 구성 요소로 여러 기능 지원 가능

  • 네트워크 기능 가상화

디렉터리 서비스, 파일 공유, IP 설정과 같은 네트워크 기능을 분리하여 환경에 배포함

📕 Rocky & Debian

리눅스 커널 + 자유소프트웨어로 구성된 리눅스 배포판 (패키지 관리 툴 및 포맷 차이)

1) Redhat

  • 배포판 종류
    • Rocky :레드햇에서 만든 RHEL의 오픈소스를 이용하여 RHEL과 1:1 대응되는 배포판OS (무상OS)
    • RHEL : 제품 구매 및 서브스크립션 구매가 필요함 (정식 유상 제품)
    • CentOS : RHEL에 적용 및 패치되기 전의 커널 및 새로운 기능 탑재된 상태 (RHEL Test)
  • enterprise용 서버에서 사용
  • 패키지 포맷으로 .rpm 확장자 사용 및 YUM를 패키지 관리툴로 사용
  • 설치과정에서 GUI를 제공하여 설치가 쉬움
  • 사용자가 rpm 파일을 일일히 조사하여 의존성 있는 패키지를 알아보고 설치해줘야함

2) Debian

  • 배포판 종류
    • Debian :데비안 프로젝트에서 제작한 오픈소스
    • Ubuntu : Debian기반 OS
  • 개인 사용자들이 많이 사용
  • 패키지 포맷으로 .deb 확장자 사용 및 dpkg/APT를 패키지 관리툴로 사용
  • 패키지 설치 및 업데이트등 패키기 관리가 용이함
  • 패키지 업데이트 속도가 느림

📒 운영체제

1) 임베디드

자체 제작한 운영체제(펌웨어) 많이 사용했지만, 최근 임베디드 장비에서는 리눅스 계열 커널 사용

2) 서버

유닉스 계열

3) 모바일

리눅스 계열 안드로이드

  • 리눅스 : 데비안/레드햇/안드로이드 계열로 분류

4) 데스크탑

윈도우즈

📒 Linux 사용 이유

  • 높은 보안성 (바이러스, 멀웨어 피하는 방법)
  • 안정된 구조 (가용성 높고, 충돌 잘 발생하지 않음)
  • 유지보수의 용이성 (업데이트 후 재부팅 필요 없음)
  • 하드웨어 이식성이 높음
  • 무료
  • 오픈소스 (보안성 높음)

📕 SELinux와 AppArmor

1) SELinux (Security-Enhanced Linux)

  • 접근 제어 보안 정책을 제공하는 리눅스 커널 보안 모듈
  • 시스템 전체에 보안 설정
  • 필수 액세스 제어(MAC) 보안 제공
  • 레드햇 계열 (RHEL, Fedora, CentOS)
    ➡ 파일에 라벨을 적용하는 것에 기반 (경로 대신 아이노드 번호로 파일 시스템 객체를 구별)

2) AppArmor (Application Armor)

  • root보다 상위 권한으로 행동 제어하는 리눅스 커널의 보안 모듈

  • 응용 프로그램단위로 보안 설정 (profile 파일을 통해 권한을 통제하여 개별 프로그램 보호)

    • 네트워크 액세스 권한
    • raw 소켓 액세스 권한
    • 파일의 읽기, 쓰기, 실행 권한
  • 필수 액세스 제어(MAC) 보안 제공

  • SUSE 계열, 데비안 계열

  • 로그 메시지 확인 : 유해한 작업 수행하려는 어플리케이션 거부할 때마다 로그 찍음 (syslog, auditd, kerner log, journald logs)

    ➡ dpkg -l apparmor : apparmor 설치 여부 확인

    ➡ aa-status : 리눅스 배포판에 AppArmor 정책 정보 확인

    ➡ aa-enable : AppArmor 활성화 여부 확인

3) 차이점

  • SELinux : 각 파일에 대한 문자열로 작업
  • AppArmor : 파일 시스템의 파일 경로로 작업 (읽기, 쓰기, 잠금 및 기타 팡리 작업 설정이 쉬움)

(ex. 하드링크 생성시 아이노드에 참조되는 데이터가 같기 때문에, SELinux는 새로 생성된 하드링크에 대한 접근을 거부하지만 AppArmor는 접근 가능)

📒 보안 모델

1) DAC (임의 접근 제어, Discretionary Access Control)

  • 시스템 객체에 대한 접근을 사용자나 그룹의 신분을 기준으로 제한
  • 사용자나 그룹이 객체의 소유자면 다른 주체에 대해 이 객체에 대한 접근 권한 설정 가능
  • 장점 : 구현 용이 및 사용 간편
  • 단점 : root계정이 모든 권한 가지고 있어 권한 탈취시 시스템 취약함

2) MAC (강제 접근 제어, Mandatory Access Control)

  • 미리 정해진 정책과 보안 등급에 따라 주체에게 허용된 접근 권한과 객체에게 부여된 허용 등급을 비교하여 접근 통제
  • 높은 보안을 요구하는 정보는 낮은 보안 수준의 주체가 접근할 수 없고, 소유자여도 정책에 어긋나면 객체에 접근할 수 없는 강력한 보안 제공
  • 장점 : 루트로 구동한 http서버라도 접근 가능한 파일과 포트가 제한됨 (취약점 이용해서 권한 획득해도 사전에 허용된 포트만 접근 허용됨)
  • 단점 : 구현 및 설정이 복잡함

📕 apt & aptitude

  • Debian계열 (Ubuntuu, Mint 등) 패키지 관리하는 툴 (Advanced Packaging Tool)
  • 소프트웨어 설치 및 제거를 정상적으로 처리하는 무료 오픈소스 소프트웨어

1) apt

  • CLI만 제공
  • apt-get의 기능 간소화 (자주 사용하는 옵션만 추출)
    • 사용자가 보기 편한 UI를 제공하여 사용하기 편리함
  • 패키지 관리 작업시 사용
    • 패키지 설치/삭제 중 충돌될 경우 : 종료
    • 사용되지 않는 패키지 : -auto-remove, apt-get autoremove 명시 필요
    • 소프트웨어 검색/다운로드/설치/업그레이드, 종속성 검사

2) aptitude

  • CLI 및 GUI 제공
  • apt-get의 command-line argument 제공 (apt-get 완전 대체 가능)
  • high-level package manager (apt-get, apt-mark, apt-cahce 기능 통합)
    • 패키지 설치/삭제 중 충돌될 경우 : 해결방법 제안 가능
    • 사용되지 않는 패키지 : 자동 제거
    • 설치된 패키지 목록/패키지를 자동/수동 설치, 업그레이드에 사용할 수 없는 패키지 보관

3) apt-get

  • CLI만 제공
  • apt보다 확장된 버전으로 의존성 관리가 되는 패키지 관리자 (저장소 URL - /etc/apt/sources.list)
  • 스크립트 작성시 사용
    • apt-get : 패키지 설치, 업데이트 및 제거
    • apt-cache : 패키지 검색
    • dpkg : 시스템에 설치된 패키지 검색

4) dpkg (Debian Package)

  • Debian 패키지 관리 시스템의 기초 소프트웨어
  • apt 보다 낮은 수준에서 작업 수행
    • apt는 우분투 소프트웨어를 관리하기 위해 내부적으로 dpkg를 이용함
    • 시스템에 있는 특정 파일이 어떤 패키지에 포함되는지 등 확인 작업을 수행하기 위해 필요함
  • deb 패키지 설치/삭제시 사용
    • .deb 파일 (데비안의 패키지 포맷 확장자)
    • 외부 네트워크 접속이 안되는 환경에서 직접 다운받은 패키지 설치시 사용

📒 패키지

  • 시스템에서 소프트웨어를 실행하는데 필요한 코드(실행 파일, 설정 파일, 라이브러리 등)가 담긴 설치 파일들
  • 코드 배포를 위해 사용 (라이브러리 : 코드 작성을 위해 사용)

📕 LVM (Logical Volume Manager)

1) 개념

  • 파티션을 볼륨(논리적인 개념)으로 나눠서 유동적으로 디스크 용량을 관리함
  • 하드 디스크를 여러 파티션으로 분할해서 파일 시스템을 이용해 특정 디렉터리와 연결시켜 사용함
  • 리눅스에서 디스크를 사용하는 기본적인 방법 : 디스크를 파티션으로 나누어 각각의 디렉터리에 파일 시스템으로 마운트한 뒤 지정된 위치에 데이터를 저장해서 사용함
    (디스크 ➡ 파티션 ➡ 볼륨그룹 ➡ 파일시스템(/home))

디스크 명령어

➡ fdisk -l : 가상 서버에 Attach한 볼륨 확인

📒 LVM sda5부터 설정되는 이유

  • 기존의 파티션, 볼륨 관리에서는 총 4개의 파티션을 만들 수 있었음
  • LVM을 도입하면서 4개보다 많은 파티션을 생성할 수 있고, 카운팅 할 때 5부터 시작됨

2) Disk Partitioning과 차이

  • 하드 디스크를 파티셔닝 한 후 OS 영역에 마운트하여 read/write 수행
  • 저장 공간의 크기가 고정되어 증설/축소가 어렵고, 변경시 데이터 이전해야 함

3) Disk 확인

➡ lsblk (lisk block device): 블록 장치에서 디스크 정보 확인

➡ lsblk -o NAME,FSTYPE,SIZE,MOUNTPOINT (FSTYPE : 파일 시스템)

➡ fdisk -l : 디스크 정보 확인

➡ fdisk -l /deb/sda : 파티션 정보 확인

📒 하드 디스크 관리

  • /dev/hd* : IDE 방식의 하드 디스크 (ex. /dev/hda, /dev/hdb)
  • /dev/sd* : SCSI, SATA 방식의 하드 디스크(SSD포함) (ex. /dev/sda, /dev/sdb)
  • /dev/nvme* : NVM Express(NVMe) pci SSD (ex. /dev/nvme0n1, /dev/nvme1n1)

📒 파티션

  • 디스크의 논리적인 크기 (분할/통합하여 사용)
  • 하나의 디스크를 여러개로 분할 및 여러 개의 디스크를 하나의 파티션으로 통합
  • 파티션은 고정적이고 물리적인 개념이 강하고, 한 번 크기를 설정하면 변경하거나 추가하기 힘듦
  • OS는 각 파티션을 별도의 디스크처럼 인식함

📒 볼륨

  • 파일 시스템으로 포맷된 디스크 상의 저장 영역
  • 볼륨은 디스크의 단일 파티션에 상주하게 되며 파티션보다 논리적이고 유동적
  • 하나의 디스크를 여러개의 파티션으로 나눠서 사용하는데, 볼륨은 파티션마다 하나씩 존재하거나 여러 파티션에 하나만 존재할 수 있음

📒 마운트

  • LV를 실제로 사용할 수 있도록 파일 시스템과 디렉터리 영역을 연결

3) 특징

  • 크기 조절이 가능한 storage pool
  • 자유롭게 장치 이름 지정
  • disk striping, mirror volume 제공

4) 구성

PE (LE) ➡ PV (LV) ➡ VG

PV (Physical Volume)

  • 실제 디스크 장치를 분할한 파티션된 상태
  • 물리적 볼륨으로 디스크를 LVM에서 사용할 수 있게 변환하는 작업
  • 디스크의 파티션을 PV로 초기화시켜 일정한 크기의 PE로 구성
  • PV 명령어
    • pvcreate /dev/vdb(vdc): LVM에 사용될 파티션을 생성하기 위해 물리 디스크 초기화
    • pvdisplay : 생성한 PV 확인

PE (Physical Extent)

  • PV를 구성하는 일정한 크기의 블록 (보통 1PE의 크기 = 4MB)
  • VG가 새롭게 나누는 논리적인 LV의 LE와 1:1 대응

VG (Volume Group)

  • PV가 모여 만들어진 그룹
  • 물리적인 일정한 크기의 PE로 구성된 PV들이 모여 VG가 만들어짐
  • VG는 다시 LV로 할당할 수 있는 공간을 말함
  • VG 명령어
    • vgcreate vg1 /dev/vdb : VG 생성하기
    • vgremove vg1 : VG 삭제하기
    • vgextent vg1 /dev/vdc : VG 확장하기 (/dev/vdc 영역 추가)
    • vgdisplay : VG 확인

LV (Logical Volume)

  • VG에서 사용자가 필요한 만큼 할당되어 만들어지는 공간
  • VG에서 필요한 크길 할당받아 LV를 생성함
  • LV 명령어
    • lvcreate -n wglv_1 -L 15G vg1 : LV 만들기
    • lvdisplay : LV 확인
    • mkfs.ext4 /dev/vg1/wglv_1 : file system 만들기
    • mkdir -p /data/wglv_1 : LV를 마운트할 디렉터리 생성 (-p : 중간 디렉터리 자동 생성)
    • mount /dev/vg1/wglv_1 /data/wglv_1 : 재부팅 시에도 마운트 상태 유지 (fstab에 정보 등록)

LE (Logical Extent)

  • LV가 나누어진 일정한 크기의 블록으로 물리적 크기인 PE와 1:1 대응

📕 SSH (Secure SHell)

1) 개념

  • 네트워크 상 다른 컴퓨터에 접속하기 위해 사용되는 보안 인터넷 프로토콜
  • FTP나 Telnet은 민감한 정보(로그인 정보)를 주고 받기에는 정보를 직접 네트워크를 통해 넘겨 해당 정보를 열어볼 수 있어 보안에 취약함
  • SSH는 보안적으로 안전한 채널을 구성한 뒤 정보를 교환하기 때문에 보안에 유용함
  • 사용 예시
    • 데이터 전송 (소스 코드를 원격 저장소인 GitHub에 Push할 때)
    • 원격 제어 (AWS와 같은 클라우드 서비스에 접속하여 해당 머신에 명령을 내릴 때)

2) 작동원리

  • 클라이언트-서버 모델로 동작하며 대칭키/비대칭키 방식/해시 알고리즘을 사용하여 인증 및 암호화 수행
    • 대칭키 방식 : 클라이언트-서버 간 전체 연결 암호화에 사용
    • 비대칭키 방식 : 키 교환, 클라이언트 인증, 서버 인증에 사용
    • 해시 알고리즘 : 패킷의 무결성을 확인하기 위해 사용
  • (1) 클라이언트는 서버에 원격 접속하기 위해 SSH 접속 요청 (기본 TCP 22번)
  • (2) 서버는 자신의 공개키를 클라이언트에게 전송
    • 클라이언트는 홈 디렉터리의 .ssh 경로 내의 known_hosts 파일에 저장
  • (3) 클라이언트-서버는 여러 parameter를 주고 받으며 보안 채널 확립
    • 클라이언트 : SSH 원격 접속하려는 서버가 올바른 서버인지 공개키 방식으로 확인
    • 서버 : 클라이언트가 자신에게 접근 권한이 있는지 패스워드 인증으로 확인
    • 암호화 통신을 위한 세션키 생성 (대칭키, 디피-헬만 키 교환 알고리즘 사용)
  • (4) 클라이언트가 서버에 원격 접속함

3) 인증 방식

  • Password 인증 방식
    • ssh 클라이언트에서 서버로 원격 제어 요청시 ssh username@IPAddress 명령어로 SSH 연결 후 password 입력
    • ssh 클라이언트 프로그램인 putty 사용해서 서버에 원격 접속시 id/password 요구
  • 공개키 인증 방식

📒 useradd (사용자 계정 추가)

  • 사용자 ID를 생성하는 명령어
    (계정 : 시스템에 아이디와 패스워드를 생성하여 사용권을 부여하는 것)
  • 리눅스 설치시 root(관리자, 슈퍼 유저)가 시스템에 접속할 수 있는 사용자들을 생성하고 관리하는 권한을 가짐
  • root권한자가 root 이외의 사용자를 생성할 때 사용하는 명령어
  • 옵션

➡ useradd [option] 사용자계정이름 : 사용자 계정 추가
➡ passwd 사용자 계정 이름 : 사용자 비밀번호 설정 (초기 비밀번호 설정 없이는 사용자 접속 불가)

4) SSH 설정 명령어

➡ apt search openssh-server : 설치 확인

➡ ls -al /etc/ssh : key 확인하기 위해 sshd_config 확인

➡ vi /etc/ssh/sshd_config : 포트 관련 정보 수정 (포트 4242추가, root로그인 연결 금지)

➡ sudo systemctl status ssh : ssh 서버가 현재 작동되는지 확인

➡ ss -tunpl : 실행 포트 정보 확인

➡ systemctl restart ssh : 재시작

➡ ssh user@호스트 서버 IP : SSH 통해 접속 가능 (-p : 포트번호 지정)

➡ ssh-keygen -t rsa : key 생성 (macOS는 유닉스 계열 운영체제로 OpenSSH 기본으로 포함)

➡ ls ~/.ssh/id_* : SSH 키 쌍 생성되었는지 확인

➡ cat /home/soohykim/id_rsa.pub >> /home/soohykim/.ssh/authorized_keys : id_rsa.pub를 authorized_keys 파일에 등록 (.ssh폴더 없다면 생성, chmod 700)

📒 shell

  • 명령어와 프로그램 사용할 때 쓰는 인터페이스
  • 사용자로부터 명령을 받아 해석하고 실행하는 역할

📒 DHCP

  • DHCP는 내부 네트워크 IP대역을 동적으로 유무선 네트워크 기기에 할당
  • 자동으로 IP가 할당되어 사용자는 유연하게 무선 네트워크 사용 가능하지만, 연결이 재설정되면 다른 IP에 기기할당됨
  • iface eth0 net dhcp 주석처리 : 할당되는 IP를 고정으로 할당하기 위해

📒 Port Forwarding (포트포워딩)

  • 특정한 포트로 들어오는 데이터 패킷을 다른 포트로 바꿔서 다시 전송
  • 패킷이 방화벽이나 라우터 같은 네트워크 게이트를 지날 때 IP주소와 포트 번호 결합의 통신 요청을 다른 곳으로 넘겨주는 네트워크 주소 변환

📕 UFW (방화벽)

1) 개념

  • iptables 방화벽 규칙을 쉽게 관리하는 프로그램 (내부에서 iptables 이용하는 Fronted tool)
  • 외부에서 내부로 접속 시도시 서버간, 서버와 단말간 내부 시스템 보호 목적으로 허용/차단
  • 고유 서비스 이름을 사용해서 포트 관리 (HTTP(80), HTTP(80), HTTPS(443), FTP(21), SSH(22))
  • UFW 기본 Rule
    • 들어오는 패킷에 대해서는 전부 거부 (deny)
    • 나가는 패킷에 대해서는 전부 허가 (allow)

📒 iptables

  • kernel level의 tool
  • 포트 기반으로 차단/허용하는 방식의 방화벽

2) UFW 상태/정책 설정 명령어

➡ systemctl status ufw : UFW 서비스 활성화 확인 (기본 비활성화)

➡ systemctl is-enabled ufw : UFW 실행 상태 확인

➡ ufw status verbose : UFW 설정 상태 확인

➡ ufw enable : UFW 활성화(disable)

  • (disable 할 경우)

    ➡ defualt value 변경 (allow/deny)

    ➡ ufw show raw : ufw 방화벽 규칙 표시

3) hostname 수정

➡ hostname : hostname 확인 (42로 끝나야함)

➡ hostnamectl : hostname 현재 정보 확인
➡ hostnamectl set-hostname 바꿀이름 : hostname 수정
➡ reboot : 재시작

📕 PASSWORD

1) password 파일 구조

  • 사용자의 목록을 저장하고 있는 정보 파일 : /etc/passwd
  • passwd 파일을 수정하려면 root(관리자)로 변경해야함

    (1) username : 사용자명
    (2) password : 사용자의 비밀번호 (/etc/shadow 저장)
    (3) User ID (UID) : 사용자ID (0 : root, 1-99 : 이미 정의된 계정, 100-999 : 시스템 관리자나 시스템 계정을 위한 번호, 1000~ : 사용자지정)
    (4) Group ID (GID) : 사용자가 소속된 그룹ID
    (5) UID info : 사용자에 대한 추가적인 정보
    (6) Home directory : 사용자의 홈 디렉터리
    (7) Command/shell : 로그인시 사용되는 셀

2) password 정책

암호 정책으로 보안 강화되어 비밀번호 유추 어려움

  • 패스워드 매 30일마다 만료 (M)
  • 패스워드 변경 후에 수정 가능한 최소 경과일 수 2일 (m)
  • 유저는 패스워드 만료 7일 전에 경고 메시지 받음 (W)
  • 패스워드 대문자, 소문자, 숫자를 포함한 최소 10글자 이상
  • 패스워드 반복되는 글자 3글자 제한
  • 패스워드는 유저 이름 포함X
  • 현재 패스워드는 최소 7글자 이상 이전 패스워드 달라야 함 (root 패스워드는 적용)
  • 가상 머신에 있는 모든 비밀번호 바꾸기 (root 포함)

➡ chage -l 유저이름 : 유저에 대한 비밀번호 정책 확인

➡ vi /etc/login.defs : 기본 비밀번호 정책 관련 파일 확인

➡ vi /etc/pam.d/common-password : 패스워드 정책 설정 (libpam-pwquality)

  • retry=N : 암호입력을 N회로 설정
  • minlen=N : 암호의 최소 길이는 N
  • ucredit=-N : 대문자 N개 이상 (N양수 - 대문자로 얻을 수 있는 최대 개수, N음수 - 대문자 최소 개수)
  • lcredit=-N : 소문자 N개 이상
  • decredit=-N : 숫자 N개 이상
  • maxrepeat=N : 같은 문자가 N번 이상 연속해서 나오는지 검사
  • reject_username : 사용자 이름이 그대로 혹은 뒤집혀 패스워드에 있는지 검사
  • enforce_for_root : root 계정도 위의 정책들 적용
    (root에게 이전 패스워드를 묻지 않으므로 이전 패스워드와 새 패스워드 비교 검사 안함)
  • difok=N : 기존 패스워드와 달라야하는 문자 수 N (root 제외)

📕 SUDO

1) 개념

  • sudo : 관리자 권한으로 실행할 수 있게 하는 명령어 (superuser do)
    • sudo [명령어] : root권한으로 명령어 실행
  • su : 현재 계정을 로그아웃 하지 않고 다른 계정으로 전환하는 명령어 (switch user)
    • su : root 사용자로 변경 (root 암호 입력 필요)
    • su - : root 사용자로 변경하면서 환경 변수까지 적용
    • su [사용자명] : 다른 사용자로 변경
    • su -[사용자명] : 다른 사용자로 변경하면서 환경 변수까지 적용

➡ dpkg -l sudo : sudo 설치 확인

📒 visudo

  • /etc/sudoers 파일을 관리하기 위한 어플리케이션
    • sudoers 파일 : sudo 명령어 사용하는 계정 관리 (sudo 권한 부여된 사용자, 그룹, 권한 수준 명시)
  • 쓰기 권한 없는 파일 작성 가능
    • 해당 파일 기본 커미션 : 440 (쓰기 권한 없음)
  • 저장시에 설정의 정합성과 잘못된 문법 체크

2) SUDO 그룹 규정

  • sudo 사용 인증 중 - 잘못된 비밀번호 입력의 경우, 3번의 시도로 제한되어야 한다.
  • 잘못된 패스워드로 인한 에러일 때 설정한 메시지 출력
  • sudo를 통한 모든 동작 저장되어야 함.
    log파일들 /var/log/sudo 폴더에 저장
  • TTY 모드는 적용되어있어야 함.
  • sudo를 사용할 수 있는 경로 제한되어야 함.
    경로 예시 - /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin

  • USER/GROUP : sudo를 사용하는 사용자 또는 그룹
    • 그룹일 경우 %group
  • HOST(NETWORK) : 사용자가 현재 접속하는 호스트(네트워크)
  • RUNAS : 해당 명령어 실행시 얻는 사용자 권한
    • (ALL:ALL)의 경우 (사용자 권한:그룹 권한)
  • CMD : sudo 권한을 적용시킬 명령어

➡ visudo

📒 TTY (TeleTYpewriter)

1) TTY 개념

  • 표준 입력에 연결된 터미널의 이름을 출력하는 유닉스 계열 명령어 (리눅스 환경은 TTY 위에 그려져 있음)
  • 터미널이 연결되기 전에 sudo 명령어를 막아서 웹서버 플러그인 등 다른 분리된 프로세스에서 사용되는 것 방지함
  • 데스크탑 GUI(xwindows)환경은 실질적으로 콘솔 위에 올려져 있는 형태 (=xwindow 데스크탑 환경에서 작동하는 콘솔은 pts/1에 올려져 있음)

➡ tty : 현재 커널과 연결된 가상 터미널 장치 이름 확인
➡ w : 로그인한 유저의 모든 TTY 정보 확인

2) 콘솔 개념

  • 컴퓨터 조작시 사용하는 입출력 장치, 명령 조작에 사용되는 애플리케이션
  • CLI 혹은 CUI라고 불리며 컴퓨터를 운용하기 위한 목적으로 텍스트를 사용자와 컴퓨터가 주고 받는 인터페이스
  • 종류
    • 터미널 : UI로 사용하는 GUI 프로그램 (키보드와 디스플레이로 구성)
    • TTY : 컴퓨터에서 표준 입력에 연결된 터미널 이름 출력하는 명령어 (OS에서 제공하는 가상콘솔, 실제 물리적인 장치가 연결된 것은 아니라서 커널에서 터미널을 emulation)

3) 콘솔 구성

  • /dev(device)
    • TTY (일반 CLI 콘솔)
      • TTYs (시리얼 TTY)
      • PTS (기본 xwindows를 위한 가상 콘솔)
        • PTY (외부의 원격 접속을 위한 가상 콘솔)(=pseudo-terminal, 가상 터미널)
  • 콘솔모드 : 모니터, 키보드로 직접 본체에 연결된 모드
    • 2번째 콘솔부터가 가상 콘솔
    • Ctrl + Alt + F2를 누르면 2번째 가상콘솔로 이동
    • (사용 가능한 콘솔은 6번까지, 7번부터는 ttyN이 아닌 xwindows(pts/N)환경으로 돌아옴
  • 터미널모드는 본체의 LAN으로 연결된 모드를 말함 (원격 접속)

📕 사용자 설정

  • ~user : 대화형 방식으로 사용자 환경 지정
  • user~ : 옵션으로 사용자 환경 지정

➡ adduser 사용자명 : 새 유저 생성

➡ passwd 사용자명 : 비밀번호 설정
➡ vi /etc/passwd : user 목록 확인

➡ addgroup 그룹이름 : 그룹 생성
usermod -aG sudo,user42 사용자명 : sudo,user42 그룹에 추가하는 정보 수정

➡ id 사용자명 : 사용자 속한 UID, GID,그룹명 등 확인

➡ groups 사용자명 : 사용자 속한 그룹명 확인

📕 Script

1) cron 설치

  • cron 설치 여부 확인 : `ps -ef | grep cron'

  • cron 시작 : sudo systemctl start cron

  • sysstat 설치 : sudo apt-get install sysstat

2) monitoring.sh

  • #Architecture (운영체제와 커널의 버전에 대한 구조) uname -a (-a : 모든 정보)
  • #CPU physical (물리 프로세서들의 수) : cat /proc/cpuinfo | grep 'cpu cores' | awk '{print $4}
    • nproc : 현재 사용가능한 프로세스 unit의 개수
  • #vCPU (가상 프로세서들의 수) : lscpu | grep '^CPU(s)' | awk '{print $2}'
    • lscpu : 현재 시스템의 CPU 정보를 보여주는 명령어
  • #Memory Usage (현재 서버에서 사용 가능한 RAM과 백분율로 표현된 사용률) : free --mega | grep Mem | awk '{printf "%d/%dMB (%.2f%%)\n", $3, $2, $3/$2 * 100}'
    • $2 : memory total
    • $3 : memory used
  • #Disk Usage (현재 서버에서 사용 가능한 memory와 백분율로 표현된 사용률)
    • df -a -BM | grep /dev/mapper | awk '{sum+=$3}END{printf sum}
    • printf "/"
    • df -a -BM | grep /dev/mapper | awk '{sum+=$2}END{printf sum}
    • printf "MB ("
    • `df -a -BM | grep /dev/mapper | awk '{sum1+=$3 ; sum2+=$2}END{printf "%d%%)\n", sum1 / sum2 * 100}'
  • #CPU load (백분율로 표현된 프로세서들의 현재 사용률) : mpstat | grep all | awk '{printf "%.2f%%\n", 100-$13}
  • #Last boot (마지막으로 재시작된 날짜와 시간) : who -b | awk '{print $3, $4}
  • #LVM use (LVM 활성화 여부) : if [ "$(lsblk | grep lvm | wc -l) " -eq 0 ] ; then printf "no\n" ; else printf "yes\n" ; fi
  • #Connections TCP (활성화된 연결들의 개수)
    • ss -tunpl | grep tcp | wc -l | tr -d '\n'
    • `printf "ESTABLISHED\n"
  • #User log (서버를 사용하고 있는 유저의 수) : who | wc -l
  • #Network (서버의 IPv4 주소와 MAC 주소) IP
    • hostname -I | tr -d '\n'
    • `printf "("
    • `ip address | grep ether | awk '{printf $2}'
    • printf ")\n"
  • #Sudo (sudo 프로그램으로 실행된 명령의 수)
    - journalctl _COMM=sudo | grep COMMAND | wc -l | tr -d '\n'
    - printf "cmd\n"

📒 CPU physical

  • = CPU의 코어 개수
  • 코어 : 물리적인 CPU 프로세서 (프로그램 실행시 실제로 일하는 역할)
  • nproc --all 또는cat /proc/cpuinfo | grep 'cpu cores' | awk 'printf $4}' 확인 가능 (Number of installed Processors on your system)

📒 vCPU

  • = CPU의 쓰레드 개수
  • 가상CPU : 가상 머신에 할당되는 CPU (기본적으로 1개 할당)
  • (thread X core) X physical CPU = vCPU 개수
    • 코어당 제공하는 처리 스레드 수에 점유된 소켓 수 곱함
  • lscpu | grep '^CPU(s)' | awk '{print $2}'

📒 free

  • /proc/meminfo 에서 시스템 메모리 사용량 확인
  • 정보
    • total : 설치된 총 메모리 크기, 설정된 스왑 총 크기
    • used : total에서 free, buff/cache를 뺀 사용중인 메모리
    • free : total에서 used, buff/chace를 뺀 실제 사용 가능한 메모리 용량
    • shared : tmpfs(메모리 파일 시스템), ramfs 등 사용되는 공유 메모리
    • buffer/cache : 커널 버퍼로 사용중인 메모리 + 페이지 캐시와 slab으로 사용중인 메모리
    • available : swapping 없이 새로운 프로세스 할당 가능한 메모리 예상 크기
  • 옵션
    • h : 사람이 읽기 쉬운 단위로 출력
    • b, k, m, g : 바이트, 키비바이트, 메비바이트, 기비바이트
    • kilo, mega, giga, tera, peta : 킬로바이트, 메가바이트, 기가바이트, 테라바이트, 페타바이트

📒 Disk Usage

  • df : 남은 용량 확인
    • a : 모든 파일 시스템 출력
    • k : 킬로 바이트 단위로 남은 용량 확인
    • m : 메가 바이트 단위로 남은 용량 확인
  • du : 현재 directory의 사용량 확인 (서브 디렉토리 포함)
    • a : 현재 디렉토리의 사용량 파일 단위로 출력
    • s : 총 사용량
    • h : 읽기 쉽게 출력
    • sh* : 한단계 서브 디렉토리 기준으로 보여줌

📒 akw END 문법

  • 텍스트 파일을 조회/필터링/가공 출력하는 프로그램
    • 필드 추출 : $1
    • BEGIN, END 명령어

📒 mpstat

  • CPU와 core별로 사용율을 모니터링할 때 사용되는 명령어
  • 정보
    • 04:43:36 PM : mpstat이 수행된 시간
      -CPU : all (모든 cpu)
    • %usr : 사용자 레벨(애플리케이션)이 사용한 CPU 사용율
    • %nice : nice 우선순위와 함께 사용자 레벨에서 수행된 CPU 사용율
    • %sys : 시스템 레벨(커널)에서 사용한 CPU 사용율
    • %iowait : I/O 처리 때문에 기다리는 CPU 시간 백분율
    • %irq : H/W 인터럽트를 서비스하기 위해 사용되는 CPU 사용율
    • %soft : S/W 인터럽트를 서비스하기 위해 사용되는 CPU 사용율
    • %steal : 하이퍼바이저가 다른 가상프로세서에 의해 서비스될 때 기다리는 CPU 시간 백분율
    • %guest : 가상 프로세서가 실행하기 위해 사용되는 CPU 사용율
    • %idle : 유휴시간의 CPU 사용률 (CPU가 미사용 상태였던 시간 비율)

📒 Last Reboot

  • 리눅스 서버가 재부팅되거나 shutdown된 시간 조회
  • last reboot : 마지막으로 시스템을 재부팅한 시간이 언제인지 최신순으로 정렬해서 출력
  • who -b : 마지막 시스템 부팅 시간 표시

📒 journalctl

  • 리눅스 로그 확인
  • 옵션
    • _COMM="로그" : 특정 로그 보기

📒 cron

  • 반복적으로 어떤 작업을 자동 수행해주는 명령어
  • 시간 기반 job scheduler형 daemon 프로세스 (시스템 크론/사용자 크론)
    • crontab : cron 작업 설정 파일 (/etc/crontab 파일 정보)
    • daemon : 사용자가 직접 제어하지 않아도 백그라운드에서 여러 작업 해주는 프로그램
  • mhdommondow요일 user 사용자 command 실행명령

📒 wall

  • 시스템에 로그인한 모든 사용자에게 메시지를 broadcast 역할 (관리자 권한 필요)
  • 컴퓨터 파일과 표준입력을 로그인 된 모든 사용자에게 보여줌

📌 Hard Disk File Type

  • VDI (Virtualbox Disk Umage)
    • virtualbox에서만 사용하는 포맷
    • 다른 컴퓨터에서 해당 가상환경을 사용할 때 virtualbox 설치되어 있어야 함
  • VHD (Virtual Hard Disk)
    • Oracle-virtualbox, ms-hyper-x, citrix-xen에서 사용 가능한 포맷
    • 다른 컴퓨터에서 사용하려면 셋 중 하나의 가상화 소프트웨어가 설치되어 있어야 함
  • VMDK (Virtual Machine Disk)
    • Oracle-virtualbox, VMware, VMware player에서 사용 가능한 포맷
    • 다른 컴퓨터에서 사용하려면 둘 중 하나의 가상화 소프트웨어가 설치되어 있어야 함

📌 Linux File system

  • / : root, 모든 파일의 최상단
  • bin : binary, 명령어 들어있는 디렉토리
  • boot : 부팅에 필요한 이미지 파일/부팅 정보 가진 디렉토리
  • dev : 연결된 장치들의 정보 저장
  • etc : 시스템 환경설정
  • home : 사용자 디렉토리 저장
  • root : 시스템 관리자의 홈 디렉토리 (일반 사용자 접근 불가능)
  • sbin : bin과 비슷하나 root 유저만 사용할 수 있는 명령어 들어있음
  • sys : 리눅스 커널 관련 정보
  • tmp : 임시 데이터가 들어있는 디렉터리, 부팅시 초기화
  • usr : 기본 실행파일, 라이브러리, 헤더 파일 저장됨 (대부분 응용 프로그램 및 파일)
  • var : 시스템 운영 중에 만들어진 로그 저장
  • srv : 서버를 위한 디렉토리 (시스템에게 제공되는 파일 저장)
  • proc : 실행 중인 프로세서 (cpu, ram 등 시스템 정보 저장)
  • swap : ram이 가득 차 공간 부족시 예비 공간 역할

참고 / 참고
sanglee 참고
본투비루트 / 참고

profile
Notion으로 이동

0개의 댓글