리눅스 시스템에 전원이 들어왔을 때 가장 처음 하는 것은
보조기억장치에 있는 운영체제의 커널을 주기억장치에 올리는 작업입니다
보조기억장치에 있는 커널을 주기억장치에 올리는 것은
로더(Loader)라는 프로그램이 수행하는데요
리눅스에서 로더의 역할을 수행하는 것은 LILO(LInux LOader)입니다
LILO는 리눅스의 부트로더(Boot Loader)로서 실행 시에
/etc/lilo.conf라는 파일을 읽어 실행합니다
최근에는 LILO보다는 GRUB를 이용하는데
GRUB는 /boot/grub/grub.conf 파일을 읽어 실행합니다
GRUB는 부트 정보를 사용자가 임의로 변경할 수 있고
여러 운영체제를 사용할 수 있는 멀티 부팅을 지원합니다
또 커널 경로 및 파일명만 알고 있다면 부팅이 가능한 특징이 있습니다
/boot/grub/grub.conf 파일의 설정 값을 살펴보면 다음과 같습니다
설정 값 | 설명 |
default = 0 | 부트 순서를 지정하는 번호로 멀티 부트의 경우 운영체제 레이블 번호를 선택 |
timeout = 0 | 지정된 시간이 경과되면 default로 지정된 운영체제로 부팅 |
splashimg = (hd0, 0) /grub/splash.xpm.gz |
부팅 이미지를 지정하는 부분 |
hiddenmenu | 부트로더를 보여주지 않음 |
title Fedora | 부팅되는 부트 엔트리를 의미 |
다시 리눅스의 부팅(Booting) 순서를 보면
리눅스 서버 전원을 켜면 ROM BIOS를 읽고
디스크의 MBR(Master Boot Record)에 있는 부트 로더(Boot Loader)가 실행됩니다
부트 로더는 LILO 혹은 GRUB가 되고
보조 기억 장치에 있는 커널을 찾고 실행시킵니다
실행된 커널은 하드웨어를 확인하고 root의 읽기전용으로 마운트를 수행하고
디스크 검사를 수행하고 root의 쓰기 전용으로 다시 마운트를 수행합니다
여기까지 완료되었다면 init 프로세스를 실행하고 PID를 1번으로 할당합니다
init 프로세스는 자신의 설정파일인 /etc/initab 파일을 읽어서
디바이스(Device) 및 프로세스(Process)를 활성화시키고
작업 수행은 리눅스의 Run 레벨에 따라 다르게 부팅합니다
리눅스의 Run 레벨은 아래와 같습니다
실행 단계 | 내용 |
0 | PROM 감사 단계 |
1 |
· 관리 상태의 단계 · 사용자 로그인의 접근이 불가능한 단일 사용자 단계로 여러 개의 파일 시스템이 로드(Load) · 암호를 변경할 때 사용 |
2 | 공유된 자원을 갖지 않은 다중 사용자 단계 |
3 |
· 기본 실행단계로 공유 자원을 가진 다중 사용자 단계 · 텍스트 유저 모드 |
4 | 현재 사용되지 않음 |
5 | Run Level 3으로 기동 후에 그래픽 모드인 X-Windows를 실행 |
6 | 재부팅 단계로 Run Level 3의 상태로 재부팅 |
※ 3.20 사이버테러
2013년 3월 20일 MBC, KBS, YTN, 농협, 신한은행 등 방송국과 금융사를 대상으로 전산망을 마비시킨 사건으로 북한의 정찰총국의 소행으로 결론났습니다. 악성코드는 kbs.exe, imbc.exe 등의 형태로 배포되었으며 윈도우 계열의 PC는 MBR(Master Boot Record)과 VBR(Volume Boot Record)을 삭제하고 무의미한 문자열로 바꾸어서 시스템을 마비시키고 리눅스(유닉스) 계열의 서버는 dd 및 rm 명령을 원격에서 전송하여 디스크를 삭제하는 것이었습니다
이제 리눅스의 인증 및 권한에 대해 알아보겠습니다
리눅스 시스템을 사용하려면 로그인(login)을 해야 하며
로그인을 할 때는 사용자 ID와 패스워드를 입력해야 합니다
사용자가 패스워드를 입력하면 /etc/passwd 파일에 있는 패스워드와
패스워드를 암호문(해시)으로 비교합니다
* /etc/passwd 파일 구조 (1)root : (2)x : (3)0 : (4)0 : (5)root : (6)/root : (7)/bin/bash (1) Login Name : 사용자 계정 (2) Password : 사용자 암호. x라면 /etc/shadow 파일에 패스워드가 저장됨(pwconv명령사용 반대의 경우 pwunconv) (3) User ID : 사용자 ID를 의미. root의 경우 0 (4) User Group ID : 사용자 속한 그룹 ID를 의미. root 그룹의 경우 0 (5) Comments : 사용자의 코멘트 정보를 적는 곳 (6) Home Directory : 사용자의 홈 디렉터리를 지정 (7) Shell : 사용자가 기본으로 사용하는 쉘 종류 지정 |
* /etc/shadow (1)root : (2)$1$Fz4q1GjE$G/ : (3)14806 : (4) 0 : (5) 99999 : (6)7 : (7) : (8) : (9) (1) Login Name : 사용자 계정 (2) Encrypted password : 패스워드를 암호화한 값 (3) Last Changed : 1970년부터 1월 1일부터 패스워드가 수정된 날짜의 일수를 계산 (4) Minimum : 패스워드 변경 전 최소 사용기간(일 수) (5) Maximum : 패스워드 변경 전 최대 사용기간(일 수) (6) Warn : 패스워드 사용 만기일 전에 경고 메시지를 제공하는 일 수 (7) Inactive : 로그인 접속 차단 일 수 (8) Expire : 로그인 사용을 금지하는 일 수 (월/일/연도) (9) Reserved : 사용되지 않음 |
change -l <사용자명> 명령어로 /etc/shadow 파일을 읽어서 패스워드 만료 정보를 확인할 수 있습니다
더불어서 패스워드를 변경하려면 /usr/bin/passwd 파일을 실행해야하고
/usr/bin/passwd는 "s"라는 특수 권한이 주어져 있어 실행 시 소유자의 권한으로 실행됩니다
따라서 소유자가 root여서 변경할 수 없는 /etc/passwd 파일을
일반 사용자가 /usr/bin/passwd를 통해 변경할 수 있게됩니다
리눅스의 권한은 소유자, 그룹, 다른 사용자로 이루어지고
각각 읽기(r), 쓰기(w), 실행(x) 권한을 가질 수 있습니다
매번 권한을 부여하는 것을 피하고자 Default 권한을 줄 수 있는데
바로 umask 값을 주는 것입니다
umask 값이 0022면 666-022 = 644로 rw-r--r--가 됩니다
다만 디렉터리일 경우는 777-022 = 755로 rwxr-xr-x가 됩니다
umask 명령어를 통해 umask 값을 확인할 수 있습니다
직접 권한을 사용자에게 부여하는 방법은 chmod 명령을 이용하는 것인데
사용법 : chmod [옵션] [퍼미션] [파일]
chmod 755 test.txt 와 같이 숫자로 주는 방법과 아래의 표의 기호로 주는 방법이 있습니다
기호 | 설명 |
u | user |
g | group |
o | other |
a | all |
+ | 추가 |
- | 삭제 |
r | 읽기 |
w | 쓰기 |
x | 실행 |
chmod u+x, g+w, o-r test.txt 와 같이 줄 수 있습니다
chown 명령어는 파일에 대한 사용자와 그룹을 변경할 수 있는 명령어로
사용법 : chown [옵션] [소유자:소유그룹] [파일]
chown root:root test.txt와 같이 사용할 수 있습니다
chgrp 명령어는 파일에 대한 그룹을 변경할 수 있는 명령어로
사용법 : chgrp [옵션] [그룹] [파일]
chgrp root test.txt와 같이 사용할 수 있습니다
마지막으로 리눅스의 특수 권한에 대해 알아보고 마치겠습니다
특수 권한 | 내용 | |
4 = setuid | chmod 4755 test.txt | 실행 파일에서 사용 |
2 = setgid | chmod 2755 test.txt | 동일한 프로젝트에 실행 권한을 부여하기 위해서 사용 |
1 = sticky bit | chmod 1777 test.txt | 디렉터리 내에 인가된 사용자만 쓰기(write) 가능하도록 하기 위하여 사용 |
이것으로 이번 학습을 마치겠습니다
그럼 이만-_-
'Security' 카테고리의 다른 글
[Security] 레지스트리(Registry)와 하이브(Hive) 파일 (0) | 2020.03.12 |
---|---|
[Security] 윈도우(Window) 시스템 (0) | 2020.03.11 |
[Security] 리눅스 파일 시스템 (0) | 2020.03.08 |
[Security] 리눅스(Linux) (0) | 2020.03.08 |
[Security] 장치 관리 (0) | 2020.03.08 |