본문 바로가기

보안

보안기사 - UNIX/Linux 기본

쉘 (Shell)

명령어 해석기. 사용자와 커널 사이 인터페이스
사용자가 입력한 명령어 해석해서 커널에 전달 ~ 커널이 처리한 결과 사용자에게 출력해주는 역할

/etc/passwd

사용자 계정정보 저장

[user_account]:[user_password]:[UID]:[GID]:[comment]:[home_dir]:[login_shell]
* user_password가 x인 것은 shadow 패스워드를 사용한다는 의미 (암호화된 pw를 /etc/shadow 파일에 저장하여 관리)
* root(super user)는 UID와 GID가 0

  • 관련 명령어
    id (UNIX 시스템에 접속 중인 사용자 확인, 사용자 UID와 GID 출력)
    passwd (패스워드 변경)

/etc/group

현재 시스템에 정의되어 있는 모든 그룹의 정보 저장
(wheel : su 명령어 사용 가능 그룹)

파일시스템

물리적 저장장치에 파일을 생성, 저장, 관리하기 위한 논리적 자료구조
물리적 디스크는 논리적 파티션으로 나누어지며 각 파티션별로 고유한 파일시스템 생성

  1. Boot block
    운영체제 부팅, 초기화 위한 bootstrap 코드 담고 있다

  2. Super block
    해당 파일시스템 관리 위한 정보 담고 있다

  3. inode list
    • inode : 파일에 대한 속성정보 담고 있는 자료구조
      inode number, 파일타입, 접근권한, link count(하드링크), 소유자(UID), 소유그룹(GID), 파일크기, MAC Time, Block index
    • MAC Time : 파일에 대한 무결성 확인 가능 ~ 침해사고 발생시 분석
      last Modification Time (파일 내용 마지막으로 수정한 시간)
      last Access Time (파일 마지막으로 접근한 시간)
      last Change Time (파일 속성(inode)을 마지막으로 변경한 시간)
    • 파일명은 inode에 있지 않고, 디렉터리를 통해 관리 (파일명-inode# 목록)
  • chown (파일 소유주 변경), chgrp (소유 그룹 변경)
    root만 실행 가능(보안상)
    ex) chown root daemon.c : daemon.c 파일 소유주를 root로 변경

링크파일

ln [-s] source_file target_file

  1. 하드 링크
    기존 파일과 동일한 inode number를 가지는 파일을 생성하여 접근하는 방식
    동일 파일시스템 내에서만 하드링크 가능하고 디렉터리는 하드링크 불가
    link count를 증가, 감소 ~ 0이면 해당 파일의 inode 정보 및 데이터 삭제

  2. 심볼릭 링크
    원본 파일에 대한 파일 경로를 파일 내용으로 하는 새로운 파일을 생성 (link count에 영향X)
    동일 파일시스템 내에서만 링크 가능한 하드링크의 단점 보완
    파일 경로를 기반으로 하므로 파일시스템에 제한 없고, 디렉터리도 가능
    원본 파일 삭제되거나 이동하면 해당 경로가 바뀌게 되어 심볼릭 링크 파일은 링크가 끊어지게 됨

파일 접근권한

  1. 파일
    - r : 파일 읽기 (read)
    - w : 파일 쓰기 (write)
    - x : 파일 실행 (execute)
    기본 접근권한 : 666

  2. 디렉터리
    - r : 디렉터리 내용 볼 수 있는 권한 (ex: ls)
    - w : 디렉터리 내 파일이나 디렉터리 생성/삭제 권한 (ex: touch, mkdir, rmdir, rm)
    - x : 디렉터리 안으로 이동할 수 있는 권한 (ex: cd)
    기본 접근권한 : 777
  • chmod
    기존 파일(디렉터리)에 대한 접근권한 변경
    • ex) 접근권한이 r---w----인 daemon.c 파일의 접근 권한을 rwxrw-rw-로 변경하기
      chmod 766 daemon.c
      chmod u+wx,g+r,o+rw daemon.c
  • umask
    앞으로 만들어질 파일에 영향을 미치는 명령
    명령시 지정한 8진수는 새로 만들어질 파일에서 제거될 권한을 명시
    일반 파일은 666에서, 디렉터리는 777에서 umask로 지정한 권한을 제거
    보통 022를 많이 사용

파일 검색 (find)

  • setuid, setgid 설정된 root 소유 실행파일 (위험, 잘 관리!)
    find / -type f -user root ( -perm -4000 -o -perm -2000 ) -exec ls -l {} ;

  • 마지막 수정일이 4일 미만인 파일
    find / -type f -mtime -4 -exec ls -al {} ;

  • 크기가 3Mbytes를 초과하는 파일
    find -type f -size +3M -exec ls -al {} ;

  • 확장자가 '.c'로 끝나는 파일
    find . -name "*.c"

(-perm 옵션 뒤의 숫자 앞에 -가 붙으면 해당 권한 포함하는 파일, 없으면 정확히 해당 권한 파일 탐색)
(time 옵션 뒤의 숫자 앞에 -가 붙으면 미만, +가 붙으면 초과, 없으면 정확히 n일 , size도 비슷)

프로세스



[프로세스 상태 전이도]




  1. PCB (Process Control Block)
    프로세스 생성되면 커널(OS)는 개별 프로세스별로 관리정보 담고 있는 PCB를 생성

  2. FDT (File Descriptor Table)
    프로세스 생성되면 개별 프로세스별로 오픈한 파일 관리 위한 FDT 생성
    FD(file descriptor) : 프로세스 내에서 오픈한 각각의 파일 식별위한 양의 정수값
    * 기본적으로 3개 파일 자동 오픈
        stdin(표준입력, fd는 0), stdout(표준출력, fd는 1), stderr(표준에러, fd는 2)

  3. System open-file table
    커널이 시스템 내에서 여러 프로세스들에 의해 오픈된 파일들을 관리 위한 자료구조

  4. Active vnode table
    해당 파일의 inode 정보를 가지고 있는 일종의 캐시
    다양한 파일시스템의 inode 정보 관리 위한 중계자
void forkTest() {
    int pid;
    pid = fork();  //부모 프로세스에게는 자식 pid, 자식 프로세스에게는 0을 리턴

    if (pid < 0) {
        printf("fork() failed");
        exit(1);
    }
    if (pid > 0) {  //부모 프로세스가 실행
        printf("parent process start...\n");
        sleep(1000);
    } else {  //자식 프로세스가 실행
         printf("child process start...\n");
        sleep(1000);
    }
}

  • 고아 프로세스
    자식 프로세스가 살아있는 상태에서 부모 프로세스가 종료하게 되면 자식 프로세스는 고아 프로세스가 됨
  • 좀비 프로세스
    프로세스 수행을 종료했지만 부모 프로세스가 종료상태정보를 확인하지 않아서 소멸하지 않고 남아있는 상태의 프로세스
    ps -l 실행하면 2번째 필드(S필드)의 값이 Z
  • init process
    run-level에 따른 시스템 초기화 수행 (초기 프로세스 기동)
    고아프로세스의 대리모 역할