본문 바로가기
2023_국민대/AI 개발 환경의 이해

[Linux] Linux 개발 환경

by yejineee 2023. 4. 15.

Linux 부팅 레벨

리눅스 시스템에서 /etc/rc.d/sysinit 스크립트 파일이 실행되어 시스템 최기화 및 부팅 완료

런레벨(Runlevel)

시스템 관리를 용이하게 하기 위해 만들어짐

시스템을 실행할 때, 네트워크를 사용할지, 여러 명의 사용자가 로그인하는 것을 허용할지, 그래픽 인터페이스 사용할지 등을 구분해서 시스템을 구동시키는 것

 

# runlevel

현재 실행중인 리눅스 시스템의 런레벨 확인

 

  • 6가지 런레벨 존재
Runlevel 설명 특징
0 Halt (Do Not set initdefault to this) 시스템 중지
기본값으로 설정 불가
# init 0 → 실행시, 시스템 종료
1 Single user mode 싱글모드(관리모드)
로그인 과정 없이 root 계정으로 로그온
네트워크, 서버, 파일 공유 등과 같은 서비스 사용 X
시스템 점검/복구, root 계정 패스워드 초기화 등에 사용
(즉, 시스템 관리 목적으로 사용)
2 Multiuser, without NFS
(The same as 3,
if you do not have networking)
NFS를 지원하지 않는 멀티유저 모드
여러 계정으로 로그온 가능
Runlevel 3에서 네트워크를 사용하지 않는 것과 동일
3 Full multiuser mode NFS를 지원하는 멀티유저 모드
서버용도로 사용되는 리눅스시스템에서 가장 많이 사용되는 레벨
4 unused 사용하지 않는 런레벨
사용자가 지정해서 사용 가능
5 X11 X Window를 사용하는 멀티유저 모드 (그래픽 인터페이스)
최근 배포판에서 기본값으로 사용됨
6 reboot (Do Not set initdefault to this) 재부팅시 사용
기본값으로 설정 불가

NFS; Network File System

Linux 컴퓨터끼리 저장공간을 공유할 수 있도록 해주는 시스템


Linux Deamon

리눅스에서 메모리 위에 올라가 있으면서 클라이언트의 요청을 처리하거나 리눅스 시스템이 구동되는데 필요한 기능 제공

사용자가 직접적으로 제어하지 않고, 백그라운드에서 돌면서 여러 작업을 하는 프로그램

 

종류 역할
sshd 원격 접속
syslog 시스템 로그 관리
network 네트워크 서비스
iptables 방화벽
httpd 웹서버

Linux RAID (Redundant Array Independent Disk)

여러개의 디스크를 활용하여 고성능의 디스크처럼 사용

Striping: 연속된 데이터를 여러 개의 디스크에 기록하는 기술

Mirroring: 디스크 하드웨어 장애가 발생했을 때, 데이터를 빠르게 복구할 수 있도록 데이터를 복사하는 기술

Spanning: 물리적인 여러 하드 디스크를 모아서 하나의 큰 용량을 제공하는 기술

Linux RAID 0 (Striping)

최소 2개 이상의 디스크 필요

데이터를 순차적으로 write

안정성보다는 고성능을 위해 사용

두 디스크 중 하나의 디스크에 Fault가 발생 → 데이터 절반이 날아감

RAID 0

Linux RAID 1 (Mirroring)

안정성에 중점

하나의 디스크가 Fault가 발생 → 나머지 하나의 디스크를 통해 데이터 접근 가능

전체 디스크 용량에 비해 사용 가능한 용량은 절반이 됨

RAID 1

Linux RAID 1+0 & 0+1

RAID 0+1    RAID 1+0


Linux Filesystem

Filesystem

파일에 이름을 붙이고, 저장 & 탐색을 위해 어디에 위치 시킬 것인지 나타내는 체계

파일이 디스크 상에서 구성되는 방식을 뜻함

(도서관에서 저자, 책 제목 등의 필터로 검색 가능)

 

NTFS (Windows OS filesystem)

EXT4, XFS (Linux OS filesystem)

Linux Filesystem 종류

저널링 파일시스템 (Journaling Filesystem)

  • 주 파일 시스템에 변경사항을 반영하기 전에 저널안에 생성되는 변경사항을 추적하는 파일시스템
  • 복구가 빠름
  • 무결성 체크함
  • 속도가 느림

저널링 파일시스템 종류

  • ext3
  • ext4 (ext3보다 연속적인 블록 할당 가능, 파일 접근 속도 향상)
  • XFS (신속한 읽기, 쓰기 트랜잭션이 가능한 고성능 제공)

Linux Filesystem 구조

Disk → partitioning을 통해서 구분

partition → 용도, 사용자 구분 가능

 

Boot Block OS 설치 관련

Super Block 속성 등 자세한 메타 데이터가 들어가 있는 곳

속성에 있는 위치는 위치 Block이라고 할 수는 X ↝ 컴퓨터가 인식하는 것은 다르니까

Inode Block 데이터의 위치가 어떻게 되어있는지 위치 정보. 데이터의 주소

Directory Block & Data Block → 실제 데이터 값이 들어가 있는 곳


Linux Filesystem command

fdisk -I

  • 파일시스템 정보 확인 및 파티션 설정

mkfs.[filesystem 종류] [filesystem name]

  • 파일시스템 생성

fsck (file system check) [filesystem name]

  • 파일시스템 점검 및 복구

mount [filesystem name] [mount point]

  • 디바이스와 파일시스템 연결

Linux Filesystem permission

ls -al

- rw-r--r-- 1 root root 12 4ὶ 14 16:16 hello.txt
- rw-r--r-- 1 root  root  12  4ὶ 14 16:16 hello.txt
파일 유형 파일 허가 링크 수 소유자명
(계정명)
그룹명 파일 크기 마지막 변경된 날짜 마지막 변경된 시간 파일명

 

Owner Group Other Owner와 Group: 파일소유자 자신과 자신이 속한 그룹
Other: 제 3자, 웹사이트 방문객은 제 3자로 nobody로 취급
r w x r w x r w x r : 파일 읽기(4)
w : 파일 쓰기(2)
x : 파일 실행(1)
7 5 5 파일소유자는 그것을 읽고 쓰고 실행시킬 수 있지만,
제 3자는 읽고 실행만 가능
7 7 7 제 3자도 쓰기 권한이 주어짐

 

chmod

  • 파일 or 디렉토리의 사용 권한을 지정하는 명령어
chmod [사용자카테고리][연산자][권한] [파일명]

[사용자카테고리][연산자][권한]

  • u+w, u-x
  • g+x, g-wx
  • o=rwx, go-wx
  • a=rwx
사용자 카테고리 의미 연산자 기호 의미 권한 기호 의미
u 소유자 + 허가권 부여 r 읽기 허가
g 그룹 - 허가권 제거 w 쓰기 허가
o 기타사용자 = 특정 사용자에게 허가권 지정 x 실행 허가
a 모든 사용자 (u+g+o)    

 

chown

  • 파일 or 디렉토리의 소유자와 소유 그룹을 변경할 때 사용하는 명령어
  • ex) # chown ubuntu:ubuntu test.txt

chgrp

  • 파일 or 디렉토리의 사용자 그룹 권한 변경 명령어
  • ex) # chgrp root test.txt

Linux Network

유/무선으로 연결되어 특정 프로토콜을 통해 통신

7 Layers of the OSI Model


Linux iptables

방화벽을 설정하는 도구로 커널상에서 netfilter 패킷 필터링 기능을 사용자 공간에서 제어

특정 조건을 가지고 있는 패킷에 대해 허용(ACCEPT)과 차단(DROP)을 지정할 수 있음

체인(chain)

  • 어떠한 네트워크 트래픽(IP 패킷)에 대하여 정해진 규칙들을 수행
  • 들어오는 패킷(INPUT)에 대하여 허용, 거부, 드롭할 것인지 결정
filter INPUT 호스트 컴퓨터를 향한 모든 패킷
OUTPUT 호스트 컴퓨터에서 발생하는 모든 패킷
FORWARD 라우터로 사용되는 호스트 컴퓨터를 통과하는 패킷
nat postrouting 내부 네트워크에서 방화벽을 통해 외부로 나갈 때 사용
prerouting 외부에서 방화벽 내부 서버로 향하는 패킷을 방화벽이 보호하는 내부 서버로 포어딩 할 때 사용
mangle prerouting 라이팅 경로가 결정되기 전에 방화벽으로 들어오는 패킷에 대해 변경하거나 매칭
OUTPUT 내부에서 생성된 패키시 방화벽을 통해 나갈 때 변경하거나 매칭

 

매치(match)

  • iptables에서 패킷을 처리할 때 만족해야 하는 조건을 가리킴
  • 이 조건을 만족시키는 패킷들만 규칙 적용
규칙 특징
--source (-s) 출발지 IP주소나 네트워크와의 매칭
--destination (-d) 목적지 IP주소나 네트워크와의 매칭
--protocal (-p) 특정 프로토콜과의 매칭
--in-interface (i) 입력 인터페이스
--out-interface (-o) 출력 인터페이스
--state 연결 상태와의 매칭

 

타겟(target)

  • iptables는 패킷이 규칙과 일치할 때 동작을 취하는 타겟 지원
규칙 특징
ACCEPT 패킷 받아들임
DROP 패킷 버림 (패킷이 전송된 적이 없던 것처럼)
REJECT 패킷을 버리고 이와 동시에 적절한 응답 패킷 전송
LOG 패킷을 syslog에 기록
RETURN 호출 체인 내에서 패킷 처리를 계속함

 

연결 추적(Connection Tracking)

  • 내부 네트워크 상 서비스 연결 상태에 따라서 그 연결을 감시하고 제한할 수 있게 함
  • 상태에 기반한 iptables 연결 추적 기능은 어니 네트워크 프로토콜에서 사용 가능
규칙 특징
NEW 새로운 연결을 요청하는 패킷
ESTABLISHED 기존 연결의 일부인 패킷
RELATED 기존 연결에 속하지만 새로운 연결을 요청하는 패킷
INVALID 연결 추적표에서 어디 연결에도 속하지 않는 패킷

Linux iptables 옵션

iptables 설치 및 사용 옵션

사용 옵션 설명
-A (--append) 새로운 규칙 추가
-D (--delete) 규칙 삭제
-C (--check) 패킷 테스트
-R (--replace) 새로운 규칙으로 교체
-I (--insert) 새로운 규칙 삽입
-L (--list) 규칙 출력
-F (--flush) chain으로부터 규칙을 모두 삭제
-N (--new) 새로운 chain 만듦
X (--delete-chain) chain 삭제
-P (--policy) 기본정책 변경

Linux iptables 설정

INPUT 체인에 프로토콜이 tcp이며 목적지 포트가 22번인 패킷에 대해 허용하도록 추가

# iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT

 

INPUT 체인에 대한 기본 정책을 드롭하도록 변경

# iptables -P INPUT DROP

 

체인에 정의된 모든 규칙 삭제

# iptables -F

 

기본 정책을 ACCEPT로 변경

# iptables -P INPUT ACCEPT

 

INPUT 체인에 로컬 호스트 인터페이스에 들어오는 모든 패킷을 허용하도록 추가

# iptables -A INPUT -i lo -j ACCEPT

 

INPUT 체인에 state 모듈과 매치되는 연결상태가 ESTABLISHED, RELATED인 패킷에 대해 허용하도록 추가

# iptables -A INPUT -m state --state ESTABLISHED, RELATED -j ACCEPT


Linux tcp-wrapper

네트워크 서비스에 관련한 트래픽을 제어하고 모니터링 가능

호스트명 및 서비스명을 로그에 남기고 허가된 시스템은 서비스를 제공하고 허가되지 않은 경우에는 접속 차단

 

Linux tcp-wrapper (설정 파일)

/etc/hosts.deny

  • 적혀있는 조건에 해당하는 패킷 차단

/etc/hosts.allow

  • deny에서 모든 접근을 차단 한 후 허용된 서비스와 IP만 접근 허용

Linux tcp-wrapper (ssh 접속 차단 및 허용)

tcp-wrapper 설치: 모든 호스트에 대한 접근을 차단하고 허가된 호스트만 접근 허용

블랙리스트 설정

  • sshd: ALL (서비스명: 모든 접근)

화이트리스트 설정

  • sshd: 172.X.X.X (서비스명: 허용할 IP)

다른 호스트에서 ssh 접근 시도

/var/log/secure 파일 기록 확인

Linux tcp-wrapper (다른 설정 방식)

예약어 및 패턴 매치 형식
ALL 모든 서비스 or 모든 호스트
LOCAL 같은 네트워크에 있는 모든 호스트
UN(KNOWN) 이름이 알려지지 않은(알려진) 사용자 이름 or 주소가 알려지지 않은(알려진) 호스트
PARANOID 주소와 일치하지 않는 이름을 가진 호스트
B EXCEPT A B에서 A를 제외한 모든 B
ALLOW / DENY 하나의 접근통제 파일에서 허가와 거부 규칙을 설정하고 싶은 경우 사용
xxx.yyy. 네트워크 주소가 xxx.yyy.로 시작하는 모든 호스트
.name.net 도메인 name이 name.net으로 끝나는 모든 호스트
198.200.201.0/255.255.254.0 198.200.201.0에서 255.255.254.0까지의 모든 호스트
대치 확장자 대치 확장 내용
%a(%A) 클라이언트(서버) 주소
%c 클라이언트 정보
%d 서비스 데몬 이름
%h(%H) 클라이언트(서버) 이름 or 주소
%n(%N) 클라이언트(서버) 이름
%p 데몬 프로세스 아이디
%S 서버 정보
%U 클라이언트 사용자 이름

Linux tcp-wrapper (IP Spoofing 공격 & 해결)

IP Spoofing 공격

  • TCP Wrapper에서 192.168.0.2로부터 오는 ssh 접속 요청을 허가하도록 설정되어있다고 가정할 때,
    크래커가 자신의 주소를 192.168.0.2로 속이고 접근

IP Spoofing 공격

tcpdump와 netlog를 활용하여 시스템의 패킷 모니터링


런레벨 참고| https://continuetochallenge.tistory.com/66

 

리눅스 런레벨(Runlevel)

여러분은 리눅스 하면 어떤 화면이 먼저 떠오르시나요? 대부분의 분들은 텍스트 커맨드 창을 떠올리실 겁니다. 근데 요즘 리눅스를 기본 설정으로 설치하다보면 그래픽 인터페이스로 설치가 되

continuetochallenge.tistory.com

7 Layers of the OSI Model 참고| https://www.bmc.com/blogs/osi-model-7-layers/

 

OSI Model: The 7 Layers of Network Architecture

 

www.bmc.com

 

 

'2023_국민대 > AI 개발 환경의 이해' 카테고리의 다른 글

[Linux] Docker 개발 환경  (0) 2023.04.16
[Linux] Docker  (0) 2023.04.16
[Linux] 웹 서버 구축 Apache  (0) 2023.04.15
[Linux] Virtual Box + Ubuntu Linux  (0) 2023.04.15
[Linux] Linux  (0) 2023.04.15