특정한 규칙을 가진 VirtualBox (또는 UTM) 머신을 만들어보는 프로젝트
Hypervisor
(가상 머신을 생성하고 구동하는 소프트웨어)비용 절감
여러 가상 환경을 하나의 인프라(하드웨어)에서 설치하기에 물리적 인프라 설치 공간을 줄일 수 있게 됨. 이때문에 많은 서버를 유지 보수하지 않아도 되고 많은 전력을 사용할 필요가 없어 비용을 줄이는 데 도움이 된다.
간편함+속도
새로운 환경(OS)을 구동하려는 경우 새 환경 전체(물리적 서버 포함)를 준비하는 것 보다 빠르고 간편함.
downtime의 최소화
VM
은 호스트가 예기치 않게 중단될 경우 다른 물리적 서버의 Hypervisor
(가상 머신을 생성하고 구동하는 소프트웨어)로 이전 가능.
sudo 설정 등 설정 후에 명령어가 먹지 않는다면, 로그아웃 후 재 로그인하여 실행
su -
명령어를 통해 root 계정으로 이동.dpkg -l sudo
apt install sudo
visudo
/snap/bin
추가secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
sudo 명령 실행 시 현재 계정의 쉘이 아닌 새로운 쉘을 생성하고 그 안에서 명령을 실행하는데, 이 때 명령을 찾을 경로를 나열한 환경변수인 PATH값이 바로 secure_path
트로이목마 해킹 공격에 대한 일차적인 방어 기능을 제공. (사용자의 부주의로 현재 계정의 PATH에 악의적인 경로가 포함된 경우, 이를 무시함으로써 sudo를 통한 전체 시스템에 해킹되는 경우를 방지)
Defaults authfail_message="원하는 에러메세지" #권한 획득 실패 시 출력 (sudo 인증 실패 시)
Defaults badpass_message="원하는 에러메세지" #sudo 인증에서 비밀번호 틀리면 출력
Defaults log_input #sudo 명령어 실행 시 입력된 명령어 log로 저장
Defaults log_output #sudo 명령어 실행 시 출력 결과를 log로 저장
Defaults requiretty #sudo 명령어 실행 시 tty강제
## tty는 리눅스 환경에서 콘솔이나 터미널을 의미. 따라서 현재 셀이 tty일 때만 sudo 가능
Defaults iolog_dir="/var/log/sudo/" #sudo log 저장 디렉토리 설정
Defaults passwd_tries=3 #sudo 패스워드 실행 횟수를 지정. default는 3
ctr + X
를 누른 후 Y
를 눌러 나가기/var/log/sudo/00/00
에서 log 확인a 옵션:
G 옵션에서만 함께 쓰일 수 있고, G옵션만 붙었을 때와 달리, 유저가 속해있지만 명령어에 나열되어있지 않는 그룹에 관하여 탈퇴처리 되지 않는다.
꼭 필요한 포트만 열고 내부 비공개 서비스포트는 기본값이 아닌 임의 포트로 변경해야 함.
네트워크 프로토콜중 하나로 컴퓨터와 컴퓨터가 인터넷과 같은 네트워크를 통해 통신할 때 안전하게 통신하기 위해 사용하는 프로토콜 (ex 데이터 전송, 원격 제어)
ssh는 통신을위해 접속할 때에 일반적인 비밀번호가 아닌 한쌍의 KEY를 사용하여 인증과정을 거침.
public key를 통해 암호화를 하게되고, 본인의 컴퓨터에 저장되어있는 private key를 사용해 복호화
apt search openssh-server
apt install open ssh-server
systemctl status ssh
sudo vim /etc/ssh/sshd_config
sudo systemctl restart ssh
<계정이름>@<내 ip주소> -p < Host Port번호>
ssh로 접속 (포트번호는 들어가는 host 포트, ufw에서 설정하는 포트는 guest port)
클러스터 환경에서는 포트포워딩을 해주어야 접속 가능
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옵션을 통해 서브젝트에서 요구하는 패스워드 만료 관련 정책들을 변경
위 방법은 나의 계정만 정책을 변경시킴.
vi /etc/pam.d/common-password
sudo apt install libpam-pwquality
따라서 보안 강화의 개념으로 lcredit=-1 추가
vi /etc/login.defs
passwd -e <사용자명>
특정한시간 또는 특정 시간마다 어떤 작업을 수행하게하는 명령어
sudo systemctl disable cron
>> /dev/null 2>&1
/dev/null은 어떤 데이터를 보내든 블랙홀로써 전부 버려질 것
2 는 표준 에러를 뜻하는 파일 디스크립터(file descriptor)
> 는 리다이렉트(redirect)를 위한 것
& 파일 디스크립터를 뜻하는 심볼(이 기호가 없으면 다음 1 은 파일 이름으로 간주)
1 은 표준 출력을 뜻하는 파일 디스크립터(file descriptor)
그러므로 >/dev/null 2>&1 는 프로그램의 출력을 /dev/null로 보냄.(redirect)
보낼 때 표준 에러와 표준 출력이 포함. 따라서 에러는 cron에서 실행할 때 출력하지 않음.
# os 아키텍처, 커널 버전
printf "#Architecture: "
uname -a
# 시스템 정보를 출력하는 uname과 모든 정보를 출력하는 -a 옵션 사용
# 물리 프로세서 개수
printf "#CPU physical : "
cat /proc/cpuinfo | grep "physical id" | wc -l
# /proc/cpuinfo 파일은 CPU 코어의 세부사항에 대한 정보를 가지고 있으며
# physical id가 적힌 라인을 추출하고 줄 수를 카운트하여 개수를 알아냄
# 가상 프로세서 개수
printf "#vCPU : "
cat /proc/cpuinfo | grep "processor" | wc -l
# 프로세서가 적힌 라인을 추출하고 줄 수를 카운트하여 개수를 알아냄
# 서버에 사용 가능한 ram, 사용중인 비율 퍼센트
printf "#Memory Usage: "
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번째까지'%') 를 출력해줌
# awk는 레코드 선택하는 명령어:
# The available memory on your server and its utilization rate as a percentage.
printf "#Disk Usage: "
df -a -BMB | grep /dev/map | awk '{sum+=$3}END{print sum}' | tr -d '\n'
printf "/"
# 리눅스 내 디스크 메모리 현황을 MB단위로 보는 df -BM에서 사용 부분을 추출하고
# 각 라인들의 3번째 값(used)를 합한 값을 출력하는데 \n은 제외
df -a -BMB | grep /dev/map | awk '{sum+=$4}END{print sum}' | tr -d '\n'
printf "MB ("
# 리눅스 내 디스크 메모리 현황을 MB단위로 보는 df -BM에서 사용 부분을 추출하고
# 각 라인들의 4번째 값(Available)d을 합한 값을 출력하는데 \n은 제외
# 단위 출력
df -a -BMB | grep /dev/map | awk '{sum1+=$3 ; sum2+=$4 }END{printf "%d", sum1 / sum2 * 100}' | tr -d '\n'
printf "%%)\n"
# (used) / (Available) 값을 % 붙여서 백분율로 나타냄
# The utilization rate of your processors as a percentage.
printf "#CPU load: "
mpstat | grep all | awk '{printf "%.2f%%\n", 100-$13}'
# sudo apt-get install sysstat
# 자원에 대한 모니터링을 도와주는 유틸리티인 sysstat의 mpstat 명령어를 사용하기 위해 sysstat 설치
# cpu 사용량을 모니터링하는 mpstat의 마지막 컬럼인 idle값(13번째)을 100에서 뺌
# 마지막 reboot의 날짜와 시간
printf "#Last boot: "
who -b | awk '{printf $3" "$4"\n"}'
# 호스트에 로그인한 사용자 정보를 보는 who의 마지막 부팅 시간을 보는 -b를 사용하고
# 날짜인 3번째 값과 시간인 4번째 값을 사용
# LVM이 작동하는지 아닌지
printf "#LVM use: "
lsblk | grep 'lvm' | wc -l | awk '{if($1>0)print"yes";else print"no"}'
# 파티션 정보를 출력하는 lsblk에서 타입이 lvm인 부분을 추출한 뒤 라인 수를 구하고
# 그것이 0 이상이라면 파티셔닝 된 것이니 yes를 출력, 0보다 작다면 no를 출력
# 작동중인 연결의 개수
printf "#Connections TCP : "
ss | grep tcp | wc -l | tr -d '\n'
printf " ESTABLISHED\n"
# ss 명령어로 네트워크 상태를 보고 grep을 통해 tcp의 연결 상태를 확인, 줄 수를 출력
# 서버를 이용하고 있는 사용자의 수
printf "#User log: "
who | wc -l
# 호스트에 로그인 한 사용자 정보를 출력하는 who에서 라인의 개수를 출력
# 서버의 ipv4 주소, mac 주소
printf "#Network: IP "
hostname -I | tr -d '\n'
# IPv4 주소 출력
ip link | grep link/ether | awk '{print"("$2")"}' | sed '2, $d'
ip link show | awk '$1 == "link/ether" {print $2}' | sed '2, $d' | tr -d '\n'
# ip link의 link/ether 부분에 있는 MAC 주소를 괄호에 넣고 출력
# sudo를 이용한 명령의 개수
printf "#Sudo : "
ls /var/log/sudo/*/* | wc -l | tr -d '\n'
# sudo로 실행한 커맨드의 log가 저장되는 sudo 폴더 내의 log 폴더가 몇 개 있는지 확인
printf " cmd\n"