InfoSec/정보보안기사

리눅스 서버 보안

gangintheremark 2022. 9. 3. 16:55
728x90

01. 리눅스 구조

1) 커널(kernel)

  • 주기억장치(Main Memory)에 상주하면서 사용자 프로그램을 관리하는 운영체제의 핵심 역할
  • 커널은 프로세스 스케줄링, 기억장치 관리, 파일 관리, 입출력(I/O), 시스템 호출 등을 수행
    시스템 호출 : 사용자 프로그램이 커널에 접근하는 인터페이스를 제공

2) 셸(Shell)

  • 명령어 해석기 역할

3) 파일 시스템(File System)

  • 계층적인 트리 구조 형태

리눅스 파일 시스템의 구조

02. 리눅스 파일 시스템

1) 파일 시스템 구조

  • 부트블록(Boot Block) : 컴퓨터 시스템 부팅
  • 슈퍼블록(Super Block) : 파일 시스템의 크기, 여유 공간(빈 블록 리스트), 파일 시스템 이름 등의 정보
  • i-node : 소유자, 파일 크기, 데이터블록 주소, 변경정보, 생성시간 → 파일의 이름과 내용은 저장X
  • 데이터 블록(Data Block) : 실제 데이터 저장

2) 파일 시스템 생성

  • fdisk : 하드 디스크 초기화 및 파티션 생성
  • mkfs : 파일시스템 생성
  • fsck : 파일 시스템의 무결성 검사
  • mount : 특정 디렉터리 연결

3) 파일시스템 종류

  • ext2 : 캐시의 데이터를 디스크에 저장 중 오류 발생 시 파일 시스템에 손상
  • ext3 : 저널링 기능 추가 → 파일시스템 변경 시 저널에 먼저 수정 내용 기록(빠르게 오류 복구)
  • ext4 : 단편화를 억제, 지연된 할당 파일 시스템을 지원

03. 프로세스

  • swapper (PID 0) : 부팅시간 동안 운영체제에 의해 생성
  • init (PID 1) : 시스템의 모든 프로세스는 init의 자손 프로세스
  • pagedaemon (PID 2) : 커널에서 영구적으로 실행되는 프로세스
  • 고아 프로세스 : 부모 프로세스가 자식 프로세스보다 먼저 종료되었을 때 발생
  • 좀비 프로세스 : 프로세스가 종료되었지만 부모 프로세스가 확인하지 못한 경우

04. 리눅스 Booting

  • 리눅스 Boot master
    • 로더(Loader) : 보조기억장치에 있는 OS의 커널을 주기억장치에 올리는 것 → LILO, GRUB
    • init 프로세스의 작업 수행은 리눅스의 Run Level에 따라 다르게 부팅
  • 리눅스 Booting 단계 (Run Level)
    0 : PROM 모드
    1 : 사용자 접근 불가, 관리 단계
    2 : 공유 불가능, 다중 사용자
    3 : 공유 가능, 다중 사용자 → 기본
    5 : X-Window 실행
    6 : 재부팅

05. 패스워드 파일

  • /etc/passwd : 시스템 관리자가 사용자 계정을 만들 때마다 사용자와 관련된 정보 저장
    • 패스워드 파일에 x값이 있으면 사용자 패스워드는 shadow 파일에 있는 것
    • UID : 100번 이하는 시스템, 0번은 시스템 관리자가 사용
    • 로그인이 불필요한 계정의 셸은 /sbin/nologin, /bin/false로 지정
    • passwd 명령어를 이용하여 패스워드 변경

  • /etc/shadow : 암호화된 패스워드가 저장되도록 하고 관리자만이 읽을 수 있도록 제한
    • /etc/shadow 파일에 패스워드를 저장하고 싶으면 pwconv 명령 실행 ↔ pwunconv
  • 패스워드 크래킹
    • John the ripper, L0phtCrack, hydra, pwdump

06. 리눅스 권한 관리

  • 디폴트 권한 umask(022)
    • 파일은 666, 디렉터리는 777에서 빼기
  • 권한 부여 및 변경 chmod
    • chmod 764 Limbest.txt Limbest.txt
    • chmod u+x, h+w, o-r Limbest.txt
  • 특수권한 관리 : setUID, setGID0, Sticky-bit
    • setUID : 실행 시 소유자의 권한으로 실행 → 4000 (실행 부분 x→s)
    • setGID : 실행 시 그룹의 권한으로 실행 → 2000 (실행부분 x→s)
    • Sticky bit : 공용 디렉터리→ 1000 (실행부분 x→t)
      • 실행파일이 아닌데 setUID를 설정하면 대문자 S가 되고 실행 X
      • 모든 사용자가 사용할 수 있지만, 삭제는 소유자만 가능

07. 리눅스 로그파일

  • utmp : 현재 로그인 사용자 w, who
  • wtmp : 로그인 및 로그아웃 last
  • btmp : 로그인 실패 lastb
  • lastlog : 마지막 로그인
  • xferlog : ftp 사용 정보 로그 파일
  • Sulog : su 명령 로그
  • secure : 원격 접속 정보
  • messages : 시스템 운영에 대한 전반적인 로그
  • acct/pacct : 시스템에 로그인한 모든 사용자가 수행한 프로그램에 대한 정보, 바이너리 형태
  • dmesg : 리눅스가 부팅될 때 출력되는 모든 메시지 기록
  • .sh_history : 실행한 명령에 대한 기록이 [셀 종류]_history 형식으로 홈 디렉터리에 저장
  • syslog : 모든 로그
    • kern.* : kernel 수준의 모든 로그를 기록
    • mail.err : 메일에서 발생되는 로그 중 에러 메시지를 로그파일에 기록
    • 시스템 위험성에 다라 우선순위 결정 ( emerg > alert > crit > err > warn > notice > info > debug

08. 작업 스케줄 관리

  • corn (/etc/crontab)
    • 분 시 일 월 요일 사용자 실행 명령
    • 30 3 * * 2 root /home/clean.sh : 매주 화요일 3시 30분에 /home/clean.sh 명령 실행
    • crontab 옵션
      • -l : 현재 로그인된 계정에 잡혀있는 작업 스케줄 확인
      • -e : 현재 로그인 중인 계정에 작업 등록
      • -r : 현재 crontab에 등록된 작업 삭제

09. 리눅스 악성코드 감지

  • find
    • 파일명으로 검색 → find .-name *.php : 현재 디렉터리에서 확장자가 php인 파일 찾기
    • 특정 권한이 부여된 파일 검색 → find / -perm 6000 : setUID와 setGID가 부여된 파일 찾기
    • 특성 시간 이후 변경된 파일 검색
      • find / -mtime +5 : 최근 5일 동안 변경되지 않은 파일 찾기
      • find / -mtime -1 : 최근 1일 동안 변경된 파일 찾기
      • atime : 파일에 접근한 시간, mtime : 파일이 변경된 시간, ctime : 파일 속성이 변경된 시간)
    • 소유자 기준으로 파일 검색 → find / -user root : root 소유자 파일 찾기
  • tripwird : Checksum을 데이터베이스화 하여 파일에 대한 변경 여부를 판단하여 무결성 검사

10. 리눅스 방화벽 iptables

  • 특정 패킷을 분석하여 패킷을 차단하거나 허용
  • iptables 체인의 종류
    • INPUT : 리눅스로 들어오는 패킷
    • FORWARD : INPUT과 OUTPUT 역할, 라우터에 방화벽을 적용할 때 쓰임
    • OUTPUT : 외부로 나가는 패킷
      • 규칙 추가(-A)
      • 체인의 규칙 상태 보기(-L)
      • 등록된 체인 제거(-F)
      • 입력 인터페이스(-i)
      • 출력 인터페이스(-o)
      • 출발지 ip주소(-s)
      • 목적지 ip주소(-d)
      • 프로토콜(-p)
  • iptables -A INPUT -s 192.168.0.3 -j DROP : 리눅스로 들어오는 특정 패킷 차단
728x90