16일차 - 리눅스 (OpenSSH, 스케줄링)

Jk Lim·2023년 5월 2일
0

MLOps 부트캠프

목록 보기
15/34

16일차는

  1. OpenSSH와
  2. 스케줄링에 대해 학습하였다.

1. OpenSSH

  • sshd 가 서버에서 데몬으로 돌아감 (d로 끝나면 대부분 서버 프로세스 - 데몬)
  • SSH는 22번 포트를 사용 : 서버에서 프로그램을 실행할 때 메모리에 데이터가 올라감, 프로세스. → 소켓을 생성 (전화기) → 포트와 연결 (전화번호)

(1) 암호화 이론

  • 대표적으로 SSH, SSL(평문을 암호화 - HTTP, FTS 등을 암호화), HTTPS (HTTP를 SSL로 암호화)

암호화의 종류
1. 일방향 암호화 : 암호화 O, 복호화 X (md4, md5, sha …)
 용도 : 데이터 무결성 체크, 데이터 암호화해서 저장
 etc/shadow : 계정별 패스워드를 암호화해서 저장하고 있는 파일 (sha256 방식 사용)
2. 양방향 암호화 : 암호화 O, 복호화 O
 (a) 대칭키 암호화 (세션키, 비밀키 암호화)
  - 키가 1개 : 암호화키 = 복호화키
  - 키전달문제(키분배문제)
 (b) 비대칭키 암호화 (공개키, 개인키 암호화)
  - 키가 2개 : 암호화키 ≠ 복호화키
  - 키전달문제를 해결
  - 키 : 데이터를 암호화하고 복호화 할 때 사용
  - 공개키로 암호화 한 것은 개인키로 해독 가능
  - 개인키로 암호화 한 것은 공개키로 해독 가능
  - 공개키는 전 세계 누구에게나 줄 수 있고, 개인키는 절대 누구에게도 줄 수 없다.

  • 개인 식별 기능 (신원확인 기능)
    예) 서버가 자신의 개인키로 데이터를 암호화. 그것을 서버의 공개키로 복호화 하면 개인키는 오직 서버 자신만 가지고 있기 때문에 누가 이 데이터를 암호화 했는지 알 수 있음.

(2) SSH

ssh v1
ssh v2 → 디피 헬만 알고리즘

  • netstat -an | grep :22 또는 ps -df | grep ssh 으로 SSH 서버 열린 것 확인 가능
  • etc/ssh/ sshd_config는 서버쪽 설정 파일, ssh_config는 클라이언트쪽 설정 파일
  • ssh 서버 처음 접속할 때, 서버로부터 서버의 공개키를 받음. 클라이언트가 대칭키를 만듬. 공개키로 대칭키를 암호화. 암호화 한 대칭키를 서버로 전달.(키 전달문제 해결)

ssh 로그인 방법

  1. 패스워드 인증
  2. 키 인증 → 편리하고 안전한 방식

키 기반 인증 실습

  1. ssh-keygen : 내(클라이언트) 개인키와 공개키 생성
  2. 기본 경로로 설정, 패스워드 미설정
  3. .ssh라는 숨김파일 생성됨 > id_rsa : 개인키 / id_rsa.pub : 공개키
  4. 클라이언트의 공개키를 서버에 전달하면 됨 (ssh-copy-id user@192.168.56.101)
  5. 한 번 키를 등록하면 그 다음부터는 비밀번호 인증 없이 가능
  6. 서버의 .ssh 폴더에 authorized_keys에 등록된 내용과 클라이언트 .ssh 폴더 id_rsa.pub 내용과 동일

(3) scp, sftp (SSH의 부가 서비스)

scp (secure cp) : 파일 1개만 전송

sftp (secure file transport protocol) : 여러개 파일 전송


2. 스케줄링

(1) 단일 작업 명령 : at

at 시간 (at hh:mm yyyy-mm-dd / at -t yyyymmdd…)
명령어
ctrl + d로 종료

  • at -l 또는 atq : 작업 목록, 예약 번호 보기
  • at -r 또는 atrm + 예약 번호 : 작업 삭제
  • 생성한 at작업은 /var/spool/at 디렉토리에 설정값이 저장됨. atd 데몬이 계속 실행되면서 기록된 시간에 작업을 실행함
[root@localhost user]# who  ### 현재 서버 접속자 정보
user     :0           2023-05-02 09:43 (:0)         ### :0 서버 자체
user     pts/0        2023-05-02 12:05 (192.168.56.1)   ###  pts/0 터미널
[root@localhost user]# at 14:16
at> ls -l > /dev/pts/0         ### 명령어의 결과값을 pts0에 출력
at> <EOT>

(2) 반복 작업 명령 : crontab

  • crontab -e : crontab 편집 (추가, 삭제)
  • crontab -l : 예약작업 리스트 출력
  • crontab -f : 모든 예약 작업 삭제
  • crontab -e -u username : 사용자 지정
  • 요일에서 0은 일요일, 6은 토요일
  • 예약작업을 생성하면 /var/spool/cron 에 계정이름으로 파일이 생성되고 예약 내용이 저장됨

(3) 시스템 차원에서 crontab 실행하기 (root 권한 필요)

  • /etc/crontab 를 vi 편집기로 실행 > 사용자 계정을 추가하는 것 외에는 crontab -e와 동일
  • 혹은 /etc/cron.d 디렉터리에 파일을 생성해도 됨
[root@localhost cron]# ls /etc/cron.*
/etc/cron.deny

/etc/cron.d:
0hourly  raid-check  sysstat

/etc/cron.daily:
logrotate  man-db.cron  mlocate   ###쉘 스크립트 파일을 넣어서 매일 실행시킴

/etc/cron.hourly:
0anacron  mcelog.cron

/etc/cron.monthly:

/etc/cron.weekly:

참고

  • crontab → 시간이 지났으면 예약작업이 실행이 안됨
  • acrontab → 시간이 지났어도 실행이 안된 작업이 있으면 실행 (/etc/anacrontab)

퀴즈

  1. 매년 1월 첫번째 일요일에 재부팅 되도록 설정 reboot
  2. 매월 오후 1시부터 5시까지 10분마다 date 명령어를 실행해서 datefile01에 이어쓰기로 저장하도록 설정
  3. 매년 3월 6월 9월 2번째 화요일 14시 20분에 /etc/passwd 파일의 내용을 userfile에 갱신하도록 설정
  4. test 사용자가 매년 크리스마스에 merry christmas 메시지를 /tmp/christmas 파일로 덮어쓰기 하도록
### crontab -e
0 0 1-7 1 0 reboot
*/10 13-17 * * * date >> datefile01
20 14 8-14 3,6,9 2 cat /etc/passwd > userfile
0 0 25 12 * echo "Merry Christmas" > /tmp/christmas

(4) 엑세스 제어 설정 파일

  • at나 crontab의 사용을 제한

at
/etc/at.deny
/etc/at.allow → 생성
crontab
/etc/cron.deny
/etc/cron.allow → 생성

엑세스 규칙

  1. *.allow 파일은 존재하지 않고 *.deny 파일만 존재하면 *.deny 파일에 등록된 사용자는 스케쥴링 명령 사용 불가
  2. *.allow 파일과 *.deny 파일이 둘 다 존재하면 allow 파일에 등록한 사용자만 스케줄링 명령어 사용 가능
  3. 둘 다 존재하지 않으면 root만 스케줄링 명령어 사용 가능

0개의 댓글