발자취
시스템보안 01. 리눅스 시스템 본문
1. 리눅스 환경
1. Kali linux
- Oracle virtualbox를 통해 가상시스템으로 설치됨
- 파일 & 디렉토리 시스템
- 많은 수의 디렉토리들이 트리구조로 구성됨
- 각각의 디렉토리 안에 파일들이 위치함
- / 디렉토리: 최상위 디렉토리

- / 디렉토리는 루트 디렉토리
- root 디렉토리는 루트 사용자(=관리자) 작업공간
2. 계정
- 일반 사용자
- root 사용자 (관리자 계정)
3. Home 디렉토리
- 일반 사용자가 작업할 수 있는 공간
- 일반 사용자 guest의 홈 디렉토리: /home/guest
4. 터미널 (Terminal)
- 리눅스 시스템에서 사용자로부터 명령어를 입력 받는 도구 (사용자가 명령어들을 입력할 때 사용하는 도구)
- Applications -> System Tools -> Terminal
5. 쉘 (Shell)
- 터미널상에서 사용자가 입력한 명령어를 인식하는 사용자 인터페이스
(터미널에 입력된 값 자체를 인식하는 인터페이스. 사용자가 입력한 내용을 명령어로 인식하는 애임!)
- 쉘 프롬프트: [사용자명@localhost Desktop]$
- 종류: Bash, C, Korn, Bourn, ... (Bash가 디폴트다! 터미널을 처음 키면 나오는 #가 배시쉘)
6. 리눅스 명령어
- 리눅스에서는 다양한 종류의 명령어가 존재함
- man 명령어를 통해서 특정 명령어의 사용법을 알 수 있음
- man ls 하면 ls의 사용법을 알 수 있음 ('q'로 빠져나가기)
2. 파일, 디렉토리 관련 명령어
1. pwd
현재 작업하고 있는 디렉토리의 완전한 경로명 (full path)을 출력함
2. cd
현재 작업하고 있는 디렉토리를 변경함
3. mkdir
디렉토리를 생성함
- .: 현재 디렉토리
- ..: 부모 디렉토리
4. ls
디렉토리 내용을 출력함
- ls -al: 해당 파일의 소유자 등 기타 정보를 자세히 확인 가능함
5. rm
파일, 디렉토리를 삭제함
- 파일 삭제: rm [파일명]
- 디렉토리 삭제: rm -rf [./디렉토리명]
-r: recursive: 반복적으로
-f: force: 강제로
6. mv
파일, 디렉토리의 이름 또는 위치를 변경함
크게 세가지의 역할을 함
- 파일의 이름을 바꿈: mv [원래파일명] [변경할파일명]
- 파일의 위치를 바꿈 (다른 디렉토리로): mv [파일명] [디렉토리경로] → 예: mv b.c ./temp (./temp 밑으로 b.c를 옮김)
- 디렉토리의 이름을 바꿈: mv [원래디렉토리명] [변경할디렉토리명]
7. more
페이지 단위로 화면에 내용물 출력
원래는 출력 결과가 길면 스크롤 형식으로 길어지는데, more를 사용하면 페이지 단위로 내용이 적힘
사용 예: ls | more
8. find
파일을 탐색함
형식: find [시작디렉토리] -name [탐색파일] -print
9. grep
파일에서 특정 패턴을 탐색함
형식: grep [탐색패턴] [파일명] (-r, -n)
-r: 반복적으로
-n: line 정보(몇번째 라인인지 출력
10. diff
두 파일의 차이를 출력함
3. 시스템 관련 명령어
1. date
현재 시간을 출력함
2. cal
달력을 출력함
3. ps
현재 수행중인 프로세스 (프로그램) 관련 정보를 출력함
ps -aef로 알 수 있는 정보들
- uid: 유저 아이디
- pid: 프로세스 아이디
- ppid: 부모 프로세스 아이디
- 시간정보
4. kill
수행중인 프로세스를 종료시킴
형식: kill [PID]
5. df
디스크, 파일 사용 상태를 출력함
리눅스에 프로그램 깔았을 때 용량 얼마정도 남았는지 확인
6. who
현재 시스템을 사용하고 있는 사용자 계정을 출력함
7. chmod
파일의 접근 모드를 변경함
rwx / rwx / rwx
421 / 421 / 421
소유자 / 그룹 / 그외 사용자
사용 예: chmod 664 a → 파일 a의 접근 모드: -rw-rw-r--
8. chown
파일의 소유자를 변경
9. chgrp
파일의 그룹을 변경함
4. 기타 명령어
1. tar
파일들을 tar 포맷으로 압축하거나, tar 파일에 대한 압축해제시에 사용
-cvf: 강제로 압축
2. gzip
파일을 gz 포맷으로 압축하거나, gz 파일에 대한 압축해제시에 사용됨
3. gcc
C 프로그램 컴파일러
-o: 컴파일 파일의 이름을 지정해주는 옵션
5. vi 에디터
텍스트 기반의 에디터
1. 사용법
- vi [파일이름]
2. 기본 명령어
- i: 텍스트 입력모드
- ESC x: 한 문자 삭제
- ESC dd: 한 라인 삭제
- ESC h: 커서를 왼쪽으로 이동시킴
- ESC l: 커서를 오른쪽으로 이동시킴
- ESC j: 커서를 아래쪽으로 이동시킴
- ESC k: 커서를 위쪽으로 이동시킴
- ESC Shift + j: 다음 라인을 현재 라인에 연결시킴
- ESC Shift + ; + $: 파일의 마지막 라인에 커서를 위치시킴
- ESC Shift + ; q!: 에디터 종료
- ESC Shift + ; w!: 파일 저장
- ESC Shift + ; wq!: 파일 저장 후 에디터 종료
5. Bash 쉘
Kali linux에서 기본 쉘
1. 쉘 스크립트
- bash 쉘 명령어를 수행하는 프로그램
- 프로그램 실행을 위해 컴파일 필요없음
- 실행절차
1) .bash 확장자를 갖는 스크립트 파일(e.g. test.bash)을 작성
첫번째 방식) .bash test.bash 명령어를 수행
두번째 방식) chmod 744 ./test.bash 명령어를 수행
./test.bash 명령어를 수행
→ 아무래도 첫번째 방식이 더 쉬움
6. 리다이렉션 & 파이프
1. >: 리다이렉션 기호
- >의 왼쪽 측면의 출력 결과가 >의 오른쪽 측면으로 쓰여짐
- 예: ls -al > sample.txt → 디렉토리의 내용물이 sample.txt 파일에 쓰여짐
2. |: 파이프 기호
- |의 왼쪽 측면의 출력결과가 |의 오른쪽 측면의 입력으로 들어감
- 예: ps -aef | grep system
→ 현재 수행중인 프로세스들의 상태정보가 grep 명령어의 입력으로 들어감
→ "system" 패턴을 포함하는 프로세스들을 찾아서 출력함
7. 변수
1. 데이터 타입이 필요없음
- 숫자, 문자, 문자열을 포함함
2. 변수 선언이 필요없음
- 변수에 값이 할당되면 변수가 생성됨
3. 변수 생성과 참조
- $: 변수의 값을 나타내는데 사용됨
- 예:
tmp = 12
echo $tmp
echo 1+1 // 1+1 출력됨
echo $((1+1)) // 2 출력됨
8. 연산자
1. 문자열 비교 연산자: =
- 예
if [ $s1 = $s2 ];
*주의: 띄어쓰기 정확히 해줘야 함!
2. 산술 연산자: +, -, *, /, %
3. 산술 연관 연산자
-lt: less than (<)
-gt: greater than (>)
-le: less than or equal to (<=)
-ge: greater than or equal to (>=)
-eq: equal to (=)
-ne: not equal tp (!=)
9. 조건문, 반복문
1. if문
띄어쓰기 주의!
if [ 조건 ]; then
내용
fi
2. if-else문
if [ 조건 ]; then
내용
else
내용
fi
3. for 루프
for i in `seq 1 5`;
do
내용
let j+=1
done
기호는 '가 아니라 `다!
4. while 루프
while [ $cnt -lt 5];
do
내용
let cnt+=1
done
5. break, continue문
- break: 조건에 해당하는 순간부터 반복문을 빠져나감
- continue: 조건에 해당하는 순간만 제외하고 반복
10. Bash 쉘 스크립트 프로그래밍 문제
1. 홈디렉토리 아래 "exercise" 디렉토리를 만들고, 루프문을 이용해서 "test1", "test2", "test3", "test4", "test5" 디렉토리들을 "exercise" 디렉토리 아래 만드시오.
#! /bin/bash
mkdir ~/exercise
cd ~/exercise
for i in `seq 1 5`;
do
mkdir test$i
done
2. 문자열 "Information Security"을 10번 출력하시오.
#! /bin/bash
cnt=0
while [ $cnt -lt 10];
do
let cnt+=1
echo "Information Security"
done
3. n*175가 10000보다 큰 조건을 만족하는 정수 n 중에서 가장 작은 값을 출력하시오.
#! /bin/bash
n=1
for i in `seq 1 100`
do
let i*=175
if [ $i -gt 10000 ]; then
break
fi
let n+=1
done
echo $n
'3-2 > 시스템보안' 카테고리의 다른 글
| 시스템 보안 06. 쉘코드 기본 개념 및 연습문제 (0) | 2023.11.21 |
|---|---|
| 시스템 보안 05-1. 버퍼 오버플로우 공격 (0) | 2023.11.03 |
| 시스템 보안 04. gdb 디버거 (0) | 2023.10.31 |
| 시스템 보안 03. 리눅스 시스템 보안 (0) | 2023.10.04 |
| 시스템보안 02. 패스워드 (0) | 2023.09.30 |