[이것이 리눅스다 4-4] 네트워크 개념, 프로세스, 소켓, GRUB

2024. 11. 14. 17:47Linux

이것이 리눅스다 강의 목차

4.9 네트워크 관련 개념과 명령어 SELinux

4.10 파이프/필터, 프로세스, 서비스/소켓

4.11 응급복구, GRUB, 커널 컴파일

 

 

* 배운 내용 위주로 하는거라 서비스 소켓과 GRUB는 생략되었다

 


 

네트워크 관련 필수 개념

 

TCP/IP

컴퓨터끼리 네트워크 상으로 의사소통을 하는 "프로토콜" 중가장 널리 사용되는 프로토콜의 한 종류

   

호스트 이름과 도메인 이름

호스트이름 : 각각의 컴퓨터에 지정된 이름

도메인이름 : naver.com과 같은 형식

 

IP 주소

각 컴퓨터의 랜카드에 부여되는 중복되지 않는 유일한 주소

4바이트로 이루어져 있으며, 각 자리는 0~255까지의 숫자

 

네트워크 주소

같은 네트워크에 속해 있는 공통된 주소 (ex: 192.168.111.0)

가장 마지막 8비트의 10진수가 0이다.

 

브로드캐스트 주소

내부 네트워크의 모든 컴퓨터가 듣게 되는 주소

현재 주소의 맨 끝자리를 255로 바꾼 주소 (C클래스)

 

게이트웨이, 라우터

GateWay Router
네트워크 주소가 다른 네트워크를 연결할때 반드시 거쳐가는 것
(인터넷 방향으로 나갈 때 찾아가야 할 IP주소)
네트워크 주소가 다른 경우 서로 통신을 하도록 도와주는 장치

 

넷마스크 & 클래스

클래스 : A,B,C 등 일정 구간을 기준으로 네트워크 / 호스트 규모를 결정한다

넷마스크 : subnet mask라고도 하며, 클래스리스 즉, 범위를 조금 더 세밀하게 조정할 수 있다

  

DNS 서버 (네임서버 주소)

URL을 해당 컴퓨터의 IP주소로 변환해주는 서버

/etc/resolv.conf 경로에 설정 파일 존재

 

VMware 디폴트 값

게이트웨이 및 DNS 서버 192.168.111.2
DHCP 서버 192.168.111.254

 

 

nmtui #GUI 기반
nmcli #CLI 기반 네트워크 관련작업 수행 가능

 

systemctl <start/stop/restart/status> network

네트워크의 설정을 변경한 후에, 변경된 내용을 시스템에 적용시키는 명령어

 

# 네트워크 장치를 on off
ifup <장치이름> 및 ifdown <장치이름>

# 장치의 IP주소 설정 정보를 출력
ifconfig <장치이름>

# DNS 서버의 작동을 테스트하는 명령어
nslookup

# 해당 컴퓨터가 네트워크 상에서 응답하는지를 테스트
ping < IP주소 또는 URL>

 

 

/etc/sysconfig/network
/etc/sysconfig/network-scripts/ifcfg-ens32
/etc/resolve.conf
/etc/hosts

해당 경로의 파일을 직접 편집하면 "nmuti/nmcli" 명령어를 사용하여 접근하지 않아도 된다. 

 


네트워크 보안을 위한 SELinux

 

SELinux

보안에 취약한 리눅스를 보호하기 위해 탄생

 

SELinux의 3가지 레벨

강제(Enforcing) : 시스템 보안에 영향을 미치는 기능을 제한  

허용(Permissive) : 시스템 보안에 영향을 미치는 것을 허용은 하지만 로그를 남김

비활성(Disabled) : SELinux를 사용하지 않음 

 

파이프(Pipe) : |

두 개의 프로그램을 연결해주는 연결 통로

ls -l /etc | more
# ls -l /etc로 나온 결과를 페이지화 해서 출력한다

 

필터(filter)

필요한 것만 걸러주는 명령어 

grep, tail, wc, sort, awk, sed 등

grep "error" /var/log/syslog #파일에서 특정 패턴 검색

tail -n 20 /var/log/syslog # 마지막 20줄 출력 (default= 10)

wc /etc/passwd # 줄 수, 단어 수, 바이트 수 출력

sort names.txt # 기본 알파벳순으로 정렬

awk '{print $1}' file.txt # 첫번째 필드 출력 (첫번째 열)


sed 's/old/new/' example.txt # 줄당 첫번째 'old'를 'new'로 치환
sed 's/old/new/g' example.txt # 모든 'old'를 'new'로 치환
sed '5d' example.txt # 5번째 줄 삭제

해당 명령어들은 옵션에 대해 실습이 더 필요할거같다.

 

파이프와 필터 동시 사용 예시

ps -ef | grep bash
# ps -ef : 현재 실행중인 모든 프로세스 자세한 정보 출력
grep bash : bash가 포함된 라인만 필터링

 

실제 예시 실행 결과

 

리다이렉션

표준 입출력의방향을 바꿔 줌 

ls -l > list.txt # ls -l 실행시 결과를 list.txt에 저장한다 
soft < list.txt > out.txt # 실행 순서는 < list.txt , soft , > out.txt 이다

 


 

프로세스, 데몬

프로세스

메모리에 적재되어 CPU에 의해 실행되는 컴퓨터 프로그램

포그라운드 프로세스, 백그라운드 프로세스로 나뉜다

 

데몬 (백그라운드 프로세스)

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

백신 프로그램, 서버 데몬 등..

 

부모 프로세스와 자식 프로세스

모든 프로세스는 부모 프로세스를 가지고 있음

부모 프로세스를 kill 하면, 자식 프로세스도 자동으로 kill 됨

 

ps -ef | grep <프로세스 이름> # 현재 프로세스 상태 확인
kill -9 <프로세스 번호> # 해당 프로세스 강제 종료
pstree # 부모/자식프로세스의 관계를 트리 형태로 보여줌

 

gedit # GUI기반으로 editor 여는 것
gedit & # background에서 실행하고자 할때 &를 붙인다

필자는 CLI 기반으로만 실습을 진행하기 때문에 gedit 실행이 안되어, 다른 예제를 가져왔다

ping google.com # 멈추지 않는 이상 포그라운드(default)에서 계속 실행됨
# Ctrl + Z 누르기 (일시정지)
bg # 현재 중지시킨 작업 백그라운드로 전환

# Ctrl + C를 눌러도 종료되지 않음 (백그라운드를 종료시켜야 됨)
jobs # 현재 실행중인 백그라운드 작업

#종료시키기
kill %1 # 작업번호가 1인 백그라운드 작업은 종료됨
fg %1 # 작업번호 1번을 포그라운드로 전환
#Ctrl + C를 누를 경우 포그라운드로 전환되었기 때문에 종료됨

 


모듈의 개념과 커널 컴파일의 필요성

 

모듈

필요할 때마다 호출하여 사용되는 코드

 

커널

운영체제의 핵심 부분으로 하드웨어와 소프트웨어 간의 중재 역할

효율적이고 안전하게 리소스를 관리하며, 사용자와시스템이 상호작용할 수 있게 해주는 중요한 구성 요소   

 

커널 컴파일(업그레이드)

이 부분도 아직 실습을 진행하지 않았기 때문에.. 예제 코드를 들고왔다

cd linux-6.x # 커널을 설치했다는 전제 하에 커널 소스 디렉터리로 이동

make menuconfig # 커널 설정 메뉴 열기

 make 명령어 사용 시 

 ┌─────────────────────────────────── Linux Kernel Configuration ───────────────────────────────────┐
 │  Arrow keys navigate the menu.  <Enter> selects submenus --->.  Highlighted letters are hotkeys. │
 │  Pressing <Y> includes, <N> excludes, <M> builds as a module.  <Esc> exits.                      │
 ├──────────────────────────────────────────────────────────────────────────────────────────────────┤
 │    General setup  --->                                                                          │
 │    Processor type and features  --->                                                            │
 │    Power management and ACPI options  --->                                                      │
 │    Bus options (PCI, PCMCIA, EISA, MCA, ISA)  --->                                              │
 │    Executable file formats / Emulations  --->                                                   │
 │    Networking support  --->                                                                     │
 │    Device Drivers  --->                                                                         │
 │    File systems  --->                                                                           │
 │    Security options  --->                                                                       │
 │    Cryptographic API  --->                                                                      │
 │    Library routines  --->                                                                       │
 │                                                                                                 │
 │    [*] Enable loadable module support                                                           │
 │                                                                                                 │
 │  <Select>    < Exit >   < Help >                                                                │
 └──────────────────────────────────────────────────────────────────────────────────────────────────┘

와 같은 텍스트 기반 메뉴 화면이 나온다

Y : 해당 기능을 커널에 직접 포함

M : 모듈로 컴파일

모든 설정을 마치고 설정 창을 나오면

  Do you wish to save your new kernel configuration?
  < Yes >   < No >

라고 설정을 저장할지 묻는다.

Yes 선택 시 .config 파일에 저장되며 이 설정을 기반으로 커널이 컴파일된다.