📒 Technical consideration
when
- 23.04.26 수 20:00 ~ 03:30
- 23.05.01 월 21:30 ~ 23:30
- 23.05.03 수 20:30 ~ 02:00
- 23.05.12 금 19:30 ~ 23:00
- 23.05.19 금 20:00 ~ 01:30
- 23.05.20 토 14:00 ~ 05:30
- 23.05.21 일 13:25 ~ 21:30
- 23.05.22 월 19:10 ~ 21:00 (평가)
| 내용 |
---|
제출 파일 | signature.txt |
signature.txt | 가상 디스크 이미지 파일의 signature 첨부 |
📌 General guideline
- VirtualBox를 통해 가상머신 생성하여 운영체제 구현
- Git repository의 root에 signature.txt 파일만 제출
- signature.txt : 가상 머신의 디스크 이미지 파일의 signature 붙여 넣기
- Signature 만들기 (VM이 저장된 기본 설치 폴더 열기)
- Windows: %HOMEDRIVE%%HOMEPATH%\VirtualBox VMs\
- Linux: ~/VirtualBox VMs/
- MacM1: ~/Library/Containers/com.utmapp.UTM/Data/Documents/
- MacOS: ~/VirtualBox VMs/
- 가상 머신의 ".vdi" 파일에서 signature를 sha1형식으로 검색
- Windows: certUtil -hashfile rocky_serv.vdi sha1
- Linux: sha1sum rocky_serv.vdi
- Mac M1: shasum rocky.utm/Images/disk-0.qcow2
- MacOS: shasum rocky_serv.vdi
- 받을 출력 예시
- 6e657c4619944be17df3c31faa030c25e43e40af
- 평가 후 가상 머신의 signaute이 바뀜 (가상 머신을 복제하거나 상태 저장 사용하기)
- Git repository에 가상 머신 제출하는 것 금지
- signature.txt파일에 있는 서명과 가상 머신의 서명이 동일해야함
📌 과제 목표
1) 가상 머신 사용법
2) 각 OS 차이점
3) 최소한의 설정 되어있는 리눅스 이용해 자신이 필요한 서비스 설치 후 이용
📒 Mandatory part
📕 1. 서버 구현
⚠️ 주의 사항
- 서버 구성이 목적이기 때문에, 최소한의 서비스만 설치해야 함
- 그래픽 인터페이스 사용 불가 (X.org 등)
📕 2. 운영체제 선택
⚠️ 주의 사항
- 최신 stable 버전인 Debian / Rocky 중 선택 (testing, unstable 제외)
- AppArmor가 실행 시 작동하고 있어야 함
📕 3. 암호화된 파티션 생성
- LVM 통해 최소 2개 이상의 암호화된 파티션 생성
![](https://velog.velcdn.com/images/24tngus/post/2b77102c-10b9-44e9-8b48-d28f2e65b870/image.png)
⚠️ 주의 사항
- SSH 서비스는 4242포트에서만 작동 (보안상의 이유로 root로는 SSH 연결 불가)
- SSH 방식은 평가를 진행하면서, 생성된 새 계정을 통해 테스트함
- UFW 방화벽을 운영체제에 구성하고, 4242 포트만 열기
- 가상 머신을 켰을 때, 방화벽 작동하고 있어야 함
⚠️ 주의 사항
- 가상 머신의 hostname : soohykim42 (평가 중 hostname 수정)
- 강력한 패스워드 정책 구현하기
- 엄격한 규칙에 따라서 sudo 설치 및 구성
- root 유저와 자신의 아이디 유저도 존재해야 함 (user42와 sudo 그룹에 속해있기)
1) new user 생성 및 그룹 가입
2) password 구성 요구사항
- password 기간
- password 30일마다 만료
- password 변경 후에 수정 가능한 최소 경과일 수는 2일
- user는 password 만료 7일 전에 경고 메시지 받기
- password 설정
- 대문자, 소문자, 숫자를 포함한 최소 10글자 이상
- 반복되는 글자가 3글자 초과인 경우x
- 유저의 이름 포함x
- 현재 password는 최소 7글자 이상이 이전 패스워드와 달라야 함 (root password는 적용x)
- root password에도 해당 규정 동일하게 적용
- 패스워드 구성 파일 설정 후에 root 계정 포함한 가상 머신에 있는 모든 비밀번호 바꾸기 !!
3) sudo 설치 및 구성
- sudo 사용하기 위한 인증
- 잘못된 비밀번호 입력의 경우 3번의 시도로 제한됨
- 잘못된 password로 인한 에러 발생 시 설정 메시지 출력
- sudo를 통한 모든 동작(입출력) 저장
- log파일들은 /var/log/sudo 폴더에 저장
- 보안상의 이유로, TTY 모드는 적용되어야 함
- sudo를 사용할 수 있는 경로는 제한됨
- 경로 예시 - /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin
📕 5. monitoring.sh 스크립트 작성
- 스크립트는 bash로 작성됨
- 서버 시작시, 스크립트는 아래 정보를 모든 터미널에 매10분마다 표시 (wall 잘 살펴보기)
- 배너는 선택사항
- 에러는 표시되지 않아야 함
1) 스크립트 표시할 정보
- (1) 운영체제와 커널의 버전에 대한 구조
- (2) physical 프로세서들의 수
- (3) virtual 프로세서들의 수
- (4) 현재 서버에서 사용 가능한 RAM과 사용률 퍼센트
- (5) 현재 서버에서 사용 가능한 memory와 사용률 퍼센트
- (6) 프로세서들의 현재 사용률 퍼센트
- (7) 마지막으로 재시작된 날짜와 시간
- (8) LVM의 활성화 여부
- (9) 활성화된 연결들의 개수
- (10) 서버를 사용하고 있는 유저의 개수
- (11) 서버의 IPv4 주소와 MAC 주소
- (12) sudo 프로그램으로 실행된 명령의 수
2) 스크립트 작동 예시
![](https://velog.velcdn.com/images/24tngus/post/cac465da-4446-449f-9a9b-a07f51abba4e/image.png)
![](https://velog.velcdn.com/images/24tngus/post/f192501c-a44f-4a58-adbe-35bde405bef6/image.png)
📌 스크립트 동작 방식
- 스크립트를 동작하지 않고 동작 중지시키기 (cron 잘 살펴보기)
📘 Virtual Box 세팅
1) virtual machine 설치
2) virtual machine에 ISO 마운트
3) virtual machine 설정
언어, 타임존 설정
- Install 선택 (CLI 모드)
![](https://velog.velcdn.com/images/24tngus/post/564b1908-3697-4895-a61f-367d859eb65a/image.png)
- 언어 설정
![](https://velog.velcdn.com/images/24tngus/post/f165645a-2218-42f8-ad05-86e438c0587e/image.png)
- 위치 설정
![](https://velog.velcdn.com/images/24tngus/post/1991b6d6-ff68-42f3-8e47-f5a8e0096f3c/image.png)
- Hostname 설정 (soohykim42)
- Domainname 설정 (공백)
![](https://velog.velcdn.com/images/24tngus/post/5960e98a-5ce2-4a69-b68b-1018295994e0/image.png)
- 비밀번호 설정
![](https://velog.velcdn.com/images/24tngus/post/52b02eb3-0314-46a6-9bb9-f0021d7ea5f9/image.png)
- new user 설정
![](https://velog.velcdn.com/images/24tngus/post/4439537c-ba8f-46d7-a561-61b7a8ec7ccd/image.png)
네트워크, 파티션 설정
- LVM 설정
- 전체 디스크 사용 및 암호화된 LVM
![](https://velog.velcdn.com/images/24tngus/post/6ae6f103-ec74-430f-a279-aa2e698477a7/image.png)
- 사용 디스크 선택
![](https://velog.velcdn.com/images/24tngus/post/78d247fa-e125-46e8-ab78-a15fbcb79ad5/image.png)
- 홈 디렉토리의 파티션 구분
![](https://velog.velcdn.com/images/24tngus/post/01d6b930-65fb-4327-9eaa-f9a083f45566/image.png)
- LVM 파티션 여부 선택
![](https://velog.velcdn.com/images/24tngus/post/2fcb1697-32c9-4398-9ca0-cc3c95a95c71/image.png)
- 파티션 디스크 용량 확인
![](https://velog.velcdn.com/images/24tngus/post/9058de12-f512-4dce-928c-30270d5a42aa/image.png)
- 파티션 되는 디스크 최종 설정
![](https://velog.velcdn.com/images/24tngus/post/22877209-e42a-4022-acab-cd0809e09d99/image.png)
- 디스크에 해당 내용 적용
![](https://velog.velcdn.com/images/24tngus/post/0f1f96ca-45b0-4157-aa9a-9c7f14eec1d1/image.png)
- 미디어 설치x
![](https://velog.velcdn.com/images/24tngus/post/ac6cfd88-62ae-464f-974a-ac4af459a8b3/image.png)
패키지 매니저, 소프트웨어 패키지, 부트로더 설정
- 패키지 매니저의 미러링 사이트 장소 선택 (현재 위치)
![](https://velog.velcdn.com/images/24tngus/post/325e7f6f-387c-4b78-8403-4ee59236feb9/image.png)
- 미러링 사이트 설정
![](https://velog.velcdn.com/images/24tngus/post/ce8439be-6fbf-4d9d-ab43-a111031295e6/image.png)
- 프록시 설정 (공백)
![](https://velog.velcdn.com/images/24tngus/post/43ad5a1e-e7c8-4122-9900-b047b2dc3c6d/image.png)
- 운영체제에 필요한 소프트웨어 패키지 설정
![](https://velog.velcdn.com/images/24tngus/post/4073543d-a2a0-465c-b6bb-164ee8f0fe76/image.png)
- 부트로더 설치
![](https://velog.velcdn.com/images/24tngus/post/b049d95e-68a3-454e-bb8b-b10a6bab8ed5/image.png)
- 부트로더 설치 위치 선택 (/dev/sda)
![](https://velog.velcdn.com/images/24tngus/post/944d29c8-209e-47c0-a141-a50b21203e8c/image.png)
📘 과제 구현
- 시작 화면 (disk unlock)
- 계정 로그인 (soohykim/soohykim)
![](https://velog.velcdn.com/images/24tngus/post/ff349f3f-6c1a-42b5-bde1-2ff7d87e8ab2/image.png)
1) sudo 설치 및 설정
-
sudo 설치를 위한 root 접속
su -
![](https://velog.velcdn.com/images/24tngus/post/16c68147-ca67-4955-a051-29188096d516/image.png)
-
dpkg 이용 sudo 설치
- sudo 설치 :
apt install sudo
![](https://velog.velcdn.com/images/24tngus/post/4357060b-3839-44bb-b04a-bdfd58d432db/image.png)
- sudo 설치 여부 확인 :
dpkg -l sudo
![](https://velog.velcdn.com/images/24tngus/post/a3d1a3d6-2fb0-4d15-8394-702a0028756b/image.png)
-
vim /etc/sudoers
파일 수정
visudo
: 문법체크 해줘서 실수 발생을 줄여줌, 읽기전용 파일이라 vi로 수정 안될 때 사용
-
sudo 규칙 설정
- sudo를 사용하기 위한 인증에서, 잘못된 비밀번호 입력의 경우 3번의 시도로 제한
- sudo 사용 중, 잘못된 패스워드로 인한 에러가 발생했을 때 설정한 메시지 출력
- sudo를 통한 모든 동작(입출력)은 저장되어야 함 (log파일은 /var/log/sudo 폴더에 저장)
- 보안적인 이유로 TTY 모드 적용
- 보안적인 이유로 sudo를 사용할 수 있는 경로 제한됨 (경로 예시)
Defaults env_reset
Defaults mail_badpass
Defaults passwd_tries=3 # sudo실행 횟수를 지정. default가 3
Defaults authfail_message="원하는 에러메세지" # sudo 인증 실패 시, 사용자 지정 메시지 출력
Defaults badpass_message="원하는 에러메세지" # sudo 비번 오류 시, 사용자 지정 메시지 출력
Defaults log_input # sudo명령어 실행 시 입력된 명령어 log로 저장
Defaults log_output # sudo명령어 실행 시 출력 결과를 log로 저장
Defaults iolog_dir="/var/log/sudo/" # sudo log 저장 디렉토리 설정
Defaults requiretty # sudo명령어 실행 시 tty강제
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
![](https://velog.velcdn.com/images/24tngus/post/1048e19e-7b6d-4bd0-88ae-5c3a459ab911/image.png)
-
계정명 ALL=(ALL:ALL) ALL
추가
![](https://velog.velcdn.com/images/24tngus/post/09d5fc28-d1b7-422a-ae88-49e7330b8b7a/image.png)
-
📌 secure_path 설정 이유
- sudo 명령 실행 시 현재 계정의 쉘이 아닌 새로운 쉘을 생성하여 그 안에서 명령을 실행
- 명령을 찾을 경로를 나열한 환경변수인 PATH값이 secure_path 트로이목마 해킹 공격에 대한 일차적인 방어 기능 제공함
- 사용자의 부주의로 인해 현재 계정의 경로에 악의적인 경로가 포함된 경우를 무시함으로써 sudo 통한 전체 시스템 해킹 방지.
2) 그룹 설정
-
그룹명 추가 : groupadd user42
![](https://velog.velcdn.com/images/24tngus/post/af1f1635-503d-4c61-83ca-57022423158f/image.png)
-
사용자를 sudo,user42그룹에 추가 : usermod -aG sudo,user42 soohykim
-
사용자가 user42를 primary그룹으로 지정 : usermod -g user42 soohykim
![](https://velog.velcdn.com/images/24tngus/post/bc8ee3dd-2e8f-4f14-a4ee-f0de4417397c/image.png)
3) vim 설치 및 Apparmor 설정
-
vim 설치 : sudo apt install vim
-
apparmor 설치 : sudo apt install apparmor
-
apparmor 설치 여부 확인 : sudo dpkg -l apparmor
-
apparmor-utils 설치 : sudo apt install apparmor-utils
-
apparmor 적용여부 확인 : aa-enabled
4) UFW 설정
-
UFW 설치 : sudo apt install ufw
-
UFW 상태 확인 (기본값 inactive) : sudo ufw status verbose
-
UFW가 부팅시 실행 : sudo ufw enable
-
UFW 기본 설정값 deny로 설정 : sudo ufw default deny
-
4242포트 연결 허용 : sudo ufw allow 4242
-
설정 후 UFW 상태 확인
5) DHCP 해제 및 SSH 설정
-
ip 주소 확인 : ip addr
-
게이트웨이 주소 확인 : ip route
-
네트워크 설정파일 열기 : sudo vim /etc/network/interfaces
- 수정 전
![](https://velog.velcdn.com/images/24tngus/post/aa8a79df-800a-4ce9-9a30-2cb67cac4cf5/image.png)
- 수정 후 (DHCP의 설정 해제하고, 설정 변경)
![](https://velog.velcdn.com/images/24tngus/post/cf5a21e5-a326-4b33-9692-8be45487c141/image.png)
-
DHCP 설정 포트 확인 : ss -tunpl
- 4242 port 확인
![](https://velog.velcdn.com/images/24tngus/post/49e93bd8-6f49-4685-92ec-c2d52ab02711/image.png)
-
ssh 상태 확인 : systemctl status ssh
-
server측의 ssh 설정파일 열기 : sudo vim /etc/ssh/sshd_config
- 수정 전
![](https://velog.velcdn.com/images/24tngus/post/d047979e-5707-4936-a1fe-39a3f3f0cbfd/image.png)
- 수정 후 (port 설정, root로그인 차단 설정)
![](https://velog.velcdn.com/images/24tngus/post/a05a8da0-f915-4dc9-9606-e25aa703d8c8/image.png)
-
ssh 재시작 : sudo systemctl restart ssh
-
로컬 IP 주소 (가상 머신의 IP) 확인
- 게스트(Virtualbox의 가상머신) ip의 기본값 : 10.0.2.15
- ifconfig 대신 ip로 명령어 통합 :
ip address
![](https://velog.velcdn.com/images/24tngus/post/3a6f4ab7-1f28-4c35-ac9f-2b5bb57a5d08/image.png)
- ifconfig 사용하려면 net-tools 설치 :
sudo apt-get install net-tools
![](https://velog.velcdn.com/images/24tngus/post/7db46ec2-9163-433f-ab41-50d2c7aed425/image.png)
ifconfig
![](https://velog.velcdn.com/images/24tngus/post/e04eddaa-530c-4c81-ba4d-25171b4b7d0d/image.png)
hostname -I
: ![](https://velog.velcdn.com/images/24tngus/post/cb02e562-4aa7-49c2-9637-70f6965a2ab6/image.png)
-
호스트(iMac) ip 확인 : ifconfig
or ipconfig getifaddr en0
![](https://velog.velcdn.com/images/24tngus/post/7d9a9130-7500-4131-b6c0-f819f86562e5/image.png)
-
Port Forwarding (설정 -> 네트워크)![](https://velog.velcdn.com/images/24tngus/post/0987cd58-18a6-440e-9013-f36efde76738/image.png)
- 추가
![](https://velog.velcdn.com/images/24tngus/post/b76238e4-a8a0-4623-8951-4ec9d9335902/image.png)
(호스트 IP로 4242포트로 접속해서 Guest IP + 4242 포트로 연결)
-
접속 확인 : ssh soohykim@10.31.5.1 -p 4242
![](https://velog.velcdn.com/images/24tngus/post/75a322a7-540b-4449-bb35-c8a2e7d6c969/image.png)
6) 비밀번호 정책 설정
-
특정 계정 설정 : sudo chage -M 30 -m 2 -W 7 soohykim
![](https://velog.velcdn.com/images/24tngus/post/7b6a3550-6e16-414c-8a43-a2885953b6a5/image.png)
-
root 계정 설정 : sudo chage -M 30 -m 2 -W 7 root
-
전체 계정 설정 : sudo vi /etc/login.defs
- 수정 전
![](https://velog.velcdn.com/images/24tngus/post/aa6bc706-e2fb-4731-9a9c-78293a5188c3/image.png)
- 수정 후 (MAX_DAYS, MIN_DAYS, WARN_AGE 변경)
![](https://velog.velcdn.com/images/24tngus/post/eac61d35-f3ae-4a39-82e1-dc6b2ecbde4e/image.png)
-
접속 계정에 대한 패스워드 정책 정보 확인 : chage -l soohykim
![](https://velog.velcdn.com/images/24tngus/post/64242707-9632-42c5-a707-4a8473a967e8/image.png)
-
📌 chage
- 계정의 암호와 사용기간을 관리
- 암호만료일을 통해 암호를 무한정 쓸지, 일정기간 계속 바꾸게 할 지 정할 수 있음
- 계정만료일이 지나면 그 이후 로그인을 할 수 없음
- 암호만료일 n일 전부터 암호변경을 요구하는 메시지를 알리고, 암호만료 후 유예기간을 둘 수 있음
-
비밀번호 정책 설정을 위한 libpam-pwquality 설치 : apt install libpam-pwquality
![](https://velog.velcdn.com/images/24tngus/post/984abab8-ab31-4647-b1a5-ff6c95b9b5b9/image.png)
-
전체 유저에 대한 정책 설정 :sudo vim /etc/pam.d/common-password
- 수정 전
![](https://velog.velcdn.com/images/24tngus/post/770d54d8-8790-4b3b-89da-33f24525ae95/image.png)
- 수정 후 (설정 변경)
![](https://velog.velcdn.com/images/24tngus/post/32e85aa3-ee7f-4f2c-b271-e947548c73a0/image.png)
- retry=
N
: 암호입력을 N회로 설정
- minlen=
N
: 암호의 최소 길이는 N
- difok=
N
: 기존 패스워드와 달라야하는 문자 수 N (root 제외)
- uncredit=
-N
: 대문자 N개 이상 (N양수 - 대문자로 얻을 수 있는 최대 개수, N음수 - 대문자 최소 개수)
- lcredit=
-N
: 소문자 N개 이상
- decredit=
-N
: 숫자 N개 이상
- reject_username : 사용자 이름이 그대로 혹은 뒤집혀 패스워드에 있는지 검사
- enforce_for_root : root 사용자가 패스워드를 바꾸려 할 때에도 위 조건 적용 (root에게 이전 패스워드를 묻지 않으므로 이전 패스워드와 새 패스워드 비교 검사 안함)
- maxrepeat=
N
: 같은 문자가 N번 이상 연속해서 나오는지 검사
-
📌 passwd
- passwd : 현재 사용자의 비밀번호 변경
- sudo passwd : 일시적으로 관리자로 동작하는 상태에서 사용자 비밀번호 변경 (관리자 비밀번호 변경)
- passwd -e : (관리자로 로그인한 경우에만 실행가능) 현재 상용자의 비밀번호를 만료시키고, 다음 로그인시 신규 비밀번호 설정
7) hostname 및 partitioning 설정
8) Monitoring.sh
-
cron 설치 여부 확인 : `ps -ef | grep cron' ![](https://velog.velcdn.com/images/24tngus/post/ef6f59f1-ae9b-4731-98f6-895d07b1c738/image.png)
-
cron 시작 : sudo systemctl start cron
![](https://velog.velcdn.com/images/24tngus/post/1c322fb3-6409-4eb8-a4b4-43e70c0145a5/image.png)
-
sysstat 설치 : sudo apt-get install sysstat
![](https://velog.velcdn.com/images/24tngus/post/0ffb46e9-1666-401b-a3f8-900e52c6ca49/image.png)
-
monitoring.sh를 cron으로 일정 시간마다 실행 : usermod -aG systemd-journal soohykim
![](https://velog.velcdn.com/images/24tngus/post/fdab9813-220a-4fef-a6e5-113375e92852/image.png)
-
monitoring.sh 파일 생성
- #Architecture (운영체제와 커널의 버전에 대한 구조)
uname -a
(-a : 모든 정보)
- #CPU physical (물리 프로세서들의 수) :
cat /proc/cpuinfo | grep 'cpu cores' | awk '{print $4}
- nproc : 현재 사용가능한 프로세스 unit의 개수
- #vCPU (가상 프로세서들의 수) :
lscpu | grep '^CPU(s)' | awk '{print $2}'
- lscpu : 현재 시스템의 CPU 정보를 보여주는 명령어
- #Memory Usage (현재 서버에서 사용 가능한 RAM과 백분율로 표현된 사용률) :
free --mega | grep Mem | awk '{printf "%d/%dMB (%.2f%%)\n", $3, $2, $3/$2 * 100}'
- $2 : memory total
- $3 : memory used
- #Disk Usage (현재 서버에서 사용 가능한 memory와 백분율로 표현된 사용률)
df -a -BM | grep /dev/mapper | awk '{sum+=$3}END{printf sum}
printf "/"
df -a -BM | grep /dev/mapper | awk '{sum+=$2}END{printf sum}
printf "MB ("
- `df -a -BM | grep /dev/mapper | awk '{sum1+=$3 ; sum2+=$2}END{printf "%d%%)\n", sum1 / sum2 * 100}'
- #CPU load (백분율로 표현된 프로세서들의 현재 사용률) :
mpstat | grep all | awk '{printf "%.2f%%\n", 100-$13}
- #Last boot (마지막으로 재시작된 날짜와 시간) :
who -b | awk '{print $3, $4}
- #LVM use (LVM 활성화 여부) :
if [ "$(lsblk | grep lvm | wc -l) " -eq 0 ] ; then printf "no\n" ; else printf "yes\n" ; fi
- #Connectios TCP (활성화된 연결들의 개수)
ss -tunpl | grep tcp | wc -l | tr -d '\n'
- `printf "ESTABLISHED\n"
- #User log (서버를 사용하고 있는 유저의 수) :
who | wc -l
- #Network (서버의 IPv4 주소와 MAC 주소) IP
hostname -I | tr -d '\n'
- `printf "("
- `ip address | grep ether | awk '{printf $2}'
printf ")\n"
- #Sudo (sudo 프로그램으로 실행된 명령의 수)
- journalctl _COMM=sudo | grep COMMAND | wc -l | tr -d '\n'
- `printf "cmd\n"
![](https://velog.velcdn.com/images/24tngus/post/465b21aa-9c78-48be-9681-2524773322f1/image.png)
- = CPU의 코어 개수
- 코어 : 물리적인 CPU 프로세서 (프로그램 실행시 실제로 일하는 역할)
nproc --all
또는cat /proc/cpuinfo | grep 'cpu cores' | awk 'printf $4}'
확인 가능 (Number of installed Processors on your system)
- = CPU의 쓰레드 개수
- 가상CPU : 가상 머신에 할당되는 CPU (기본적으로 1개 할당)
- (thread X core) X physical CPU = vCPU 개수
- 코어당 제공하는 처리 스레드 수에 점유된 소켓 수 곱함
lscpu | grep '^CPU(s)' | awk '{print $2}'
![](https://velog.velcdn.com/images/24tngus/post/aaf800db-1ddd-4f36-999d-61cc20e6d882/image.png)
- /proc/meminfo 에서 시스템 메모리 사용량 확인
- 정보
- total : 설치된 총 메모리 크기, 설정된 스왑 총 크기
- used : total에서 free, buff/cache를 뺀 사용중인 메모리
- free : total에서 used, buff/chace를 뺀 실제 사용 가능한 메모리 용량
- shared : tmpfs(메모리 파일 시스템), ramfs 등 사용되는 공유 메모리
- buffer/cache : 커널 버퍼로 사용중인 메모리 + 페이지 캐시와 slab으로 사용중인 메모리
- available : swapping 없이 새로운 프로세스 할당 가능한 메모리 예상 크기
- 옵션
- h : 사람이 읽기 쉬운 단위로 출력
- b, k, m, g : 바이트, 키비바이트, 메비바이트, 기비바이트
- kilo, mega, giga, tera, peta : 킬로바이트, 메가바이트, 기가바이트, 테라바이트, 페타바이트
![](https://velog.velcdn.com/images/24tngus/post/839c6cad-e3e2-4f48-bb51-021e7bbdc9c1/image.png)
📒 Disk Usage
- df : 남은 용량 확인
- a : 모든 파일 시스템 출력
- k : 킬로 바이트 단위로 남은 용량 확인
- m : 메가 바이트 단위로 남은 용량 확인
- du : 현재 directory의 사용량 확인 (서브 디렉토리 포함)
- a : 현재 디렉토리의 사용량 파일 단위로 출력
- s : 총 사용량
- h : 읽기 쉽게 출력
- sh* : 한단계 서브 디렉토리 기준으로 보여줌
![](https://velog.velcdn.com/images/24tngus/post/0d507b2e-da29-4f9f-9ed4-abbb9adad4c2/image.png)
- 텍스트 파일을 조회/필터링/가공 출력하는 프로그램
- 필드 추출 : $1
- BEGIN, END 명령어
- CPU와 core별로 사용율을 모니터링할 때 사용되는 명령어
- 정보
- 04:43:36 PM : mpstat이 수행된 시간
-CPU : all (모든 cpu)
- %usr : 사용자 레벨(애플리케이션)이 사용한 CPU 사용율
- %nice : nice 우선순위와 함께 사용자 레벨에서 수행된 CPU 사용율
- %sys : 시스템 레벨(커널)에서 사용한 CPU 사용율
- %iowait : I/O 처리 때문에 기다리는 CPU 시간 백분율
- %irq : H/W 인터럽트를 서비스하기 위해 사용되는 CPU 사용율
- %soft : S/W 인터럽트를 서비스하기 위해 사용되는 CPU 사용율
- %steal : 하이퍼바이저가 다른 가상프로세서에 의해 서비스될 때 기다리는 CPU 시간 백분율
- %guest : 가상 프로세서가 실행하기 위해 사용되는 CPU 사용율
- %idle : 유휴시간의 CPU 사용률 (CPU가 미사용 상태였던 시간 비율)
![](https://velog.velcdn.com/images/24tngus/post/da04f4c4-2f69-47c0-a7f5-aa3e8d09f671/image.png)
- 리눅스 서버가 재부팅되거나 shutdown된 시간 조회
last reboot
: 마지막으로 시스템을 재부팅한 시간이 언제인지 최신순으로 정렬해서 출력
who -b
: 마지막 시스템 부팅 시간 표시
![](https://velog.velcdn.com/images/24tngus/post/bdc83ade-eed5-423b-9670-78752f65482b/image.png)
📒 journalctl
📒 cron
- 반복적으로 어떤 작업을 자동 수행해주는 명령어
- 시간 기반 job scheduler형 daemon 프로세스 (시스템 크론/사용자 크론)
- crontab : cron 작업 설정 파일 (/etc/crontab 파일 정보)
- daemon : 사용자가 직접 제어하지 않아도 백그라운드에서 여러 작업 해주는 프로그램
m
분 h
시 dom
일 mon
월 dow
요일 user
사용자 command
실행명령
📒 wall
- 시스템에 로그인한 모든 사용자에게 메시지를 broadcast 역할 (관리자 권한 필요)
- 컴퓨터 파일과 표준입력을 로그인 된 모든 사용자에게 보여줌
📕 cron
-
crontab 열기 : sudo crontab -e
![](https://velog.velcdn.com/images/24tngus/post/2a8ab026-73fe-4751-b891-df8604a3f9d0/image.png)
-
해당 정보 입력 후 저장 : */10 * * * * ~/monitoring.sh | wall
![](https://velog.velcdn.com/images/24tngus/post/c188ab30-b24d-41b4-8ff1-f44be67ba043/image.png)
-
작동 확인 : sh monitoring.sh
or ./monitoring.sh
![](https://velog.velcdn.com/images/24tngus/post/c8fc08ec-211a-4bf4-97a7-ef882514bc9c/image.png)
-
자동 작동 확인
- 오류 (
crontab -e
에서 monitoring 경로 설정 다시하기, chmod 권한 설정)
![](https://velog.velcdn.com/images/24tngus/post/83b9342c-5a1b-46e5-95ce-a2997236129b/image.png)
- 성공
9) 과제 제출
- 제출할 git 폴더에 signaute.txt 파일 생성
shasum deb_b2b.vdi | awk '{print $1}'
이용하여 해시값 저장
- 제출한 signature 파일과 vdi 해시값을 diff 를 이용하여 비교
📒 Bonus part
📕 내용
-
아래 구조처럼 파티션 구성![](https://velog.velcdn.com/images/24tngus/post/447a4a88-4b6c-4a7d-87a1-ad1601c79b93/image.png)
-
lighttpd, MariaDB, PHP를 이용해서 WordPress로 기능을 갖춘 웹사이트 구성
-
NGINX, Apache2를 제외하고 유용한 서비스를 구성
(UFW/Firewalld 규칙에 맞춰 필요한 포트 더 열기 가능)