SSH
1. SSH 서비스가 실행중인지 확인
2. 실행중일 경우 해당부분 스킵
3. 실행중이 아닐경우 SSH 실행
(정보)
여기서 에러가 났었는데 if 와 " [ " 를 붙이면 에러가 난다. 꼭 띄워쓰기를 해주자
ex) if[ ] -> 에러, if [ ] -> 정상
내가 만든 코드
if [ "$(service --status-all | grep ssh | grep +)" ]; then
ehco "service already actice"
else
service --status-all | grep ssh
sudo systemctl start ssh
echo "service active complete"
service --status-all | grep ssh
fi
강사님이 만든 코드
SSH_STATUS = "(systemctl status ssh | grep Active | awk '{print $2}')" if [ "active" != "{SSH_STATUS}" ]; then
echo "ssh service is not running"
else
service --status-all | grep ssh
sudo systemctl start ssh
echo "service active complete"
service --status-all | grep ssh
fi
쉘에서 먼저 확인해야할 사항들
전체 날짜 확인하기
timedatectl
타임존 확인하기
sudo timedatectl list-timezones
로컬날짜 맞추는법
sudo timedatectl set-timezone Asia/Seoul
현재 날짜 확인하기
date
정보보안
-물리적인 보안
-기술적인 보안
-관리적인 보안
정보보안 3요소: CIA ->
Confidentiality 기밀성 - 데이터에 접근할 때 허가받은 사람만 접근가능
Integrity 무결성 - 정보가 무단으로 변조되지 않음
Availabilty 가용성 - 필요할때 인가받은 사용자가 정보에 접근가능
ls /var/log 는 log정보들을 볼 수 있다.
대체로 apach, mail, vsftpd 등이 있다.
ls /etc/rsyslog.d 에는 파일이 있다.
그리고 50-default.conf에 어떤 로그를 남길것인지 설정되어있다.
로그메시지는
우선순위 - emerg응급(매우급함)/alert긴급/crit중대함/err오류/warning경고
/notice그냥/info정보/debug디버깅
기능명 - auth인증/daemon시스템데모/cron시간관련 무언가/kern커널/user사용자 프로세스
journalctl
-n 은 최근 로그내용 보기
-o 로그 상세 내용 보기(journalctl -n 1 -o verbose) 특정을 해줘야함
-f 로그 자동출력
-p 우선순위 필터링 출력
-b
--untill 시간으로 필터링
--since
-F 필드명으로 필터링 출력
클라이언트에서 서버로 접근할때 허용된 곳에서만 접근하거나 내가 알고있는 클라이언트만 접근하도록 설정한다.
ufw default allow - 기본전략(모두 허용)
ufw default deny - 기본전략(모두 거절)
sudo ufw allow 22/tcp -> 모두 deny한 상태에서 일부 포트만 열러주고싶을때 사용
rule 삭제하는 방법
sudo ufw allow ssh(22),ftp(21),http(80) 등 패키지명으로 사용할수있다.
프로세스마다 포트번호가 고정적으로 할당되어있을 경우 사용가능
방화벽 리셋하고 내 아이피만 열어주고 ssh접근하기
안될시 ufw 로그파일에 접근해서 어떤아이피로 서버에 접근하는지 확인해서 해당 아이피를 열어주면 된다.
ufw reset -y (방화벽 리셋)
ufw enable (방화벽 켜주기)
ufw default deny (방화벽 기본 거절 전략)
sudo tail -5 /var/log/ufw.log (ufw의 로그기록 확인) -> 여기서 src를 확인
ufw allow 10.0.2.2 to any port 22 (방화벽에서 해당 ip만 22번 포트 열어주기)
-성공-
'방화벽 기본설정 바꾸기
ufw default allow-deny
'룰 추가하기
ufw allow/deny ssh(22/tcp)
'룰 삭제하기
ufw delete allow ssh
'특정 아이피를 지정하는 룰
ufw allow/deny 10.0.2.2 to any port ssh
File System : 파일을 관리하는 방법
file에는 데이터 + 메타데이터(크기, 권한, 확장자)
file이 저장되는 방식
5KB짜리를 1KB방에 넣으려고 할때
1. 연속 : 12345방에 연속으로 넣는다.
장점: 찾기쉽다.
단점: 뒤에 방이 차있을때 앞에 데이터가 커지면 방을 다 옮겨야한다.
2. 연결 : 빈공간에 포인터를 통해 막 넣을 수 있다.
장점: 빈공간에 넣을 수 있다.
단점: 느림
3. 색인 : index를 가지고있는 테이블이 포인터를 통해 방을 찾음(리눅스에서 쓰는 방식/inode)
(정보)
file system에는 block group이 있는데 그 블록그룹에는
super block(파일전체에 대한 정보), inod block(메타데이터, index), data block(파일 데이터)이 있다.
추가로 더 있긴한데 위 세개가 일단 중요
VM에 하드디스크를 하나 추가를 하고
fdisk -l로 디스크 확인가능
방금 만든 하드디스크 파티션 나누기
fdisk /dev/sdb
m으로 메뉴 확인가능
n : 파티션 추가
- partition number: default 1
- irst sector : default 값 설정해ㄹ얀도됨
- last sector : sector를 설정해 줄 수있고 혹은 +2G로 공간 설정이 가능함
sector 설정하기 아니면 전체 공간 다 설정해버림
공간 설정후
w : 나가기
mkfs -t ext4 /dev/sdb2로 파일 설정
폴더에 할당된 파티션을 넣기
먼저 폴더를 생성하고
mount /dev/sdb2(파티션명) ~/mnt/pb2(폴더명)으로 폴더에 입력가능하다.
삭제하는 방법
umount /mnt/pb3
sudo apt list --installed | grep lvm2
PV 3ro LV 2개 만들기
pvcreate /dev/sdb1 /dev/sdb2 /dev/sdb3
pvscan
vgcreate grp1 /dev/sdb1 /dev/sdb2 /dev/sdb3
vgchange -a y grp1
vgdisplay -v grp1
lvcreate -l 248 grp1 -n mylv1
lvcreate -l 248 grp1 -n mylv2
하고 lv를 마운트하면됨
nohub
tail -5 : 로그 밑에서부터 5개 출력
tail -f : 계속 로그 추적
sh tail-test.sh & -> 백그라운드로 실행
apt update
apt install openjdk-11-jdk
timedatectl set-timezone Asia/Seoul
apt install git
git clone https://github.com/NomadHuns/aws-v2.git
aws-v2파일이 생기면 gradlew로 빌드를 함(실행파일을 만든다)
권한을 주고 chmod u+x gradlew
./gradlew clean build -> 이렇게 하면 빌드가 됨
jar파일을 찾아야함(cd /build/libs)
nohup java -jar -Dspring.profiles.active=prod ./aws-v2-0.0.1 jar 1>log.out 2>err.out
java -jar : jar 확장자 파일을 실행하는 명령어
-Dspring.profiles.active=prod : 스프링 배포환경을 prod로 설정
실행멈추는 명령어
: pgrep -f aws-v2-0.0.1.jar : 프로세스ID출력
kill-9 프로세스ID
위에 놈을 쉘로 만들어서 자동실행파일 만들기
APT UPDATE
sudo nano apt-get -y update 1>/dev/null
Install JDK
sudo nano apt-get -y install openjdk-11-jdk 1>/dev/null
Set Timezone
timedatectl set-timeone Asia/seoul
Install git
sudo apt-get -y install git 1>/dev/null
delete project
rm -rf ./aws-v2
clone project
git clone https://github.com/NomadHuns/aws-v2.git
move project
cd aws-v2
grant project
chmod u+x ./gradlew
Build project
./gradlew clean build
nohup java -jar -Dspring.profiles.active=prod ./aws-v2-0.0.1.jar 1>log.out 2>err.out
개선점
1. 로그 파일 위치 변경(경로 변경 하면 됨)
2. 불필요한 프로젝트 파일 삭제(jar 바깥으로 꺼내고 실행 후 프로젝트 폴더 삭제)
3. 주기적으로 프로젝트가 실행중인지 확인 필요(crontab/ deply.sh 실행X)
프로젝트가 실행중인지 체크하고 실행중이 아니라면 nohup으로 jar파일 재실행하는거
hint: 프로세스 체크하는 방법
pgrep -f aws-v2-0.0.1.jar 이 명령어를 치면 PID 나오면 프로세스가 실행중인 거임
프로세스 체크하고 실행하는 sh(check-and-restart.sh)를 하나더 생성해서 크론탭 해당 sh를 실행하는 명령어 입력
4. deploy.sh 실행시 이미 프로젝트가 실행중이라면 해당 프로세스 종료
kill -9 processID
hint: kill -9 $(pgrep -f aws-v2-0.0.1.jar)
* * * * * : (분 시 일 월 요일) - /요일은 0~7 0과 7은 일요일
1 * * * * sudo apt-get -y update : 매시간 1분경에 실행
* 1 * * * * sudo apt-get -y update : 매일1시에 1분마다 실행(60번)
0 1 * * * sudo apt-get -y update : 매일 1시 정각에 한번만 실행
0 3 * * 6 sudo apt-get -y update : 매주 토요일 오전 3시에 한번 실행