https://github.com/zhy2on/42cursus_01_Born2beroot/blob/main/Subject.md
https://github.com/wshloic/born2beroot_correction/blob/master/correction_born2beroot.pdf
Debian | CentOS |
---|---|
데비안(영어: Debian)은 데비안 프로젝트가 개발한 자유(free) 컴퓨터 운영 체제이다. | 센트OS(영어: CentOS)는 센트OS 프로젝트에서 레드햇 제휴로 개발한 컴퓨터 운영 체제이다. |
데비안은 안정성과 보안에 중점을 두며 사용자 편리성이 강한 우분투등 다른 많은 리눅스 배포판의 기반으로 쓰이고 있다. | 업스트림 소스인 레드햇 엔터프라이즈 리눅스와 완벽하게 호환되는 무료 기업용 컴퓨팅 플랫폼을 제공할 목적으로 만들어진 리눅스계 운영 체제 가운데 하나다. |
현재 버전: 10.0 커널: 4.19 | 현재 버전: 8.0-1905 커널: 4.18.0-80 |
패키지관리 프로그램(apt, dpkg, aptitude)의 한 유형이다.
apt(Advanced Packaging Tool) | aptitude |
---|---|
데비안 GNU/리눅스 배포판 계열 배포판에서 소프트웨어를 설치하고 제거하는 일을 한다. | APT의 프론트엔드 프로그램이다. 앱티튜드는 소프트웨어 패키지의 목록을 보여주고, 사용자가 패키지를 능동적으로 설치 혹은 삭제하도록 허용한다. |
APT는 이진 파일로부터나 소스 코드 컴파일을 통하여 소프트웨어 패키지의 확인·구성·설치를 자동화함으로써 유닉스 계열 컴퓨터 시스템 상의 소프트웨어를 관리하는 작업을 단순하게 만든다. | 앱티튜드는 특히 유연한 검색 패턴을 지원하는 검색 기능을 가지고 있다. |
apt 이스터에그🐮 | 가장 큰 차이가 프론트엔드 지원하는지! aptitude는 명령어 실행시키면 이렇게 프론트엔드 프로그램으로 실행할 수 있다. |
Application Armor. 시스템 관리자가 프로그램 프로필 별로 프로그램의 역량을 제한할 수 있게 해주는 리눅스 커널 보안 모듈이다.
Logical Volume Manager. 리눅스의 하드디스크 관리 기술이다. (리눅스에서는 RAID와 LVM을 사용한다고 한다.)
Secure Shell Protocol. 네트워크 프로토콜 중 하나로 컴퓨터와 컴퓨터가 인터넷과 같은 Public Network를 통해 서로 통신을 할 때 보안적으로 안전하게 통신을 하기 위해 사용하는 프로토콜이다. - https://baked-corn.tistory.com/52
$ apt install openssh-server #ssh 설치
$ systemctl status ssh #ssh 상태 보기
$ sudo vim /etc/ssh/sshd_config -> Port 4242 #4242 포트 활성화
$ sudo systemctl restart ssh #ssh 재시작
Uncomplicated Firewall. UFW는 데비안 계열 및 다양한 리눅스 환경에서 작동되는 사용하기 쉬운 방화벽 관리 프로그램이다.
$ sudo apt install ufw #ufw 설치
$ sudo ufw status verbose #ufw 상태 보기
$ sudo ufw enable #ufw 활성화
$ sudo ufw default deny #기본 incoming deny
$ sudo ufw allow 4242 #4242포트 ssh연결 허용
$ hostname #현재 호스트네임 확인
$ sudo hostnamectl set-hostname wil42 #호스트네임 변경
$ hostname #바뀐 호스트네임 확인
$ sudo reoobt #재부팅 시 바뀐 호스트네임을 확인 가능하다.
$ groupadd user42 #user42라는 그룹 추가
$ sudo usermod -G sudo,user42 jihoh #jihoh가 속한 그룹을 sudo, user42로 변경. (-a(append)옵션 사용시 기존에 추가. 없이 사용시 그대로 변경)
$ sudo usermod -g user42 jihoh #user42를 primary group으로 설정
$ id jihoh #계정 정보 확인
$ sudo vi /etc/login.defs
PASS_MAX_DAYS 30 #만료일
PASS_MIN_DAYS 2 #최소 사용일
PASS_WARN_AGE 7 #경고 메세지
PASS_MIN_LEN 10 #최소 글자수
$ sudo apt install libpam-pwquality cracklib-runtime #libpam-pwquality 설치
$ sudo vim /etc/pam.d/common-password
password requisite pam_pwquality.so minlen=10 ucredit=-1 dcredit=-1 maxrepeat=3 difok=7 reject_username enforce_for_root
#minlen 최소길이 ucredit 대문자 =-1 최소 하나이상 dcredit 숫자 =-1 최소 하나 이상 maxrepeat 반복제한 difok 이전 비밀번호와 겹치는 글자 제한 reject_username 유저네임 그대로 of 거꾸로 포함 제한 enforce_for_root 루트에도 적용
$ passwd -e [username] #passwd -e (expire) 비밀번호 만료 옵션.
$ sudo chage -m 2 -M 30 -W 7 [username] #-m MIN_DAYS -M MAX_DAYS -W WARN_DAYS
$ su #root 계정 전환
$ apt install sudo #sudo 설치
$ dpkg -l | grep sudo #sudo 설치 여부 확인
$ mkdir /var/log/sudo #log file을 저장할 디렉토리 생성
$ export EDITOR=vim #EDITOR 환경 변수를 설정하여 visudo를 사용할 편집기를 vim으로 수정한다.
$ sudo -E visudo #visudo 명령어를 이용하여 /etc/sudoers 파일 변경 -E옵션을 이용해 sudo에서 현재 환경변수를 그대로 사용.
Defaults env_reset #기본 설정. sudo 권한으로 실행시 HOME, PATH, SHELL, TERM, USER를 제외한 모든 환경 변수를 reset시킨다. 현재 실행중인 환경 변수를 그대로 사용하자고 한다면 주석처리 하면 되지만, 더 안전한 env_keep이 권장된다.
Defaults mail_badpass #기본 설정. sudo를 실행중인 사용자가 잘못된 암호 입력시 malito 사용자에게 메일을 보낸다. 기본적으로 이 기능은 꺼져있다.
Defaults secure_path"/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin" #sudo로 실행되는 명령어 경로 제한.
Defaults passwd_tries=3 #sudo 비밀번호 시도 제한
Defaults badpass_message="Pa55w0rd i5 wr0ng, p1ea5e try a9ain" #잘못된 sudo 비밀번호 입력시 custom message 출력
Defaults authfail_message="Authenticati0n attempti0n i5 fai1ed, p1ea5e try a9ain" #연속으로 잘못된 비밀번호 입력으로 인증 실패시 custom message 출력
Defaults log_input, log_output #sudo 이용한 user input과 output을 저장. default I/O log dir은 /var/log/sudo-io
Defaults iolog_dir="/var/log/sudo/" #I/O log directory 변경
Defaults requiretty #사용자가 실제 tty로 로그인한 경우에만 실행을 허용한다.
서브젝트에서 요구하는대로 출력할 monitoring 스크립트를 만든다.
arc=$(uname -a)
pcpu=$(grep 'physical id' /proc/cpuinfo | sort -u | wc -l)
vcpu=$(grep 'processor' /proc/cpuinfo | wc -l)
fram=$(free -m | awk '$1 == "Mem:" {print $2}') #전체 메모리 용량
uram=$(free -m | awk '$1 == "Mem:" {print $3}') #사용중인 메모리 용량
pram=$(free | awk '$1 == "Mem:" {printf("%.2f"), $3/$2*100}') #백분율
fdisk=$(df -Bg | grep '^/dev/mapper' | awk '{ft += $2} END {print ft}') #전체 디스크 용량
udisk=$(df -Bm | grep '^/dev/mapper' | awk '{ut += $3} END {print ut}') #사용중인 디스크 용량
pdisk=$(df -Bm | grep '^/dev/mapper' | awk '{ut += $3} {ft+= $2} END {printf("%d"), ut/ft*100}') #백분율
cpul=$(mpstat | grep 'all' | awk '{printf("%.1f%%"), 100 - $13}')
lb=$(who -b | awk '$1 == "system" {print $3 " " $4}')
lvmu=$(if [ $(lsblk | grep lvm | wc -l) -gt 0 ]; then echo yes; else echo no; fi)
if [값1 조건 값2]; the 수행문 fi
이기 때문에 이에 맞춰 작성해준다.ctcp=$(ss -t | grep -i 'ESTAB' | wc -l | tr -d '\n')
ulog=$(users | wc -w)
ip=$(hostname -I)
mac=$(ip link | awk '$1 == "link/ether" {print $2}')
cmds=$(grep 'sudo:' /var/log/auth.log | grep 'COMMAND=' | wc -l | tr -d '\n')
마지막으로 wall명령어를 이용해 사용자의 터미널로 메세지를 보내준다.