[Born2beRoot] 세팅

J_JEON·2022년 4월 27일
1

Born2beRoot

목록 보기
2/7

Debian 및 VirtualBox 세팅

가상머신 (Virtual Machine)

  • 컴퓨터 내의 컴퓨터처럼 작동하는 가상의 환경, 즉 컴퓨터속에서 또다른 컴퓨터를 에뮬레이션 하는 소프트웨어
  • 사용하는 소프트웨어가 가상머신이 제공하는 환경과 자원의 제한을 받고 가상세계 밖으로 벗어날 수 없음
  • 사용하는 VirtualBox는 시스템 가상머신으로써 운영체제를 설치하고 실행하기 위해 컴퓨터의 메모리를 분할하여 단일 컴퓨터에서 격리된 여러 실행환경을 생성함

부트로더 (GRUB)

  • 운영체제가 실행되기 이전에 미리 실행되어 커널이 올바르게 실행될 수 있도록 사전 작업을 수행하고 아무 이상없이 운영체제를 실행시키기 위한 프로그램

Sudo 적용

  • sudo는 일반사용자가 root권한을 잠시 빌려 명령을 수행할 수 있게하는것으로 관리자 계정으로 전환하는 su -와 다름
  • sudo 사용시 root계정의 비밀번호를 효율적으로 관리할 수 있고 사용 로그도 확인할 수 있는 장점이 있음
  • su - 명령어를 통해 root 계정으로 이동
  • dpkg -l sudo 명령어를 통해 sudo설치 여부를 확인
  • apt install sudo 명령어를 통해 설치
  • visudo 명령어를 통해 sudoer파일에 접근
    • sudoer파일을 vi로 수정하려면 권한이 있어야 접근이 가능함, visudo를 사용하면 바로 수정가능
    • visudo는 tmp파일에서 유효성 검사를 한 후 유효할 시 원본파일에 써주기때문에 작성을 잘못하여 sudo를 사용하지 못하게되는것을 방지)
    • Defaults authfail_message="에러메세지"
      권한 획득 실패 시 출력 (sudo 인증 실패 시)
    • Defaults badpass_message="에러메세지"
      sudo비밀번호 틀리면 출력
    • Defaults log_input
      sudo명령어 실행 시 입력된 명령어 log로 저장
    • Defaults log_output
      sudo명령어 실행 시 출력 결과를 log로 저장
    • Defaults requiretty
      sudo명령어 실행 시 tty강제 (현재 셀이 tty이면 sudo가능 아니면 불가능)
    • Defaults iolog_dir="/var/log/sudo/"
      sudo log 저장 디렉토리 설정
    • Defaults passwd_tries=3
      sudo실행 횟수를 지정. default가 3
  • sudo명령 실행 시 현재 계정의 쉘이 아닌 새로운 쉘을 생성하고 그 안에서 명령을 실행하는데 이때 명령을 찾을 경로를 나열한 환경변수인 PATH값이 바로 secure_path임
    • 트로이목마 해킹공격에 일차적인 방어기능 제공
    • 현재 계정의 PATH에 악의적 경로가 포함된 경우 이를 무시하여 sudo를 통한 전체 시스템이 해킹되는 경우를 방지함

그룹 설정

  • groupadd user42
    user42그룹을 추가
  • usermod -G user42,sudo 유저이름
    유저를 user42, sudo그룹에 추가시키고 나머지 그룹에서는 탈퇴
  • usermod -aG user42,sudo 유저이름
    유저를 user42, sudo그룹에 추가시키고 나머지 그룹에서도 유지
  • usermod -g user42 유저이름
    user42를 유저의 primary group으로 만듬(gid)
  • id 유저이름
    유저의 그룹 정보를 보여줌

유저 추가 및 삭제

  • sudo useradd -m <유저이름>
    새로운 유저 추가 및 디렉토리 생성
  • passwd <유저이름>
    패스워드 설정
  • grep /bin/bash /etc/passwd | cut -f1 -d:
    useradd로 추가했던 유저 목록
  • userdel -r <유저이름>
    유저의 모든 정보 삭제

AppArmor 적용

  • sudo dpkg -l apparmor
    apparmor가 설치되어있는지 확인
  • sudo apt install apparmor
    apparmor 설치
  • sudo apt install apparmor-utils
    apparmor utils 설치
  • aa-enabled
    apparmor의 활성화 여부 확인

UFW(Uncomplicated Firewall) 적용

  • 데비안 계열 및 리눅스 환경에서 작동되는 방화벽 관리 프로그램, 리눅스에서 가장 많이 사용하는 방화벽인 iptable의 설정을 간단하게 할 수 있도록 도와준다.

    iptable

    • 시스템 관리자가 리눅스 커널 방화벽이 제공하는 테이블과 그것들을 저장하는 체인, 규칙들을 구성할 수 있게 해주는 사용자 공간 응용프로그램
  • 리눅스의 커널은 서버에 대한 클라이언트의 네트워크 접속을 제어하는 넷필터라는 모듈을 가지고있음, 이를 이용하여 서버 접속에 대한 네트워크 정책을 세우는 프로그램이 방화벽

    방화벽

    • 보안이 필요한 네트워크의 통로를 단일화하여 외부의 불법 침입으로부터 정보자산을 보호하기위한 시스템
    • 접근제어를 제공하기 위해 외부, 내부망의 구성을 위한 별개의 네트워크를 가짐
    • 바이러스와 같은 맬웨어 형태로 존재하는 위협은 방어x
  • 꼭 필요한 포트만 열고 내부 비공개 서비스포트는 기본값이 아닌 임의 포트로 변경해야함
  • sudo apt install ufw
    ufw를 설치
  • sudo ufw status verbose
    ufw상태 확인
  • sudo ufw enable
    부팅시 ufw가 활성화되게 설정 (기본은 비활성화)
  • sudo ufw default deny
    기본 기본정책을 deny로 설정 (allow도 가능)
  • sudo ufw allow 4242
    4242포트 연결을 허용
  • sudo ufw deny 4242
    4242포트 연결을 거부
  • sudo ufw show raw
    기본 룰 확인
  • sudo ufw status numbered
    룰들에 숫자를 붙여서 확인
  • sudo ufw delete 1
    1번 룰을 삭제
  • sudo ufw delete allow 4242
    4242포트 연결허용 룰이 있을때 룰을 삭제
  • sudo ufw allow(deny) ssh
    ssh연결을 허용(거부)

SSH(Secure Shell Protocol) 적용

SSH

네트워크 프로토콜중 하나로 컴퓨터와 컴퓨터가 인터넷과 같은 네트워크를 통해 통신할 때 안전하게 통신하기 위해 사용하는 프로토콜 (ex 데이터전송, 원격제어)

  • ssh는 통신을위해 접속할때에 일반적인 비밀번호가 아닌 한쌍의 KEY를 사용하여 인증과정을 거침.
  • public key를 통해 암호화를 하게되고, 본인의 컴퓨터에 저장되어있는 private key를 사용해 복호화하게됨
  • apt search openssh-server
    openssh가 설치되어있는지 확인
  • apt install open ssh-server
    openssh를 설치
  • systemctl status ssh
    openssh 실행여부와 사용 포트 확인
    (실행중이며 22번포트 사용중)
  • sudo vim /etc/ssh/sshd_config
    ssh의 설정을 변경
    • Port 22 라 되어있는부분을 Port 4242로 수정
      (ssh포트 기본인 22번포트 연결을 4242포트로 변경)
    • PermitRootLogin 부분을 No로 변경
      (외부에서 root으로 로그인하는것을 막음)
    • sudo systemctl restart ssh
      ssh를 재시작하여 설정을 적용
      (4242포트로 변경됨)

SSH 접속

  • <계정이름>@<내 ip주소> -p < Host Port번호>
    ssh로 접속 (포트번호는 들어가는 host포트, ufw에서 설정하는 포트는 guest port)

    포트포워딩

    클러스터 환경에서는 포트포워딩을 해주어야 접속 가능

    • ifconfig | grep inet
      클라이언트에서 입력해 내 ip주소 확인
    • hostname -I
      가상환경에서 입력해 ip주소 확인
    • virtualBox의 Setting - Network - Advanced - Port Forwarding
      HostPort는 원하는 포트 사용하고 다음과 같이 입력
      (다른 프로세스가 사용중일 수 있으니 lsof -P -i :번호 사용해 확인)
      host IP는 내 아이피, Guest IP는 VM IP

패스워드 정책 적용

  • chage -l <사용자>
    사용자의 암호만료 정보를 알 수 있음

  • vi /etc/pam.d/common-password
    현재 패스워드 정책을 알 수 있음

  • sudo apt install libpam-pwquality
    패스워드 정책 설정을 위한 모듈을 설치함

    libpam-pwquality 모듈

    • retry=N
      암호 입력을 N회까지
    • minlen=N
      암호 최소 길이는 N
    • difok=N
      기존 패스워드와 달라야 하는 문자 수 N
    • ucredit=-N
      대문자 최소 N개 이상
    • lcredit=-N
      소문자 최소 N개 이상
    • dcredit=-N
      숫자 N개 이상
    • reject_username
      사용자의 이름이 그대로 또는 뒤집혀서 패스워드에 포함되었는지 확인
    • enforce_for_root
      root사용자의 패스워드에도 정책 적용
    • maxrepeat=N
      같은 문자가 N번 이상 연속해서 나오는지 검사
  • vi /etc/login.defs
    패스워드 만료 및 변경 정책 설정

    • PASS_MAX_DAYS 30
      패스워드가 30일뒤 만료됨
    • PASS_MIN_DATS 2
      패스워드 변경 후 2일 뒤 변경가능
    • PASS_WARN_AGE 7
      패스워드 변경후 7일 경과시 알림
  • passwd <사용자명>
    사용자의 비밀번호를 변경함 (로그아웃후 재 로그인시 비밀번호 변경)

호스트

  • hostnamectl
    호스트 정보를 확인
  • sudo hostnamectl set-hostname <변경할 이름>
    호스트 이름을 변경함

파티션, LVM

파티션

어떤 하나의 공간을 여러개로 나누는것

  • 사용하던 중에는 디스크의 공간을 늘릴 수 없음

LVM (Logical Volume Manager)

  • Logical Volume을 효율적이고 유연하게 관리하기 위한 커널의 한 부분
  • LVM은 여러 디스크 공간 및 짜투리 공간을 합쳐서 하나로 만들 수 있게 해줌
  • 기존 사용하던 디스크의 공간이 부족해졌을때 다른 디스크의 공간을 추가해서 사용가능
  • 여러 저장공간을 하나의 공간처럼 사용가능

PE, PV, VG, LV, LE

  • PV는 기존의 디스크 공간같은 물리적 공간, PE는 PV를 이루는 최소단위
    (PE가 모여 PV)
  • PV를 모아 VG(Volume Group을 만듬)
  • VG에서 필요예따라 LV(Logical Volume)를 만들어 사용
  • LE는 LV에서 사용하는 PE
  • lsblk
    파티션을 확인

cron

cron

특정한시간 또는 특정 시간마다 어떤 작업을 수행하게하는 명령어

  • ps -ef | grep cron
    cron 설치여부 확인 (출력이 되면 설치 O)
  • crontab -e
    cron job 등록할 수 있는 편집창이 열림
    • 주기 설정
      *     *     *     *     *
      분(0-59) 시간(0-23) 일(1-31) 월(1-12)  요일(0-7)
    • * * * * * bash /home/script/test.sh | wall
      매분마다 test.sh 실행 및 wall사용하여 터미널에 출력
    • 45 5 * * 5 bash /home/script/test.sh | wall
      매 주 금요일 05시 45분에 test.sh 실행 및 wall 사용하여 터미널에 출력
    • * * * * * bash /home/script/test.sh | wall
      * * * * * sleep 30; bash /home/script/test.sh | wall
      두개를 이렇게 적을시 1분마다 실행 하나 30초 쉬고 실행하는것 하나 해서 30초마다 실행가능
  • crontab -l
    cron job 출력
  • crontab -r
    cron job 삭제
  • service cron start
    cron 시작 (crontab -e 로 수정후 시작 또는 재시작 해줘야함)
  • service cron restart
    cron 재시작
  • service cron stop
    cron 정지

    crontab

    -system disable cron
    시작시 실행안됨

  • cron 작업을 설정하는 파일
  • cron은 /etc/crontab 파일에 설정된 것을 읽어 작업을 수행
  • /usr/sbin/anacron
    크론과 같이 동작하는 프로그램으로 서버가 일정시간 중지되었어도 작업이 실행되는것을 보장하는 도구
  • /var/log/cron
    크론 실행내용을 기록
  • /etc/cron.daily /etc/cron.weekly /etc/cron.monthly
    시스템크론 설정 디렉토리, 주기적으로 실행할 내용을 넣어 작동

monitoring.sh

  • 아키텍쳐와 커널버젼

    • uname -a
      시스템 정보를 출력하는 uname과 모든 정보를 출력하는 -a옵션 사용
  • 물리 프로세서

    • cat /proc/cpuinfo | grep "physical id" | sort -u | wc -l
      /proc/cpuinfo 파일은 CPU 코어의 세부사항에 대한 정보를 가지고 있으며
      physical id가 적힌 라인을 추출하고 unique하게 정렬한 뒤 카운트하여 갯수를 알아냄
  • 가상 프로세서

    • cat /proc/cpuinfo | grep "processor" | sort -u | wc -l
      실제 cpu가 아닌 프로세서 갯수를 알아야하므로 processer가 적힌 라인을 추출하고 unique하게 정렬한 뒤 카운트하여 갯수를 알아냄
  • 사용가능 RAM과 사용률

    • free --mega | grep Mem | awk '{printf"%d/%dMB (%.2f%%)\n", $3, $2, $3/$2 * 100}'
      메모리 현황을 MB단위로 보는 free --mega 에서 Mem이 적힌 라인을 추출하고
      3번째값 '/' 2번째값'MB'((3번째값/2번째값 * 100)소수점 2번째까지'%') 를 출력해줌
  • 사용가능 메모리와 사용률

    • df -BM | grep LVM | awk '{sum+=$3}END{print sum}' | tr -d '\n'

      리눅스 내 디스크 메모리 현황을 MB단위로 보는 df -BM 에서 LVM이 적힌 라인을 추출하고 각 라인들의 3번째값(used)를 합한 값을 출력하는데 \n은 제외

    • df -BG | grep LVM | awk '{sum+=$2}END{print sum}' | tr -d '\n'

      리눅스 내 디스크 메모리 현황을 GB단위로 보는 df -BG 에서 LVM이 적힌 라인을 추출하고 각 라인들의 2번째값(1G-blocks)를 합한 값을 출력하는데 \n은 제외

    • df -BM | grep LVM | awk '{sum1+=$3 ; sum2+=$2}END{printf "%d", sum1 / sum2 * 100}' | tr -d '\n'

      리눅스 내 디스크 메모리 현황을 MB단위로 보는 df -BM 에서 LVM이 적힌 라인을 추출하고 각 라인들의 3번째값(used)와 2번째값(1G-blocks)를 각각 합한 값의 백분율을 출력하는데 \n은 제외

  • CPU 사용률

    • sudo apt-get install sysstat
      자원에 대한 모니터링을 도와주는 유틸리티인 sysstat의 mpstat명령어를 사용하기위해 sysstat을 다운로드
    • mpstat | tail -1 | awk '{print 100 - $NF}' | tr -d '\n'
      cpu 사용량을 모니터링하는 mpstat의 마지막 컬럼인 idle값을 100에서 빼면 현재 cpu의 사용률이 됨
  • 마지막 부팅 날짜 및 시간

    • who -b | awk '{printf"%s %s", $3 $4}'
      호스트에 로그인한 사용자 정보를 보는 who의 마지막 부팅 시간을 보는 -b를 사용하고 날짜인 3번째값과 시간인 4번째값을 사용
  • LVM 활성화 여부

    • lsblk | grep 'lvm' | wc -l | awk '{if($1>0)print"yes";else print"no"}'
      파티션 정보를 출력하는 lsblk에서 타입이 lvm인 부분을 추출한 뒤 라인 수를 구하고 그것이 0 이상이라면 파티셔닝이 된것이니 yes를 출력하게하고 0보다 작다면 no를 출력
  • 활성화된 연결의 수

    • ss -t | grep ESTAB | wc -l
      ss명령어로 네트워크 상태를 보고 -t로 tcp의 연결상태를 확인
      그중 Establish 상태인 네트워크의 갯수를 출력
  • 서버를 사용하는중인 유저의 수

    • who | wc -l (who -q)
      호스트에 로그인한 사용자 정보를 출력하는 who에서 라인의 갯수를 출력
  • 서버의 IPv4주소, MAC주소

    • hostname -I
      IPv4주소를 출력
    • ip link | grep link/ether | awk '{print"("$2")"}'
      ip link의 link/ether 부분에 있는 MAC주소를 괄호에 넣고 출력
  • sudo로 실행한 커맨드의 수

    -ls /var/log/sudo/*/* | wc -l
    sudo로 실행한 커맨드의 log가 저장되는 sudo폴더 내의 log폴더가 몇개 있는지 확인해줌

profile
늅늅

0개의 댓글