발자취

시스템보안 01. 리눅스 시스템 본문

3-2/시스템보안

시스템보안 01. 리눅스 시스템

해린 2023. 9. 30. 01:36

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