Debian 및 VirtualBox 세팅
- 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
- 트로이목마 해킹공격에 일차적인 방어기능 제공
- 현재 계정의 PATH에 악의적 경로가 포함된 경우 이를 무시하여 sudo를 통한 전체 시스템이 해킹되는 경우를 방지함
iptable
- 시스템 관리자가 리눅스 커널 방화벽이 제공하는 테이블과 그것들을 저장하는 체인, 규칙들을 구성할 수 있게 해주는 사용자 공간 응용프로그램
방화벽
- 보안이 필요한 네트워크의 통로를 단일화하여 외부의 불법 침입으로부터 정보자산을 보호하기위한 시스템
- 접근제어를 제공하기 위해 외부, 내부망의 구성을 위한 별개의 네트워크를 가짐
- 바이러스와 같은 맬웨어 형태로 존재하는 위협은 방어x
SSH
네트워크 프로토콜중 하나로 컴퓨터와 컴퓨터가 인터넷과 같은 네트워크를 통해 통신할 때 안전하게 통신하기 위해 사용하는 프로토콜 (ex 데이터전송, 원격제어)
- ssh는 통신을위해 접속할때에 일반적인 비밀번호가 아닌 한쌍의 KEY를 사용하여 인증과정을 거침.
- public key를 통해 암호화를 하게되고, 본인의 컴퓨터에 저장되어있는 private key를 사용해 복호화하게됨
- Port 22 라 되어있는부분을 Port 4242로 수정
(ssh포트 기본인 22번포트 연결을 4242포트로 변경)- PermitRootLogin 부분을 No로 변경
(외부에서 root으로 로그인하는것을 막음)- sudo systemctl restart ssh
ssh를 재시작하여 설정을 적용
(4242포트로 변경됨)
포트포워딩
클러스터 환경에서는 포트포워딩을 해주어야 접속 가능
- 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 <사용자명>
사용자의 비밀번호를 변경함 (로그아웃후 재 로그인시 비밀번호 변경)
파티션
어떤 하나의 공간을 여러개로 나누는것
- 사용하던 중에는 디스크의 공간을 늘릴 수 없음
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
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
-system disable cron
시작시 실행안됨
아키텍쳐와 커널버젼
- 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폴더가 몇개 있는지 확인해줌