1. 유닉스
서버용 운영체제로 가장 널리 사용됨
Oracle Solaris, AIX, HP-UX 등이 있음
- 특징
- 대화식 운영체제(Shell), 호환성 및 이식성, 뛰어난 통신 기능 등
- 커널
- 항상 메모리에 상주하여 하드웨어 자원을 직접 제어
- 사용자 프로그램이 커널에 접근하는 인터페이스 제공 (System Call)
- 셸
- OS와 사용자의 대화 기반을 제공하는 명령어 해석기
- 본 셸, 배시 셸 등 다양한 종류가 있음
- 파일시스템
- 디렉터리는 계층화된 트리구조, 최상위 디렉터리는 root
- /etc: 시스템 환경 설정 및 주요 설정 파일이 있음
- /dev: 물리적인 장치를 다루는 특수 파일이 있음
- /usr/bin: 기본적으로 실행 가능한 파일들이 있음
- /user/sbin: 시스템 관리 명령어가 저장됨
- /home: 사용자 홈 디렉터리
- /tmp: 임시 파일이 저장됨
- 파일시스템 구조
- 디렉터리는 계층화된 트리구조, 최상위 디렉터리는 root
부트 블록 | OS의 부팅 코드가 저장됨 |
슈퍼 블록 | 파일 시스템 정보를 유지하는 자료 구조 사용하지 않는 i-node의 위치 정보 |
i-node 리스트 | i-node: 파일에 대한 정보를 기억하는 구조체 필드: i-node number, link count, MAC Time, 소유자, block index 등 |
데이터 블록 | 실제 사용하는 데이터들이 저장됨 |
2. 유닉스 사용법
2-1. 파일시스템 응용
- 디렉터리, 파일 정보 출력 (ls)
- 특정 위치에 있는 파일 유형, 접근 권한, 하드링크 수, 소유자 정보, 마지막 변경 시간 등을 출력
- 접근권한: user, group, other로 대상을 나누어 읽기, 쓰기, 실행 권한을 부여함
- 파일 권한 관리 (chmod)
- 대상: u, g, o, a(all)
- 연산자: +, -, =
- 접근권한: r(4), w(2), x(1)
- 파일 소유권 변경 (chown, chgrp)
- 명령을 실행하고 나면 이전 소유주는 다시 해당 명령어 실행 불가
2-2. 프로세스 응용
- swapper 프로세스
- PID가 0인 첫 번째 프로세스로, init과 pagedaemon을 만들기 위해 fork 두 번 실행
PID | 이름 |
0 | swapper |
1 | init |
2 | pagedaemon |
- 프로세스 생성과 종료
- swapper를 제외하고 모든 프로세스는 부모 프로세스를 가짐
- 만약 부모가 먼저 종료되면 자식 프로세스는 고아 프로세스가 됨
- init 프로세스가 대리모 역할을 함
- 프로세스 종료 시 자신의 부모 프로세스에게 알림
- 만약 부모 프로세스가 확인하지 못한다면 좀비 프로세스로 남음 (시스템 자원에 악영향)
- swapper를 제외하고 모든 프로세스는 부모 프로세스를 가짐
3. 유닉스 시스템 관리
3-1. 시스템 시작과 종료
- 런 레벨
- 운영 상태를 숫자 혹은 문자로 표현
- 0은 부팅 전 HW 체크, s는 싱글 유저, 3은 멀티 유저 모드
- init 명령어로 런 레벨을 이동할 수 있음
- 시스템 종료
- 주의사항: 작업 마무리, 서비스를 안전하게 종료, 하드디스크를 갱신해 무결성 유지
- shutdown 명령어로 시스템을 안전하게 종료 (또는 런 레벨 변경도 가능)
3-2. 파일시스템 관리
- 파일시스템 연결 (mount)
- 보조기억장치의 파일시스템을 특정 디렉터리에 논리적으로 연결
- 연결 해제는 umount
3-3. 프로세스 스케줄 관리
- 정기적 스케줄 관리 (cron)
- 일괄적으로 처리해야 하거나 요구가 규칙적인 작업을 처리하는 데 특화
- /etc/crontab: 정기적으로 처리해야 하는 작업 목록 정의 (분, 시, 일, 월, 요일, 작업)
- root는 다른 사용자의 crontab 파일도 편집할 수 있지만, 일반 사용자는 자신의 것만 편집 가능
4. 유닉스 서버 보안
4-1. 시스템 보안
- 패스워드 관리
- /etc/passwd
- 계정 생성 시마다 저장된 사용자 정보가 있음
- 필드: 로그인 ID, 비밀번호(x), 사용자 ID, 그룹 ID, 사용자 설명, 홈 디렉터리, 로그인 셸 등
- 해킹 시 주로 사용자나 그룹 ID를 0으로 바꾸거나 로그인 셸을 변경해 악성 셸 실행 유도
- /etc/shadow
- 패스워드가 암호화되어 있으며 관리자만 읽을 수 있음
- 필드: User Account, 암호화된 패스워드, 마지막 변경 날짜, 최소/최대 변경 일수, 경고일수, 최대 비활성 일수, 만료 날짜 등
- /etc/passwd
- 접근권한 마스크 (umask)
- /etc/profile에 umask 설정 가능
- 파일은 666-umask, 디렉토리는 777-umask가 생성 시 접근권한이 됨
- 권한 상승 (SetUID, SetGID)
- RUID는 프로세스 실행자의 UID, EUID는 프로세스 실행 동안 부여되는 UID
- 대개 RUID==EUID이지만, SetUID가 설정되면 프로세스 실행 동안 일치하지 않음
- 특수권한: suid(4), guid(2), sticky-bit(1)
- S는 소유자가 실행 권한이 없는 것을, s는 있는 것을 의미함
- 이들은 해킹 대상이 될 수 있으므로, SetUID가 설정된 파일을 목록화해 정리해야 함
- 디렉터리 접근권한 (sticky-bit)
- sticky-bit(1)는 공유 모드
- 설정된 디렉터리에서 모든 사용자가 하위 파일 생성이 가능함
- 해당 디렉터리를 지우는 것은 소유주나 root만 가능
4-2. 네트워크 보안
- 슈퍼 서버 (inetd 데몬)
- 모든 서버를 하나로 통합해 서비스 요청이 오면 관련된 실행 모듈을 호출
- /etc/inetd.conf 파일
- 불필요한 서비스 제한 가능
- 필드: 서비스, 소켓, 프로토콜, 대기 설정, 로그인 이름, 서버 등
- xinetd 환경 서비스는 xinted 데몬에 의해 제어되지만, standalone 서비스는 독립적으로 실행됨 (httpd, sendmail 등)
- 접근 통제 (TCPWrapper)
- 외부 클라이언트의 IP 주소를 확인해 접근통제
- inetd 데몬은 TCPWrapper의 데몬인 tcpd 데몬에 연결을 넘겨줌
- /etc에 저장된 hosts.allow, hosts.deny 파일을 기준으로 접근 제어
- hosts.allow에서 hosts.deny 순으로 읽음
- 두 파일 모두에 설정되지 않은 해당 호스트는 접근이 허용됨
- 장착형 인증 모듈 (PAM, Pluggable Authentication Modules)
- 리눅스 배포판의 사용자 인증 라이브러리
- 관리자는 다양한 인증 서비스를 선택하거나 서비스 모듈 추가 가능
- PAM control 설정
- requisite: 모듈 실행이 실패하면 바로 인증 거부
- required: 모듈 실행을 완료한 시점에서 인증 거부
5. 리눅스
유닉스를 PC 버전으로 개발하려는 노력으로 탄생한 OS
- 파일시스템
- minix: 가장 오래되고 기본
- ext2: 파일시스템이 손상될 가능성 존재, fsck로 복구 가능하지만 시간이 많이 소요
- ext3: ext2의 단점을 보완해 무결성과 복구 기능 탑재, 복구 속도를 높인 저널링 기술 사용
- ext4: 지연된 할당 기능 지원
6. 유닉스, 리눅스 서버의 취약점 분석 및 평가
6-1. 계정 관리
- root 계정 원격 접속 제한
- 패스워드 복잡성, 최소 길이, 최소 (재사용 방지), 최대 사용기간 설정
- 계정 잠금 임계값 설정
- 패스워드 파일 보호: /etc/shadow를 특별 권한이 있는 사용자만 있을 수 있게 제한
- root 이외 UID가 0인 계정은 금지해야 함
6-2. 파일 및 디렉터리 관리
- root 계정의 PATH 환경변수
- "."이 마지막으로 이동하거나 삭제해야 함
- 그렇지 않으면 비의도적으로 현재 디렉터리의 명령어가 실행되어 침해 사고 발생 가능
- 소유자 설정
- 소유자가 존재하지 않는 파일은 소유자를 변경하거나 삭제
- nouser, nogroup
- /.rhosts, hosts.equiv 사용 금지
- 'r'command로 원겹 접속이 가능하면 보안상 매우 취약
- 사용이 불가피하다면 /etc/hosts.equiv 및 .rhosts 파일 사용자를 root 혹은 필요한 계정, 권한으로 제한