[born2beroot] 가상환경 구축

Worldi·2022년 5월 15일
0

42seoul

목록 보기
13/15

과제 요구 사항

CUI 로 미니멈한 서버 세팅

평가

  • Debian 설치 (10.9.0 amd64)

    $ head n 2 /etc/os-release
    $ cat /etc/os-release

uthfail_message="메세지" : 권한 획득 실패시 띄울 커스텀 메세지

badpass_message="메세지" : 암호 실패시 띄울 메세지

log_input : sudo를 통해 입력된 input은 로그에 기록된다

log_output : sudo를 통해 입력된 output은 로그에 기록된다.

requiretty : tty에 연결되지 않은 채로 sudo를 실행하는 것을 금지?
https://m.blog.naver.com/snazzy79/70148845500
https://bloodguy.tistory.com/entry/Linux-ssh%EB%82%98-%EB%8B%A4%EB%A5%B8-%EB%8D%B0%EB%AA%AC%EC%97%90%EC%84%9C-sudo-u-%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%B4-%EB%8B%A4%EB%A5%B8-%EC%9C%A0%EC%A0%80%EA%B6%8C%ED%95%9C%EC%9C%BC%EB%A1%9C-%EC%8B%A4%ED%96%89%EC%8B%9C-sudo-sorry-you-must-have-a-tty-to-run-sudo-%EC%98%A4%EB%A5%98-%ED%95%B4%EA%B2%B0
ex. 쉘 스크립트 상에서 sudo 커맨드 수행 금지.

iolog_dir="경로" : 로그를 저장할 경로.

SSH 연결

조건

SSH 4242 port only. root 로 사용해서 연결하는 것은 금지
UFW 방화벽 사용하여 OS 구성.4242 포트만 열어놓기.
방화벽이 활성화되어야함.
보안상 필요로 인한 설정으로 tty가 있는 사용자만 sudo를 사용할 수 있음.

방법

맥에서
ipconfig getifaddr en0
ssh USERNAME@"HOSTIP" -p 4242

  • sudo apt install ufw

  • sudo ufw status verbose ufw 상태 확인 (디폴트는 inactive)

  • sudo ufw enable 부팅 시 ufw 활성화되게 설정

  • sudo ufw default deny 기본 incoming deny로 설정

  • dhcp 끄고 4242 포트만 열어놓기.

  • sudo ufw allow 4242 ssh연결 허용
    https://webdir.tistory.com/206

  • apt search openssh-server openssh가 깔려있는지 확인.

    • 깔려있지 않다면, apt install open ssh-server
  • systemctl status ssh 명령어를 통해 openssh 실행여부와 사용 포트 확인

  • sudo vim /etc/ssh/sshd_config 명령어를 통해 ssh설정을 변경

    • Port 22라 되어있는 줄에서 22 ⇒ 4242로 변경, 주석처리되어있다면 #을 삭제한다.

      💡 /etc/ssh에는 ssh_configsshd_config가 있다. 전자는 client측일 때 설정, 후자는 server측일 때 설정이다.

  • 아래 PermitRootLogin 부분을 no로 바꾼다.
    해당 옵션을 통해 외부에서 root로 로그인하는 것을 막을 수 있다.

  • sudo systemctl restart ssh로 재시작하여 설정 적용

ipconfig getifaddr en0 : 현재 로컬의 IP 주소

평가

  • UFW 서비스 실행 되는가?

    sudo ufw status

  • SSH 서비스 실행 되는가?

    systemctl status ssh

  • SSH 4242 포트에서만 사용되는지 확인

    ss -tnulp

  • 새로 만든 사용자로 ssh 접속 시도. key, password 사용

  • root 로 접속 안되는거 확인

    ssh root&"hostIP" -p 4242

  • UFW 활성화 된 리스트 보여주기. 4242 있는지 존재 여부

    sudo ufw status verbose

  • 8080 포트 추가하고 리스트 확인

    sudo ufw allow 8080

  • 새로 추가 된거 지우기

    sudo ufw delete 8080

hostname 및 password

조건

  • hostname : [이름]42
  • 강한 암호 규약 설정
    (비밀번호 만료 30일마다, 수정 전까지 허용되는 최소 일수 2일, 만료 7일전부터 경고 메세지. 최소 10글자 이상. 대문자와 숫자를 포함하고 연속해서 같은 문자 3문자를 포함하면 안됨. 유저의 이름이 포함되면 안됨. 이전 비밀번호와 최소 7글자가 달라야함. 루트 패스워드도 폴리시 적용하여야 함) -> 구성 파일 설정후, 가상 머신에 존재하는 모든 계정의 비밀번호 변경, 루트 계정 포함.

방법

  • 호스트네임

    • hostnamectl 명령어를 통해 hostname을 확인할 수 있다.
    • sudo hostnamectl set-hostname <변경할 hostname> 명령어를 통해 호스트명을 변경할 수 있다.
      $ nano /etc/hostname # 두 파일에서의 hostname이 일치해야 충돌이 없다.
  • 나의 계정의 비밀번호, 및 만료일 변경 : chage

    • Last password change (-d) : 마지막 패스워드 변경일
    • Password expires : 암호 만료일
    • Password inactive(-I (대문자i)) : 비활성화 유예기간
    • Account expires(-E) : 계정 만료일
    • Minimum number .... (-m) : 패스워드 변경 후 최소 사용 기간, 즉 최소 의무 사용일
    • Maximum number .... (-M) : 패스워드 변경 후 변경 없이 사용가능한 최대 일 수
    • Number of days of warning ... (-W) : 패스워드 만료 전 경고메세지를 보낼 일 수
  • -M 옵션과 -m옵션, -W옵션을 통해 서브젝트에서 요구하는 패스워드 만료 관련 정책들을 변경한다.

    sudo chage -M 30 -m 2 -W 7 "user"

  • 새로 들어올 User 비밀번호 및 만료일 변경
    - vi /etc/pam.d/common-password 를 통해 현재 패스워드 정책을 확인할 수 있다.
    - 패스워드 정책 설정을 위한 모듈을 설치하기 위해 아래의 명령어를 입력한다.
    sudo apt install libpam-cracklib
    - 패스워드정책 파일에 pamcracklib.so가 추가된 것을 볼 수 있다.
    - `libpam-cracklib` 모듈을 통해 사용자가 입력한 암호를 시스템의 사전과 여러 규칙들로 패스워드 강도를 검사한다.
    - `retry=N` : 암호입력을 N회로 설정
    - `minlen=N` : 암호의 최소 길이는 N
    - `difok=N` : 기존 패스워드와 달라야하는 문자 수 N
    - `ucredit=-N` : 대문자 N개 이상 (N이 양수/음수인지 따라 뜻이 다름, 서브젝트 기준에 맞추어 음수로)
    - `lcredit=-N` : 소문자 N개 이상 (위와 동일)
    - `decredit=-N` : 숫자 N개 이상 (위와 동일)
    - `reject_username` : 사용자의 이름이 그대로 혹은 뒤집혀 패스워드에 있는지 검사
    - `enforce_for_root` : root사용자가 패스워드를 바꾸려 할 때에도 위 조건 적용
    - `maxrepeat=N` : 같은 문자가 N번 이상 연속해서 나오는지 검사

평가

nano /etc/hosts

sudo 를 설치하고 구성

조건

  • 비밀번호 오류 3번 제한, 잘못된 암호로 인한 오류 발생할 경우 커스텀 메세지, 입출력 동작 기록. tty 모드 활성화, sudo에서 사용할 수 있는 경로 제한
  • root 외에 [이름] 이 유저네임인 유저 존재
  • 사용자가 user42 와 sudo 그룹에 속하여야함.

방법

  • su - 명령어를 통해 root 계정으로 이동.
  • sudo가 설치되어있는지 여부 확인.
    dpkg -l sudo
    - 설치되어 있지 않을 경우 아래의 명령어를 통해 설치
    apt install sudo
  • 아래 명령어를 통해 sudoer파일 접근
    visudo
  • secure_path에 /snap/bin를 추가한다.
secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
Defaults	authfail_message="원하는 에러메세지" #권한 획득 실패 시 출력 (sudo 인증 실패 시)
Defaults	badpass_message="원하는 에러메세지" #sudo인증에서 비밀번호 틀리면 출력
Defaults	log_input #sudo명령어 실행 시 입력된 명령어 log로 저장
Defaults	log_output #sudo명령어 실행 시 출력 결과를 log로 저장
Defaults	requiretty #sudo명령어 실행 시 tty강제
Defaults	iolog_dir="/var/log/sudo/" #sudo log 저장 디렉토리 설정
Defaults	passwd_tries=3 #sudo실행 횟수를 지정. default가 3
  • user42그룹 추가 groupadd user42
  • user42그룹에 유저를 추가 usermod -aG sudo,user42 <사용자이름>
    그룹이 여러 개인 경우, 그룹은 공백 없이 콤마로 구분.
  • usermod -g user42 <사용자이름> 명령어를 통해 user42 그룹이 primary group이 되도록 한다.
  • getent 명령을 사용하여 그룹의 구성원을 표시.
  • sudo deluser 사용자명 그룹명을 통해 그룹에서 사용자를 제거할 수 있다.
  • sudo userdel -r 사용자명 통해 사용자 제거 가능.

평가

  • 평가 중에 새 유저 생성해서 그룹에 할당하여야 함
  1. 유저 생성. 패스워드 맘대로. 패스워드 설정 확인
  2. 그룹 생성하고 1에서 생성한 유저 추가 및 확인
  3. 패스워드 폴리시 장단점 설명.

/etc/login.defs
/etc/pam.d/common-password
libpam-cracklib

  • hostname 변경 후 머신 restart -> hostname 원래로 변경

    hostnamectl
    sudo hostnamectl set-hostname "new"
    lsblk

  • sudo 설치 되어 있는지

    dkpg -l sudo

  • 새 유저 'sudo' 그룹에 할당

    usermod -aG sudo "new-User"

  • 히스토리 확인 ('/var/log/sudo' 에 파일 생성?)

  • sudo 실행 후 히스토리 갱신 확인

모니터링 쉘 스크립트 생성.

조건

  • 스크립트 bash 에서 개발 되어야 함.
  • 10분마다 정보를 표시하여야 함. cron 참고.
  • 스크립트 어떻게 실행되는지 설명해야 함.
  • 수정하지 않고 중단하여야 함.
  • 다음과 같은 정보를 띄워야함.
    ( OS 아키텍처와 커널 버전,물리적 프로세서의 수 ,가상 프로세서의 수,서버에서 사용가능한 RAM과 사용률(%로 표시) ,서버에서 사용가능한 메모리와 사용률(%로 표시), 프로세서의 사용률(%),마지막으로 재부팅된 날짜와 시각, LVM의 활성 여부,활성화 된 연결의 수 ,서버를 사용하는 유저의 수, 서버의 IPv4 주소와 MAC 주소, sudo 프로그램으로 실행된 커맨드의 수)

방법

sudo crontab -e
ps -ef | grep cron : 명령어를 통해 설치 여부 확인
cron : 유닉스 계열 컴퓨터 운영 체제의 시간 기반 잡 스케줄러
ps -ef | grep cron : 크론탭 설치여부 확인(피드백이 있다면 설치되어있는거임.)
service cron start : 크론탭 시작
service cron stop : 크론탭 중지
service cron restart : 크론탭 재시작
sudo crontab -e: edit
chmod +x monitoring.sh 실행 권한부여.

  • Cron (시간 기반 잡 스케줄러)
    유닉스 계열 OS의 시간 기반 잡 스케줄러이다. 고정된 시간, 날짜, 간격으로 주기적으로 실행하기 위해 cron이 사용된다.시간단위를 설정하는 방법은 다음과 같다. cron작업은 crontab 이라는 파일에서 설정한다. 이 파일로 가서 시간설정에 관한 부분은 다음과 같다.
            • command
              애스터마스크가 5개 있는데, 가장 왼쪽부터 분, 시간, 날짜(1~31), 월(1~12), 요일(0~6)이다. 필요한 항목에 -(그 사이의 모든 값) ,(지정 값) / (특정 주기로 나누기 등의 문자를 사용하여 주기를 정할 수 있다.

*/10 * * * * bash Mypath/monitoring.sh | wall
또, 30초 단위로도 설정해야하는데 sleep을 사용하면 된다.
*/1 * * * * bash Mypath/monitoring.sh | wall
이 명령이 매 1분마다 실행되니까
*/1 * * * * sleep 30; bash Mypath/monitoring.sh | wall
systemctl status cron.service status check
/etc/init.d/cron start 멈추기
sudo systemctl disable cron 재부팅 후에 멈추기

  • OS 아키텍처와 커널 버전
    uname 명령어를 통해 시스템의 정보를 출력
    uname -a
  • 물리적 프로세서의 수
    nproc --all // 물리적으로 설치된 프로세스 갯수
    : 리눅스에서 사용가능한 프로세스의 수 출력
    print the number of installed processors on your system i.e core count:

  • 가상 프로세서 개수
    물리적 프로세서는 코어 수, 가상 프로세서는 쓰레드 수를 의미하는듯, 우리 맥은 6코어 6쓰레드 (exact number of virtual cpu (vCPU))
    cat /proc/cpuinfo | grep processor | wc -l

  • 서버에서 현재 사용 가능한 RAM 및 사용률(백분율)
    free -m
    free명령어는 리눅스 시스템에서 메모리의 전체적인 현황을 살펴볼 수 있는 명령어임
    -m 옵션을 통해 MB로 단위 변경
    https://stackoverflow.com/questions/10585978/how-to-get-the-percentage-of-memory-free-with-a-linux-command
    free -m | grep Mem | awk '{printf"%d/%dMB (%.2f%%)\n", $3, $2, $3/$2 * 100}'

  • 서버에서 현재 사용 가능한 메모리 및 사용률(백분율)
    df -BM -a | grep /dev/mapper/ | awk '{sum+=$3}END{print sum}' | tr -d '\n' df 사용가능한 디스크용량확인 / -BM(MB로 변경) / -a (용량이 0인것도 보기) {sum+=$3}END{print sum} 세번째 필드의 합계산 tr -d '\n' 개행삭제 printf "/" df -BM -a | grep /dev/mapper/ | awk '{sum+=$4}END{print sum}' | tr -d '\n' printf "MB (" df -BM -a | grep /dev/mapper/ | awk '{sum1+=$3 ; sum2+=$4 }END{printf "%d", sum1 / sum2 * 100}' | tr -d '\n' printf "%%)\n"

df -m
df 명령어를 통해 리눅스 내 디스크메모리 전체 현황 확인 가능
-m 옵션을 통해 MB로 단위 변경

  • Cpu 사용량
    top명령어나 cat /proc/stat 등을 통해 CPU 사용량을 알 수 있음. 그러나 파싱하기 힘들고 특히 후자의 경우 부팅 후 모든 코어의 전체 CPU 사용량임.
    sysstat를 다운받아 mpstat 명령어를 사용하면 쉽게 현재 CPU의 사용량을 알 수 있음.
    sudo apt-get install sysstat
    mpstat 명령어에서 마지막 컬럼을 활용하여 결과를 도출

mpstat | grep all | awk '{printf "%.2f%%\n", 100-$13}'

  • 마지막 부팅날짜 및 시간
    last reboot 명령어를 사용하면 마지막으로 재기동한 시간이 언제인지 desc 정렬하여 출력한다.
    who 명령어는 현재 내가 어떤 사용자로 접속을 했는지 확인하기 위해 사용할 수 있다.
    -b 옵션을 사용하면 마지막 시스템 부팅 시간을 출력한다는 뜻.
    예시와 가장 비슷한 who명령어를 사용하였음.
    who -b | sed 's/^ *system boot //g'
    who 호스트에 로그인한 사용자 정보 / -b 부팅정보 / 시간을 제외하고 삭제

  • LVM이 활성 상태인지 여부
    lsblk 명령어를 사용하면 현재 장착된 디스크의 주요 사양을 확인할 수 있다.
    if [ "$(lsblk | grep lvm | wc -l)" -gt 0 ] ; then printf "yes\n" ; else printf "no\n" ; fi

  • 활성 연결 수
    ss명령어를 사용하면 네트워크 상태를 확인할 수 있다.
    ss | grep -i tcp | wc -l | tr -d '\n'

  • 서버를 사용하는 사용자 수
    who // 서버를 사용하는 유저들을 출력한다

  • IP주소 확인
    hostname -I | tr -d '\n'

  • mac주소 확인
    ip link show 명령어를 입력하면 mac주소를 얻을 수 있다.
    ip link show | awk '$1 == "link/ether" {print $2}' | tr -d '\n'

  • sudo 프로그램 실행된 명령 수
    usermod -aG systemd-journal <사용자이름> 명령어를 통해 journalctl 명령어를 사용할 준비
    journalctl을 사용하면 systemd-journald 데몬이 수집한 모든 로그 정보를 볼 수 있다.
    journalctl을 사용하여 특정 로그를 보고싶다면 _COMM=<특정> 옵션을 추가하면 된다.
    journalctl _COMM=sudo | grep COMMAND | wc -l | tr -d '\n'

평가

과제 질문

  1. 가상머신이 어떻게 작동하는지

VM

VM 정의

컴퓨팅 환경을 소프트웨어로 구현한 것. 가상화 기술로 작동.하나의 물리 서버에서 여러개의 운영체제를 구동할 수 있도록하는 기술.

  • 가상화 기술: 리소스의 추상화(단일 물리 리소스를 만들어 냄), 호스트(물리적 시스템), 게스트(호스트에서 실행되는 VM)

VM의 작동 방식


virtual machine은 Hypervisor 위에서 작동한다.
하이퍼바이저 : VM을 생성, 실행, 관리하는 프로세스(소프트웨어), 메모리, 스토릿 등의 리소스 관리
종류: MS Hyper-V, VirtualBox, VMware, Parallels Desktop
Hypervisor는 하드웨어에서 리소스를 사용하여 VM을 생성하고 구동하는 소프트웨어이다.

Hypervisor에는 아래 사진과 같이 2가지 유형이 있다.

Type 1(Bare-metal Hypervisor)
하드웨어 위에 바로 Hypervisor가 설치되는 형태이다

Type 2(Hosted Hypervisor)
호스트 운영 체제 위에 Hypervisor가 설치되는 형태이고, 해당 프로젝트에서 사용하는 virtualbox역시 Type 2에 속한다.

💡 Host와 Guest
Hypervisor가 설치되는 물리 하드웨어를 Host, Hypervisor에서 리소스를 사용하는 여러 VMGuest라고 한다.
우리가 클러스터의 macOS에서 다른 OSDebian을 구동시킬 수 있는 이유도 Hypervisior 덕분이라고 생각하면 된다.

VM 의 장점

  • 비용 절감
    여러 가상 환경을 하나의 인프라(하드웨어)에서 설치하기에 물리적 인프라 설치 공간을 줄일 수 있게 된다. 이 때문에 많은 서버를 유지 보수하지 않아도 되고 많은 전력을 사용할 필요가 없어 비용을 줄이는 데 도움이 된다.
  • 간편함+속도
    새로운 환경(OS)을 구동하려는 경우 새 환경 전체(물리적 서버 포함)를 준비하는 것 보다 빠르고 간편하다.
  • downtime의 최소화
    VM은 호스트가 예기치 않게 중단될 경우 다른 물리적 서버의 Hypervisor로 이전할 수 있다. 이는 유용한 백업 대책에 마련되있다는 의미이다.
  1. CentOSDebian의 차이점
    CentOS와 Debian은 모두 리눅스 커널 + 자유소프트웨어로 구성된 리눅스 배포판이다. 따라서 두 OS차이는 자유소프트웨어(패키지 포맷, 패키지 관리 툴 등)이다.

💡 리눅스 커널은 리눅스 배포판의 핵심 구성 요소이고 메모리에 상주하면서 하드웨어의 모든 주요한 기능을 제어한다.

CentOS

  • RHEL에서 사후 기술지원과 상표권을 배제하고 제작한 오픈소스이다.
  • 패키지 포맷으로 .rpm 확장자를 사용하고, yum을 패키지 관리 툴로 사용한다.
  • 기업용 서버에서 주로 사용된다.
    💡 RHELRedHat에서 개발한 유료 기업용 서버 OS이다.

Debian

  • debian project에서 제작한 오픈소스이다.
  • 패키지 포맷으로 .deb 확장자를 사용하고, dpkgAPT를 패키지 관리 툴로 사용한다.
  • 패키지 관리가 매우 편하다
    💡 UbuntuDebian 기반 OS이다.
    💡 APT는 처음에는 Debian 계열을 위해 고안되었으나 현재 .rpm 패키지와도 호환되도록 업데이트되어 CentOS에서도 사용 가능하다.
  1. AppArmor vs SELinux
    APPArmor : 리눅스 커널의 보안 모듈로 오픈 소스이고 생성한 개별 프로그램에 대한 profile 파일을 통해 아래와 같은 권한을 통제함으로써 개별 프로그램을 보호한다.
    리눅스 커널 보안 모듈
    프로그램 프로필 별로 권한 제한
    프로필: 네트워크 액세스, raw 소켓 액세스, 파일
    의 읽기/쓰기/실행
  • 네트워크 액세스 권한
  • raw 소켓 액세스 권한
  • 파일의 읽기, 쓰기, 실행 권한
  1. LVM , Partition

LVM은 물리적인 디스크를 논리적인 디스크로 할당하여 유연하게 관리할 수 있게 해준다. 즉, 여러개의 하드 디스크 공간을 합쳐서 하나의 디스크처럼 사용할 수 있고 기존에 사용중인 디스크의 공간을 자유롭게 확장할 수 있다. 또한 partitions의 애매한 공간을 활용 할 수 있다.

  1. Aptitude vs Apt
    aptitudeapt 모두 APT(Advanced Packaging Tool)이다.

aptitude

  • GUICLI 모두 제공한다.
  • apt-get의 command-line argument를 제공하기 때문에 apt-get을 완전히 대체할 수 있다.
  • apt-get 보다 더 많은 기능을 가지고 있다.

apt

  • CLI만 제공한다
  • 여러가지 APT(cache, mark, get)에서 자주 사용하는 옵션만 추출하여 사용자들이 보기 편하고 사용하기 쉽게 만든 것이다.
  1. SSH 작동 원리

SSH는 원격으로 호스트(Shell)에 접속하기 위해 사용되는 보안 프로토콜이다. 즉, 모든 데이터는 암호화가 보장된다.
SSH는 한 쌍의 key(public key/private key)를 이용하여 데이터를 암호화/복호화하는데 private key는 클라이언트, public key는 호스트가 가지고 있어야한다.

SSH를 사용하는 이유는 역시 보안이 된다는 장점 덕분이다.

  1. CentOS : SELinux , DNF
  • Security-Enhanced Linux 보안 아키텍처. 보안 강화 커널. 추가 보안 레이어를 제공.시스템의 앱, 프로세스, 파일에 대한 액세스 제어 정의
  • Dandified Yum (멋부린 yum) : CentOS 8 기본 패키지 관리 명령어(이전 yum) 성능 개선, 메모리 개선, 의존성 문제 처리

과제 관련 이론

NAT

TTY

리눅스 파일 구조

LVM, 파티션

DHCP

visudo

visudo를 통해 sudo권한을 편집할 수 있다. 만약 visudo를 쓰지 않고 직접 /etc/sudoers를 편집할 경우, 편집하다가 실수하면 sudo를 쓰지 못하게 되므로 문법체크를 해주는 visudo를 쓰는 게 좋다.visudo 명령어를 통해서 /etc/sudoers 파일을 오픈하게 되면 Temp 파일로 생기고 해당 파일 수정 완료시 특별히 문제 없이 저장된다
sudo에서 제공하는 또 다른 보안 기능 중 하나가 바로 Secure Path입니다. 이는 sudo 명령을 실행할 때 사용하는 가상 쉘의 PATH 정보를 설정합니다. 다시 말하면, sudo 명령을 실행할 때 현재 계정의 쉘이 아닌 새로운 쉘을 생성하고 그 안에서 명령을 실행하는데, 이 때 명령을 찾을 경로를 나열한 환경변수인 PATH값이 바로 이 secure_path가 됩니다.

VM 작동 방식, 종류, 목적

UFW

우분투의 기본적인 방화벽은 UFW입니다. 이는 iptables를 좀 더 쉽게 설정할 수 있도록 한 것인데 간단한 방화벽 구성에는 문제가 없지만 수준 높은 방화벽 구성에는 iptables 룰을 직접 사용해야 합니다.
UFW 기본 룰
UFW에 설정되어 있는 기본 룰은 아래와 같다.

  • 들어오는 패킷에 대해서는 전부 거부(deny)
  • 나가는 패킷에 대해서는 전부 허가(allow)

SSH 란. 작동 방식

SSH 설정

  • systemctl
    서비스 시작, 중지, 상태확인 재시작 관련한 명령어.

  • sudo systemctl restart ssh
    명령어를 통해 재시작하여 설정 적용

  • ss -tunlp

  • 리눅스 명령어 (ifconfig, dclient, route , shutdown)

  • lsof

    특정 포트에서 실행중인 pid 알아내기
    $ lsof -i tcp:8080 # 8080 포트를 사용하고 있는 프로세스 검색

  • ifconfig
    ifconfig 명령어는 명령줄 인수가 없을 경우 서버의 IP 주소 정보를 제공하며,
    명령줄 인수가 있을 경우에는 네트워크 정보를 수정하는 기능을 제공.
    윈도우의 ipconfig 명령어와 비슷한 역할을 담당.

  • /etc/ssh/sshd_config
    /etc/ssh 에는 ssh_config (client 측) 와 sshd_config (server 측) 가 있다.

Port 42 : ssh 사용할 기본 포트를 지정한다.
PermitRootLogin no : 보안상 no 로 해준다. root 로그인 허용 여부를 결정하는 것. yes, no, without-password 가능. 현재 no 로 되어 있기 때문에, 직접 root로 접속이 불가능하다. yes 로 하는 것 보다는, 일반 계정으로 들어간뒤 su 명령어를 통해, Root 로 전환하는 것이 보안상 안전하다.

  • 포트
    여러 서버가 있는데, 어떻게 식별 ? -> 이때 사용하는 것이 포트.
    (well known, 22 -ssh, 80 - http 등,,,)
    process 식별자 운영체제가 포트번호를 보고 프로세스를 식별한다. OS 수준에서는 PID를 이용해 식별하지만 네트워크에서 수신한 정보를 받을 프로세스를 결정할 때는 포트번호를 이용한다.
  • 포트 포워딩
    public address 로 들어왔을 때, 내부에 있는 서버로 어떻게 도달할 수 있지?
    외부에서 포트 8081 번으로 들어오면 내부포트는 80으로 하겠다 -> 이런 방식을 정하는 것.
  • 로컬과 가상환경 간 ssh 연결
    자신의 로컬 ip 주소 확인 : ifconfig (윈도우에서는 ipconfig)
    가상환경의 ip 주소 확인 : hostname -I

비밀번호 정책 관련

  • chage
    사용자의 패스워드 만기 정보를 변경 및 설정하는 명령어이다(쉽게 말해 사용자 패스워드 정보 관리). 시스템에게 로그인한 사용자가 패스워드를 변경해야 하는지를 알려준다. 시스템 관리 명령어이다 보니, root 권한을 가진 사용자만 사용 가능하다.

  • /etc/login.defs
    사용자 설정과 관련된 기본값을 저장.
    PASS_MAX_DAYS 30 # 패스워드 최대 사용 기간
    PASS_MIN_DAYS 2 # 패스워드 최소 사용 기간
    PASS_WARN_AGE 7 # 만료 알림 날짜
    PASS_MIN_LEN 10 # 패스워드 최소 글자수

Sudo

  • Su VS Su --
    패키지를 설치하거나,시스템 설정 파일을 수정하거나,신규유저를 추가하거나,다른 계정으로 파일권한을 변경하거나root 권한을 광범위하게 사용하고 있습니다.root 권한으로 변경할 때 가장 친숙한 명령어가 su 이다.
    사용법 : su [변경하고자 하는 사용자 ID]
    su 뒤에 변경할 사용자 ID를 입력하지 않는다면,su root와 동일하게 동작합니다.
    ‘-’는 -l 혹은 --login과 동일한 명령어입니다.곧, su -는 su --login root와 동일한 명령인 셈입니다.

Apparmor

Vim설치

sudo apt-get install vim

AppArmor 설정 확인

  • apparmor설치 확인
    sudo dpkg -l apparmor
  • apparmor설치
    sudo apt install apparmor
  • apparmor utils 설치
    sudo apt install apparmor-utils
  • aa-enabled 명령어를 통해 활성화 여부 확인 가능

주의 사항

  • vdi 파일 해쉬값 계속 바뀌기 때문에 제출하기 전 snapshot 찍고 제출하기!
  • 평가 때의 변경 사항이 snapshot에 저장되기 때문에 평가 할 때마다 snapshot restore하기!
  • signature.txt 파일은 repository의 root에 있는가?
  • .vdi 파일의 signature과 제출한 signature가 동일한가?

Shasum

(리눅스에서는 sha1sum , 맥(유닉스)에서는 shasum이다.)

소프트웨어 패키지 혹은 CD / DVD 파일을 공유할때, shasum 파일을 함께 배포되는 경우가 많다. shasum 파일은 원본 파일과 정확히 동일한 파일인지 확인할때 체크되는 파일이다. 체크섬(checksum)정보가 포함되어있다. (160bit)

  • 체크섬(checksum) : 중복 검사의 한 형태로, 공간이나 시간속에서 송신된 자료의 무결성을 보호하는 단순한 방법이다.
    즉, Born2beroot 프로젝트를 제출할때의 시점의 가상머신과, 동료평가를 받을때의 가상머신이 정확히 동일한 파일인지 확인하는 방법으로 shasum이 사용되며, 이를 signature.txt에 담아 제출하게된다.

참고 자료

출처: https://webdir.tistory.com/206 [WEBDIR:티스토리]

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=minjong_94&logNo=220832182934
https://www.youtube.com/watch?v=XT_jt0CmBbU
https://it-serial.tistory.com/entry/Linux-systemctl-%EB%AA%85%EB%A0%B9%EC%96%B4-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4-%EC%83%81%ED%83%9C-%ED%99%95%EC%9D%B8
https://www.tuwlab.com/ece/24044
출처: https://info-lab.tistory.com/163 [:: IT School :::티스토리]
https://info-lab.tistory.com/163
출처: https://lee-automation-lab.tistory.com/entry/Linux-visudo로-sudo권한-설정하기etcsudoers [이코딩의 자동화 연구소:티스토리]
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=jsky10503&logNo=220749042597
출처: https://storycompiler.tistory.com/44 [아프니까 개발자다:티스토리]
https://nostressdev.tistory.com/3
https://nostressdev.tistory.com/5
https://srngch.github.io/born2beroot/
https://velog.io/@tmdgks2222/42seoul-born2beroot-Linux-install
https://www.notion.so/born2beroot-2ce1177e08904c329fb437c7fdcd7113
https://infinitt.tistory.com/390

--
1. 그래픽 install 깔고 없다는 거 보여 드리
2. 버츄어 머신 설명
센트오에스
데비안 골랐으면 appt apt 차이
apparmor
apparmor에 대한 설명
application마다 보안값 설정 경로에 접근하는 프로필 설정
ssh , ufw,먼지
포트포워딩
visudo 설명
vi var/log
모니터링 스크립트 설명
crontab 설정하는 방법
10-30
lvm. 어떤 거고 이런거 쓰면 머가 좋고

profile
https://worldi.tistory.com/ 로 블로그 이전합니다.

0개의 댓글