born2beroot

이봐요이상해씨·2021년 7월 1일
0

42서울

목록 보기
2/4
  1. 설치 완료후
  • sudo 설치 및 그룹 지정
    1. dpkg -l sudo 통해 sudo 설치 여부 확인 가능
    2. su - 로 루트권한으로 넘어감
    3. apt-get install sudo -y 로 sudo 설치
    4. groupadd user42 로 user42 그룹 추가
    5. usermod -aG sudo jongbin 으로 sudo그룹 추가
    6. usermod -aG sudo,user42 jongbin 으로 jongbin을 sudo, user42에 추가
    7. usermod -g user42 jongbin 으로 jongbin의 pimay group은 user 42
    8. sudo deluser 사용자명 그룹명"을 통해 그룹에서 사용자를 제거
    9. sudo userdel -r 사용자명" 통해 사용자 제거
  • vim설치
    1. sudo apt-get install vim
  • 비밀번호변경
    1. sudo vi /etc/login.defs친 후, "PASS_MAX_DAYS 30", "PASS_MIN_DAYS 2", "PASS_WARN_AGE 7", "PASS_MIN_LEN 10"으로 변경.
    2. sudo apt install libpam-pwquality 로 패키지 설치
    3. "sudo vi /etc/pam.d/common-password" 입력
    4. 다음과 같이 입력

5. passwd -e 사용자명 을 입력하여 root계정과 현존하는 사용자 계정 암호 변경 강제 다음 로그인시 암호변경
6. 
- retry=3 : 암호 입력 3회까지
- minlen=10 : 암호 최소 길이는 10
- difok=7 : 기존 패스워드와 달라야하는 문자 수는 7
- ucredit=-1 : 대문자 한 개 이상
- lcredit=-1 : 소문자 한 개 이상
- dcredit=-1 : 숫자 한 개 이상
- reject_username : username이 그대로 또는 뒤집혀서 새 패스워드에 들어있는지 검사하고, 들어있으면 거부
- enforce_for_root : root 사용자가 패스워드를 바꾸려고 하는 경우에도 위의 조건들 적용
  • sudoer 파일 설정
    1. sudo mkdir /var/log/sudo/"를 통해 로그 파일을 저장할 경로 생성.
    2. sudo visudo"를 통해 '/etc/sudoers'파일을 수정 가능.
    • 파일에서 'Defaults secure_path="경로"'에서 경로부분을 "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"로 수정해준다.(sudo를 통해 실행되는 명령어의 경로를 명시된 경로로 제한해준다. sudo만의 $PATH 환경변수를 설정해주는듯하다.)

    • 마지막 줄에 다음을 입력.

      Defaults    authfail_message="Authentication attempt failed."
      Defaults    badpass_message="Wrong password!"
      Defaults    log_input
      Defaults    log_output
      Defaults    requiretty
      Defaults    iolog_dir="/var/log/sudo/"

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

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

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

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

      requiretty : tty에 연결되지 않은 채로 sudo를 실행하는 것을 금지?

      ex. 쉘 스크립트 상에서 sudo 커맨드 수행 금지.

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

    1. 마지막에 ctrl (오른쪽) + o로 저장 후 x눌러서 빠져나오기
  • monitorin.sh작성
    • os의 아키텍쳐와 커널 버전 : "uname -a"를 통해 출력 (-p와 -i를 제외한 모든 플래그 옵션 출력)
    • the number of physical processors : "nproc --all"을 통해 설치된 프로세서의 갯수를 출력
    • the number of virtual processors : "cat /proc/cpuinfo | grep processor | wc -l"을 통해 가상 프로세서(vCPU)의 갯수를 출력
    • the available RAM on your server and its utilization rate as a percentage : "free -m | grep Mem | awk '{printf "%d/%dMB (%.2f%%)", $3, $2, $3/$2 * 100}'"를 입력하면 다음과 같이 출력된다. https://blog.kakaocdn.net/dn/luJZ7/btq53jmK4pP/JxGkpdK1SDO1rHCZ7A0Ppk/img.png
    • the available memory on your server and its utilitzation rate as a percentage : "df -BM -a | grep /dev/mapper"를 통해 home과 root 용량을 확인할 수 있고 awk를 통해 비율 계산.
    • the utilization rate of your processors as a percentage : "sudo apt-get install sysstat" && "mpstat | grep all | awk '{printf "%.2f%%", 100-$13}'"로 출력
    • the date and time of the last reboot : "who -b | sed 's/ system boot //g'"로 출력.
    • Whether LVM is active or not : if [ "$(lvscan | grep -i ACTIVE | wc -l)" -gt 0 ] ; then echo "yes" ; else echo "no" ; fi를 입력하면 yes나 no 출력
    • The number of active connections. : "ss -t | grep -i ESTAB | wc -l"하면 현재 established tcp 연결 수 출력
    • The number of users using the server. : "who | wc -l"
    • The IPv4 address of your server and its MAC (Media Access Control) address. : IPv4는 "/sbin/ifconfig | grep broadcast | sed 's/inet//g' | sed 's/netmask.//g' | sed 's/ /g' "를 통해 추출 가능. MAC은 "/sbin/ifconfig | grep 'ether ' | sed 's/.ether //g' | sed 's/ .*//g' "을 통해 추출 가능
    • The number of commands executed with the sudo program. : "grep 'sudo:' /var/log/auth.log | grep 'COMMAND=' | wc -l"을 통해 출력 가능
    1. chmod +x monitoring.sh 로 권한 부여
    2. monitoring.sh | wall 로 모든 사용자에게 스크립트 출력 내용 출력
  • UFW방화벽 설정하기
    1. "sudo apt install ufw" -> ufw 설치
    2. sudo ufw status verbose"로 ufw 상태 확인 (디폴트는 inactive)
    3. "sudo ufw enable"로 부팅 시 ufw 활성화되게 설정
    4. "sudo ufw default deny"로 기본 incoming deny로 설정
    5. "sudo ufw allow 4242"로 ssh연결 허용(4242라는 커스텀 포트 사용하는 경우)
    6. 정책 삭제 원하는 경우 "sudo ufw status numbered"로 지우고 싶은 규칙 확인후 "sudo ufw delete 규칙번호"입력
  • ssh서버 설정하기
    1. apt search openssh-server"를 입력하여 openssh가 깔려 있는지 확인. 없으면 apt-get install openssh-server 로 설치
    2. 설치 후 "systemctl status ssh"를 통해 openssh 실행 여부와 사용 포트를 확인할 수 있다.
    3. "sudo ufw allow 4242" (ufw참조)로 4242 포트 허용
    4. "sudo vim /etc/ssh/sshd_config"를 통해 ssh 설정을 변경. Port 22라 되어있는 줄을 Port 4242로 바꾸고 앞에 #이 붙어서 주석 처리되어있으면 #을 삭제해준다.
    5. sudo sytemctl restart ssh로 재시작
  • VM에서 포트포워딩 설정하기
    1. https://gist.github.com/wacko/5577187 에 들어가서 그대로 설정하기

평가대비

  1. vdi hash값 보여주기 (signature file)

    certUtil -hashfile centos_serv.vdi sha1

  1. mandatorypart
    • 기본설정
      1. VM머신에 대한 간단한 설명

        1. 가상화란 :

        단일한 물리 하드웨어 시스템에서 여러 시뮬레이션 환경이나 전용 리소스를 생성할 수 있는 기술

        ii. 작동원리:

        하이퍼바이저

        (hypervisor) 또는 가상 머신 모니터(VMM, virtual machine monitor)라고도 불리는 기술을 이용해 단일 물리 하드웨어 시스템을

        가상 머신

        (virtual machine)이라는 별도의 고유하고 안전한 환경으로 분할되어 이뤄진다. 여기서 하이퍼바이저가 설치된 물리 하드웨어를

        호스트

        (host),  가상화된 리소스를 사용하는 가상 머신을

        게스트

        (guest)라고 한다.

        https://haedallog.tistory.com/123

      2. CentOS vs Debian 차이

        https://coding-factory.tistory.com/318

        둘다 linux 운영체제

        레드햇 계열 ⇒ centos

        CentOS는 Community Enterprise Operating System 의 약자로 Red Hat이 공개한 RHEL을 그대로 가져와서 Red Hat의 브랜드와 로고만 제거하고 배포한 배포본입니다. 사실상 RHEL 의 소스를 그대로 사용하고 있기에 RHEL(radhat enterprise linux) 과 OS 버전, Kernel 버전, 패키지 구성이 똑같고 바이너리가 100%로 호환됩니다

        온라인 커뮤니티 제작 ⇒ debian

        이 데비안에서 파생되어진 OS를 데비안 계열이라고 부릅니다. 하지만, 자발적인 커뮤니티에서 만드는 배포판이라 전문적인 회사에서 서비스를 했던 레드햇계열에 비해 사후지원과 배포가 늦고 내장 유틸들의 성능이 레드햇계열에 비해 부족한감이 있어 오랫동안 레드햇에 밀렸었습니다. 하지만 현재는 무료 개인사용자 서버용으로 인기가 매우 높으며 최근에는 지속적인 업데이트를 거친 결과 레드햇계열에 비해 결코 성능이나 뒤쳐지지 않습니다. 그리고 넓은 유저층을 가지고 있는 데비안계열은 그 사용법이 온라인 웹사이트나 커뮤니티에 자세히 기술되어 있다는 점이 진입장벽을 낮추어 초보 리눅스유저들이 접근하기 쉬운 OS라고 할 수 있겠습니다.

        • 패키지 관리 :

        • centos : RPM 포맷과 YUM/DNF 패키지 매니저 사용.

        • debian :은 DEB 포맷과 dpkg/APT 매니저 사용

        • 파일 시스템 :

          centos: 디폴트는 XFS.

          데비안: 디폴트는 EXT4

          https://cozyboy.tistory.com/entry/linux-xfs

        • 지원 :

          centos : 레드햇 공개한 RHEL(radhat enterprise linux)을 가져와서 레드햇의 브랜드와 로고만 제거하고 배포한 배포본. 무료 사용 가능하지만 문제 발생시 레드햇이 아닌 커뮤니티 통해 지원되므로 패치가 다소 느린 감이 있음.

          데비안: 오래 된만큼 커뮤니티에 강점.

      3. apt 와 aptitude 차이

        우분투에서 패키지를 관리하는 툴에는 apt, dpkg, aptitude가 있는데

        apt

        apt는 온라인 리포지토리에서 패키지를 다운로드받고 설치하는데 사용된다.

        실질적으로 apt는 dpkg와 함께 작동한다. 하지만 필요한 소프트웨어의 검색, 다운로드 , 설치, 업그레이드, 검사 등 대부분의 패키지 관리작업은 apt 단독으로 가능하다.

        dpkg

        dpkg는 cd룸이나 다른 디스크 장치에 있는 .deb 파일을 제어하는 경우에 일반적으로 사용되며, dpkg 명령어는 시스템 소프트웨어 대한 설정이나 설치 및 정보를 얻는데 사용되는 옵션을 가진다. apt 보다는 낮은 수준에서 수행된다. apt는 우분투의 소프트웨어를 관리하기 위해 내부적으로 dpkg를 사용한다. 보통 apt 명령만으로 충분하지만 시스템에 있는 특정 파일이 어떤 패티지에 포함되는지 등의 확인 작업을 수행하기 위해 dpkg 명령이 필요하다.

        aptitude

        aptitude는 주요 패키지 작업 과정을 자동화하여 가능한 쉽게 작업할 수 있도록 해주므로 보다 쉽다. 사용하지 않는 패키지를 자동적으로 제거해주기도 한다. apt-get 외에 apt-chche, apt-mark와 같은 툴도 같이 사용한다. aptitude는 설치, 제거, 업데이트 과정에서 충돌이 있는 경우 다른 대안을 제시해줌. apt는 그냥 안 된다고만 함.

        AppArmord

        AppArmor는 시스템 관리자가 프로그램 프로필 별로 프로그램의 역량을 제한 할 수 있게 해주는 리눅스 보안 모듈이다. 앱 아머는 정책 파일을 통해 어떤 어플리케이션이 어떤 파일/경로에 접근 가능한지 허용해준다.

        enforce 모드와 complain모드 두가지가 존재한다. enforce 모드는 허가되지 않은 파일에 접근하는 것을 거부하는 모드, complain모드는 실질적으로 보안을 제공하는 것은 아니고, 어플리케이션이 해야할 행동이 아닌 다른 행동을 하는경우에 앱 아머는 로그를 남겨준다.

        sudo aa-status : apparmor 상태확인

        simple setup

        ufw status 명령어로 ufw 확인

        ssh ⇒ ssh -p 4242 root@192.168.56.1 로 접속해서 되는지 확인

        ssh란?

        SSH(Secure Shell)는 원격지 호스트 컴퓨터에 접속하기 위해 사용되는 인터넷 프로토콜이다

        동작 방식

        SSH 키(Key)는 공개키(public key)와 비공개키(private key)로 이루어지는데 이 두개의 관계를 이해하는 것이 SSH Key를 이해하는데 핵심이다. 키를 생성하면 공개키와 비공개키가 만들어진다. 이 중에 비공개키는 로컬 머신에 위치해야 하고, 공개키는 리모트 머신에 위치해야 한다.(로컬 머신은 SSH Client, 원격 머신은 SSH Server가 설치된 컴퓨터를 의미한다) SSH 접속을 시도하면 SSH Client가 로컬 머신의 비공개키와 원격 머신의 비공개키를 비교해서 둘이 일치하는지를 확인한다.

        https://velog.io/@hyeseong-dev/리눅스-ssh란

        sudo systemctl status ssh : 로 ssh 확인

        ssh -p 4242 root@192.168.56.1 로 접속시 접속 불가

        ssh -p 4242 jongbpar@192.168.56.1 로 ssh접속 확인

        포트포워딩이란?

        컴퓨터 네트워크에서 패킷이 라우터나 방화벽 같은 네트워크 게이트웨이를 통과하는 동안 네트워크 주소를 변환해주는 것을 의미

        https://ooeunz.tistory.com/104

    • User
      1. sudo 와 user42에 추가되어있어야 한다
        1. id jongbpar 로 확인
      2. 유저 생성 후 비밀번호 규칙 설정 보여주고 "evaluation"이라는 그룹 생성 후 여기에 만든 유저 넣기 그리고 비밀번호 규칙 이점 설명해주기
        1. 비밀번호 규칙 보여주기

          1. vi /etc/login.defs
          2. vi /etc/pam.d/common-password 로 들어가서 sudo그룹에 대한 비밀번호 설정 보여주기(비밀번호 편리한 설정을 위해(pam)으로 패캐지 설치후 설정
          • retry=3 : 암호 입력 3회까지
          • minlen=10 : 암호 최소 길이는 10
          • difok=7 : 기존 패스워드와 달라야하는 문자 수는 7
          • ucredit=-1 : 대문자 한 개 이상
          • lcredit=-1 : 소문자 한 개 이상
          • dcredit=-1 : 숫자 한 개 이상
          • reject_username : username이 그대로 또는 뒤집혀서 새 패스워드에 들어있는지 검사하고, 들어있으면 거부
          • enforce_for_root : root 사용자가 패스워드를 바꾸려고 하는 경우에도 위의 조건들 적용
        2. adduser 로 유저 생성

        3. groupadd evaluation 으로 그룹 생성

        4. usermod -aG evaluation username 으로 생성한 유저 추가ㅇ

        5. id username으로 속해있는 그룹 보여주기

        6. "sudo deluser 사용자명 그룹명"을 통해 그룹에서 사용자를 제거할 수 있다.

        7. "sudo userdel -r 사용자명" 통해 사용자 제거 가능.

    • Hostname and Partitions https://blog.buffashe.com/2020/02/changing-ubuntu-18-04-lts-hostname/
      1. 로그인42로 호스트네임 되어있는지 확인

        1. hostname 입력
      2. 호스트네임 변경하기

        1. sudo hostnamectl set-hostname 바꾸려는호스트명
      3. vm 파티션 보기

        1. lsblk라고 침

        2. lvm 설명

        3. https://mamu2830.blogspot.com/2019/12/lvmpv-vg-lv-pe-lvm.html

        4. lvm이란?

        Logical(논리적인) Volume(공간을) Manager(만들게 해주는{관리 해주는} 프로그램)

        1. lvm 쓰는이유

        1. 여러개의 디스크 공간을 합쳐서 하나인양 사용하기 위해

        2. 사용하기 애매한 공간의 디스크 파티션(짜투리)들을 활용하기 위해

        3. 기존에 사용중인 디스크의 공간을 확장할 수 있기에

        전체적인 설명은 :

        물리적 매체가 있고 이를 PV(Physical Volume)로 나눈다. 이들을 적당히 모아서 VG(Volume Group)로 구성. 그 후 각 VG를 LV(Logical Volume)으로 나누어서 사용.

        pv는 물리적 공간, 최소단위가 pe lvm을 사용하기 위한 개념 "PV(Physical Volume)" 을 만드는 이유는"LV"를 만들기 쉽게,디스크의 최소 공간들을 "PE"라는 것으로 통일하는 과정

        vg 는 "PV"들을 합쳐서 "VG(Volume Group)"를 만드는 것

        이렇게 만들어진 vg를 필요한만큼 사용해서 lv로 만든다

    • Sudo Defaults requiretty란? cron 이나 agent 내부에서 sudo 명령어 실행이 불가능하며, 실제 tty(teletyperwriter, Linux 콘솔 or 터미널) 를 통해 접속된 상태에서만 sudo 명령어 실행이 가능하다. 출처: https://november11tech.tistory.com/98
      1. sudo 설치여부 확인
        1. dpkg -l sudo 통해 sudo 설치 여부 확인 가능
      2. sudo 그룹에 추가
        1. usermod -aG sudo 사용자명
      3. sudo 사용하여 비밀번호 변경이나 틀릴시 로그 쌓이는지 확인
        1. sudo visudo"를 통해 '/etc/sudoers'파일을 수정 가능(비밀번호 틀리면 나오는 메세지가 여기에 적힌대로 나오는지 확인)
        2. root 권한으로 cd /var/log/sudo 들어가서 vi 00하면 log가 나온다!
    • UFW
      1. 우분투의 기본 방화벽
        1. UFW(Uncomplicated Firewall,언컴플리케이티드 방화벽)는 데비안 계열 및 다양한 리눅스 환경에서 작동되는 사용하기 쉬운 방화벽 관리 프로그램이다.
      2. ufw status로 방화벽 설정 확인
      3. sudo ufw allow 8080 ⇒8080포트 허용
      4. 지울때
        1. 정책 삭제 원하는 경우 "sudo ufw status numbered"로 지우고 싶은 규칙 확인후 "sudo ufw delete 규칙번호"입력
    • SSH
      1. 설치여부 확인s
        1. apt search openssh-server를 입력하여 openssh가 깔려 있는지 확인
      2. 실행 여부 확인
        1. systemctl status ssh를 통해 openssh 실행 여부와 사용 포트를 확인할 수 있다.
      3. ssh 설명(https://medium.com/@jamessoun93/ssh란-무엇인가요-87b58c521d6f)
        1. SSH 란 Secure Shell 의 줄임말로, 두 컴퓨터 간 통신을 할 수 있게 해주는 하나의 protocol 입니다.
        2. 브라우저가 웹페이지를 보여주기 위해 서버와 통신할 때 HTTPS protocol을 사용하는 것과 같이, 서로 다른 컴퓨터들이 shell 을 통해 통신하기 위한 protocol 이 필요했고, Rlogin, Telnet 등을 거쳐 지금 가장 많이 사용되는 것이 SSH 입니다.
    • Script monitoring
      1. cron 이란

        1. unix 계열 운영체제 (linux, MacOS 포함)를 사용하다보면 시간대별로 반복되는 작업들을 수행해야 하는 경우 사용되는 작업 스케쥴링
      2. cron 설정법

        1. sudo crontab -e 로 크론 설정 들어감
        2. chmod +x monitoring.sh( X(대문자 X)는 권한 지정 대상이 "실행(x) 권한을 가져도 괜찮은 경우에만 실행 권한을 지정"하고자 할 때 사용합니다.)

        크론탭 설명

        https://jdm.kr/blog/2

        1. 10분 설정

30초 설정

dc

monitoring 설명

wc -l : 라인수 보여줌

필드에 연산을 수행한 결과 출력하기 awk '{print $1, $2, $3+2, $4, $5}' [FILE]

https://recipes4dev.tistory.com/171

  • os의 아키텍쳐와 커널 버전 : "uname -a"를 통해 출력 (-p와 -i를 제외한 모든 플래그 옵션 출력)
  • the number of physical processors : "nproc --all"을 통해 설치된 프로세서의 갯수를 출력
  • the number of virtual processors : "cat /proc/cpuinfo | grep processor | wc -l"을 통해 가상 프로세서(vCPU)의 갯수를 출력
  • the available RAM on your server and its utilization rate as a percentage : "free -m | grep Mem | awk '{printf "%d/%dMB (%.2f%%)", $3, $2, $3/$2 * 100}'"를 입력하면 다음과 같이 출력된다. https://blog.kakaocdn.net/dn/luJZ7/btq53jmK4pP/JxGkpdK1SDO1rHCZ7A0Ppk/img.png
  • the available memory on your server and its utilitzation rate as a percentage : "df -BM -a | grep /dev/mapper"를 통해 home과 root 용량을 확인할 수 있고 awk를 통해 비율 계산.
  • the utilization rate of your processors as a percentage : "sudo apt-get install sysstat" && "mpstat | grep all | awk '{printf "%.2f%%", 100-$13}'"로 출력
  • the date and time of the last reboot : "who -b | sed 's/ system boot //g'"로 출력.
  • Whether LVM is active or not : if [ "$(lvscan | grep -i ACTIVE | wc -l)" -gt 0 ] ; then echo "yes" ; else echo "no" ; fi를 입력하면 yes나 no 출력
  • The number of active connections. : "ss -t | grep -i ESTAB | wc -l"하면 현재 established tcp 연결 수 출력
  • The number of users using the server. : "who | wc -l"
  • The IPv4 address of your server and its MAC (Media Access Control) address. : IPv4는 "/sbin/ifconfig | grep broadcast | sed 's/inet//g' | sed 's/netmask.//g' | sed 's/ /g' "를 통해 추출 가능. MAC은 "/sbin/ifconfig | grep 'ether ' | sed 's/.ether //g' | sed 's/ .*//g' "을 통해 추출 가능
  • The number of commands executed with the sudo program. : "grep 'sudo:' /var/log/auth.log | grep 'COMMAND=' | wc -l"을 통해 출력 가능

0개의 댓글