본문 바로가기

학습 기록 (Learning Logs)/CS Study

리눅스 서버 관리 기초

 

 


공통 질문

 

SELinux는 무엇이며 왜 사용하나요?
답변: 시스템 보안을 강화하기 위해 사용하며, 접근 권한을 강력히 제한합니다.

Daemon 프로세스란 무엇인가요?
답변: 백그라운드에서 실행되며, 사용자의 세션과 독립적으로 동작하는 프로세스입니다.

Systemctl과 Service의 차이는 무엇인가요?
답변: Systemctl은 systemd 기반, Service는 init.d 기반으로 동작합니다. systemd는 더 많은 기능을 제공합니다.

init.d와 systemd의 주요 차이점은 무엇인가요?
답변: systemd는 병렬 실행, 빠른 부팅, 의존성 관리를 지원합니다.

커널 로그를 확인하는 이유는 무엇인가요?
답변: 하드웨어 오류나 시스템 문제를 진단하기 위해 커널 로그를 확인합니다.

서버 성능 테스트를 어떻게 수행하나요?
답변: Apache Benchmark, sysbench, fio와 같은 도구를 사용합니다.

top 명령어의 주요 기능은 무엇인가요?
답변: CPU, 메모리, 프로세스 상태를 실시간으로 모니터링할 수 있습니다.

 


1. SELinux (Security-Enhanced Linux)

 

  • SELinux란?
    • 리눅스 커널 레벨의 보안 모듈로, 프로세스와 사용자에 대한 강력한 접근 제어를 제공합니다.
    • 보안 정책에 따라 파일, 프로세스, 네트워크 자원의 접근을 제어합니다.
  • CS 질문: SELinux의 주요 기능은 무엇인가요?
    • 답변:
      • Mandatory Access Control(MAC)을 기반으로 접근 권한을 강화합니다.
      • 프로세스가 예상치 못한 자원에 접근하려는 시도를 차단합니다.
      • 시스템 침입 방지 및 악의적인 코드 실행을 방어합니다.
  • 명령어 예시:
    • 현재 상태 확인: getenforce
    • 비활성화: /etc/selinux/config에서 SELINUX=disabled 설정 후 재부팅.

리눅스(Linux)

소프트웨어는 공개해서 사용해야한다, 무료로 사용 가능, 판매도 가능하다

 

  • 리눅스란?
    • 리눅스는 오픈 소스 기반의 유닉스(Unix) 계열 운영 체제입니다.
    • 리눅스 커널을 기반으로 만들어졌으며, 다양한 배포판(Distribution)이 존재합니다.
    • 안정성, 보안성, 커스터마이징 가능성 때문에 서버, 개발 환경, 임베디드 시스템 등에 널리 사용됩니다.
  • 리눅스의 특징
    1. 오픈 소스: 누구나 소스 코드를 보고, 수정하고, 배포할 수 있음.
    2. 멀티유저 & 멀티태스킹: 여러 사용자가 동시에 접속 가능하며 여러 작업을 동시에 실행할 수 있음.
    3. 강력한 보안: 사용자 권한과 파일 권한 관리를 통해 높은 보안성을 제공.
    4. 다양한 배포판: Ubuntu, CentOS, Fedora, Debian, Arch Linux 등 다양한 사용 목적에 맞는 배포판 제공.
  • 리눅스의 활용 분야
    • 서버 운영 체제: 전 세계 웹 서버의 대부분이 리눅스 기반.
    • 클라우드 플랫폼: AWS, Google Cloud, Azure 등 클라우드 서비스의 주요 OS.
    • 임베디드 시스템: IoT 기기, 스마트폰(Android), 라우터 등.
    • 개발 환경: 프로그래밍과 소프트웨어 개발에 최적화.

 

 

더보기

 

  • 리눅스의 주요 특징을 설명해보세요.
    • 답변: 멀티유저, 멀티태스킹, 오픈 소스, 높은 보안성, 다양한 배포판 지원 등이 있습니다.
  • CentOS와 RHEL의 차이는 무엇인가요?
    • 답변: CentOS는 RHEL의 무료 오픈 소스 버전으로, 상업적 지원이 없으며 커뮤니티 기반으로 운영됩니다. 반면 RHEL은 유료 라이선스와 공식 기술 지원을 제공합니다.
  • CentOS가 서버 운영에 적합한 이유는 무엇인가요?
    • 답변: RHEL과 동일한 안정성을 제공하며, 장기적인 지원 주기를 통해 보안 업데이트와 유지보수가 용이하기 때문입니다.
  • CentOS에서 SELinux를 사용하는 이유는 무엇인가요?
    • 답변: SELinux는 MAC 기반 보안을 제공하여 불필요한 접근을 제한하고, 악성 코드 실행 및 데이터 유출을 방지합니다.
  • 리눅스에서 중요한 로그 파일은 무엇인가요?
    • 답변: /var/log/messages, /var/log/syslog, /var/log/dmesg 등이 있으며, 시스템 이벤트, 커널 메시지, 사용자 액션 로그 등을 확인할 수 있습니다.

 


CentOS

출처: https://youtu.be/vAudLi2ydZg?si=Gn2FmSmB-kcGt-t1



 

 

 

  • CentOS란?
    • CentOS(CentOS Linux)는 **Red Hat Enterprise Linux(RHEL)**을 기반으로 만들어진 무료 오픈 소스 리눅스 배포판입니다.
    • RHEL과 100% 호환되며, 주로 서버 운영 체제로 사용됩니다.
    • 현재 CentOS 프로젝트는 "CentOS Stream"으로 전환되었으며, 이는 RHEL의 미래 버전 개발을 미리 테스트할 수 있는 롤링 릴리즈 배포판입니다.
  • CentOS의 특징
    1. RHEL 호환성: 엔터프라이즈 환경에서 많이 사용되는 RHEL과 동일한 안정성과 기능 제공.
    2. 무료: RHEL과 달리 상업적 지원 없이도 무료로 사용 가능.
    3. 장기 지원: 각 버전은 10년 이상의 지원 주기를 제공하여 안정적인 서버 운영에 적합.
    4. 커뮤니티 지원: 활발한 커뮤니티가 있어 사용자가 문제를 공유하고 해결할 수 있음.
  • CentOS의 주요 용도
    • 웹 서버: Apache, Nginx 등을 기반으로 한 서버 운영.
    • 데이터베이스 서버: MySQL, PostgreSQL 등.
    • 가상화 및 컨테이너: Docker, Kubernetes 등 컨테이너 기반 기술 지원.
    • 엔터프라이즈 환경: 기업용 애플리케이션 및 네트워크 서비스.

 

 

 

로키


2. Daemon

왼쪽은 계속해서 실행되고 있음
오른쪽은 필요한 순간에만 키고, 끈다

서버는 언제 요청이 올지 모르기 때문에
계속해서 떠있는다.
우리는 이것을 데몬이라고 한다.

 

  • Daemon이란?
    • 백그라운드에서 실행되는 서비스 프로세스입니다. 
  • CS 질문: 데몬과 일반 프로세스의 차이는 무엇인가요?
    • 답변:
      • 데몬은 시스템이 부팅될 때 자동 실행되며, 사용자 세션과 독립적으로 동작합니다.
      • 일반 프로세스는 사용자의 명령에 의해 실행되고, 사용자 세션이 종료되면 종료됩니다.

 

 

 

 

 

1. httpd (Apache HTTP Server)

설명

  • httpd는 Apache HTTP Server의 실행 프로세스입니다.
  • 웹 서버로서, 클라이언트(웹 브라우저)로부터 HTTP 요청을 받고 이를 처리하여 HTML, 이미지, 동영상 등의 웹 리소스를 반환합니다.
  • 웹 사이트를 운영하기 위한 대표적인 소프트웨어 중 하나입니다.

사용 사례

  • 사용자가 브라우저에서 특정 URL에 접속하면 httpd가 HTTP 요청을 처리하고 클라이언트에 웹 페이지를 반환합니다.
  • 웹 애플리케이션 백엔드와의 통신을 위한 API 엔드포인트를 제공.

 

sudo systemctl start httpd
sudo systemctl status httpd
netstat -tuln | grep :80

 

 

 

더보기
결과

 

  • 12828: 이 프로세스의 PID입니다.
  • grep httpd: 실행된 명령어로, 현재 httpd를 검색 중인 grep 프로세스입니다.

S+의 구성

  1. S (Sleep):
    • 의미: 프로세스가 중단 가능한 대기 상태에 있다는 것을 나타냅니다.
      • 이는 프로세스가 어떤 작업을 기다리고 있지만, 신호(Signal)를 받으면 즉시 깨어나서 실행을 재개할 수 있는 상태입니다.
    • 일반적으로 입력/출력(I/O) 작업을 기다리는 프로세스에서 흔히 나타나는 상태입니다.
    • 예: 파일 읽기/쓰기, 네트워크 요청 대기 등.
  2. + (Foreground):
    • 의미: 프로세스가 **포그라운드 그룹(Foreground Process Group)**에 속해 있다는 것을 나타냅니다.
      • 이 프로세스는 현재 활성화된 터미널과 연결되어 있으며, 사용자가 직접 상호작용할 수 있습니다.

 

2. sshd (OpenSSH Daemon)

설명

  • sshd는 OpenSSH 서버의 실행 프로세스입니다.
  • SSH 프로토콜을 사용하여 원격 로그인, 파일 전송 등을 가능하게 하는 보안 데몬입니다.
  • SSH 클라이언트(ssh)와 통신하여 암호화된 채널을 통해 명령어를 실행하거나 파일을 전송합니다.

사용 사례

  • 시스템 관리자 또는 개발자가 원격으로 서버에 접속하여 관리 작업을 수행.
  • Git과 같은 도구에서 SSH 키를 이용해 안전한 파일 전송 및 인증.
sudo systemctl start sshd
sudo systemctl status sshd
netstat -tuln | grep :22

 

 

더보기

1. macOS에서 서비스 관리

 

macOS에서 서비스 관리는 launchdlaunchctl 명령어를 통해 이루어집니다.

systemctl과 비슷한 작업을 수행하려면 launchctl을 사용해야 합니다.

 

 

(1) SSH 서버 활성화

macOS에서는 SSH 서버가 기본적으로 비활성화 상태일 수 있습니다.

SSH 서버를 활성화하려면 시스템 환경설정을 사용해야 합니다:

  1. 시스템 설정 > 공유로 이동합니다.
  2. 원격 로그인을 활성화합니다.
    • 이 작업을 수행하면 sshd가 실행됩니다.

 

(2) SSH 상태 확인

sshd가 실행 중인지 확인하려면 다음 명령어를 사용합니다

ps aux | grep sshd

 

 

 

 

  • devwonny: 이 프로세스를 실행한 사용자 이름입니다.
  • 9909: 프로세스 ID (PID)입니다. 이 프로세스는 9909번 ID를 가지고 있습니다.
  • 0.0: CPU 사용률(%)입니다. 현재 이 프로세스는 CPU를 거의 사용하지 않고 있습니다.
  • 0.0: 메모리 사용률(%)입니다. 현재 메모리를 거의 사용하지 않고 있습니다.
  • 410592720: 가상 메모리(Virtual Memory) 크기입니다.
  • 1168: 실제 메모리(Resident Memory) 사용량(KB)입니다.
  • s000: 터미널(TTY) 이름입니다. 이 프로세스가 s000 터미널에서 실행되고 있습니다.
  • R+: 프로세스 상태입니다.
    • R: Running 상태, 현재 실행 중.
    • +: 포그라운드(foreground) 작업을 나타냅니다.
  • 8:08PM: 프로세스가 시작된 시간입니다.
  • 0:00.01: 이 프로세스가 CPU에서 사용한 총 시간(초 단위)입니다.
  • grep sshd: 실행된 명령입니다. 이 프로세스는 grep sshd 명령을 실행하고 있습니다.

 

 

 

 

(3) SSH 서버 수동 시작, 정지

sudo launchctl load -w /System/Library/LaunchDaemons/ssh.plist
sudo launchctl unload -w /System/Library/LaunchDaemons/ssh.plist

 

 

 

 

3. mysqld (MySQL Daemon)

설명

  • mysqld는 MySQL 서버의 실행 프로세스입니다.
  • MySQL 데이터베이스 관리 시스템(DBMS)의 핵심 프로세스로, 데이터베이스 요청을 처리하고 데이터를 저장하거나 반환합니다.
  • SQL 쿼리를 통해 데이터를 삽입, 업데이트, 삭제, 조회할 수 있도록 지원합니다.

사용 사례

  • 웹 애플리케이션에서 사용자 정보, 제품 정보 등을 데이터베이스에 저장하고 관리.
  • 데이터 분석 작업에서 SQL 쿼리를 통해 대량의 데이터를 검색 및 집계.
sudo systemctl start mysqld
sudo systemctl status mysqld
netstat -tuln | grep :3306

 

 

 


3. Systemctl vs Service

  • Systemctl:
    • 사용: Linux의 systemd 기반 시스템에서 사용.
    • 기능: 서비스의 시작, 중지, 재시작, 상태 확인 등을 관리.
sudo systemctl start sshd      # 서비스 시작
sudo systemctl stop sshd       # 서비스 중지
sudo systemctl restart sshd    # 서비스 재시작
sudo systemctl status sshd     # 서비스 상태 확인
  • Service:
    • 사용: systemd 이전의 init 시스템이나 Upstart를 사용하는 Linux 배포판에서 사용.
    • 기능: 서비스 관리 기능은 systemctl과 비슷하나, 더 단순한 방식.
sudo service sshd start        # 서비스 시작
sudo service sshd stop         # 서비스 중지
sudo service sshd restart      # 서비스 재시작
sudo service sshd status       # 서비스 상태 확인

 

 

CS 질문: systemctl과 service의 차이는 무엇인가요?

 

 

더보기

2. macOS에서 서비스 관리 (launchctl)

 

macOSsystemd를 사용하지 않으므로 systemctl 명령어는 지원되지 않습니다

macOS는 **launchd**와 **launchctl**을 사용하여 서비스를 관리합니다

 

 

# 서비스 시작
sudo launchctl load -w /System/Library/LaunchDaemons/ssh.plist


# 서비스 중지
sudo launchctl unload -w /System/Library/LaunchDaemons/ssh.plist

# 서비스 상태 확인
sudo launchctl list | grep sshd

# 현재 실행 중인 모든 서비스 확인
sudo launchctl list

 

 

 

 

 

 

 


4. init.d vs systemd

init.d란?

  • 과거 방식의 서비스 관리 시스템으로, SysVinit 기반입니다.
  • Linux 시스템의 부팅 과정과 서비스 관리(시작, 중지 등)를 담당합니다.
  • init.d는 단순히 여러 Bash 스크립트를 사용하여 서비스를 관리합니다.

작동 방식

  • 부팅 시 /etc/init.d/ 디렉토리에 있는 스크립트를 순서대로 실행하여 서비스를 시작하거나 중지합니다.
  • 스크립트는 각 서비스의 동작을 정의하며, 수동으로 작성해야 합니다.

특징

  • 직렬 실행: 한 번에 하나씩 순차적으로 실행되므로 부팅 속도가 느립니다.
  • 의존성 관리 부족: 서비스 간의 의존성을 명확히 정의하거나 관리하기 어렵습니다.
  • 단순 구조: Bash 스크립트를 기반으로 동작하므로 이해하기 쉽지만, 확장성과 기능이 제한적입니다.

 

systemd란?

  • systemd는 현대적인 서비스 관리 시스템으로, init.d의 한계를 극복하기 위해 만들어졌습니다.
  • 단순한 서비스 관리뿐만 아니라 병렬 처리, 의존성 관리, 타이머, 소켓 활성화 등을 지원합니다.
  • 모든 서비스는 **유닛 파일(unit files)**을 통해 관리됩니다.

작동 방식

  • 부팅 시 /etc/systemd/system/에 있는 유닛 파일에 따라 필요한 서비스를 병렬로 실행합니다.
  • 서비스 간의 의존성을 확인하고 필요한 순서대로 실행하거나 중지합니다.

특징

  • 병렬 실행: 여러 서비스를 동시에 실행하여 부팅 속도가 빨라집니다.
  • 의존성 관리: 서비스 간의 관계를 명확히 정의하고 관리합니다(예: 네트워크가 켜진 후에만 서비스 실행).
  • 다양한 기능: 타이머, 소켓 활성화, 장치 관리 등 다양한 시스템 기능을 지원합니다.
  • 표준화된 구조: 모든 서비스는 .service 유닛 파일로 관리됩니다.

 

 

 

 

 


5. Kernel Log

  • Kernel Log란?
    • 커널에서 발생하는 이벤트나 오류를 기록한 로그.
    • 주로 시스템 디버깅 및 문제 해결에 사용됩니다.
  • 명령어 예시:
    • 커널 로그 확인: dmesg
    • 실시간 로그 확인: journalctl -k
  • CS 질문: 커널 로그를 확인하는 이유는 무엇인가요?
    • 답변:
      • 하드웨어 오류, 드라이버 문제, 시스템 부팅 문제를 진단하기 위해 사용합니다.

 

 

 

 

 

 


커널(Kernel)

 

 

 

  • 커널이란?
    • 운영 체제의 핵심(Core) 구성 요소로, 하드웨어와 소프트웨어 간의 중재자 역할을 수행합니다.
    • 하드웨어 자원(CPU, 메모리, 디스크, 네트워크 등)을 관리하고, 사용자 애플리케이션에 이러한 자원을 제공합니다.
    • 커널은 운영 체제에서 가장 중요한 부분으로, 시스템 안정성과 성능을 결정짓는 요소입니다.

 

커널의 주요 역할

  1. 프로세스 관리 (Process Management)
    • CPU에서 실행되는 여러 프로세스를 관리합니다.
    • 프로세스의 스케줄링(어떤 프로세스가 언제 실행될지 결정)을 담당합니다.
    • 프로세스 간 통신(IPC, Inter-Process Communication) 및 동기화 처리.
  2. 메모리 관리 (Memory Management)
    • 시스템 메모리(RAM)를 효율적으로 사용하도록 관리합니다.
    • 메모리 할당 및 해제를 수행하며, 가상 메모리(virtual memory)를 지원합니다.
    • 페이지 스왑(Swapping)을 통해 메모리 부족 문제를 해결합니다.
  3. 파일 시스템 관리 (File System Management)
    • 파일 생성, 삭제, 읽기/쓰기 등 파일 관련 작업을 관리합니다.
    • 다양한 파일 시스템(FAT32, ext4, NTFS 등)을 지원합니다.
  4. 장치 관리 (Device Management)
    • 하드웨어 장치(CPU, GPU, 디스크, 네트워크 카드 등)와 소프트웨어 간의 인터페이스를 제공합니다.
    • 디바이스 드라이버를 통해 하드웨어 제어.
  5. 네트워크 관리 (Networking)
    • 네트워크 통신 프로토콜(TCP/IP 등)을 구현하고 데이터 송수신을 처리합니다.
    • 시스템 간 네트워크 연결을 지원.
  6. 보안 관리 (Security Management)
    • 사용자와 프로세스 간 권한 관리(Access Control)를 통해 보안을 강화.
    • SELinux와 같은 보안 모듈을 통해 침입을 방지.

 

커널의 동작 방식

  • **사용자 모드(User Mode)**와 **커널 모드(Kernel Mode)**로 구분:
    1. 사용자 모드(User Mode):
      • 일반 애플리케이션이 실행되는 모드.
      • 하드웨어 접근은 불가능하며, 커널을 통해 자원에 접근.
    2. 커널 모드(Kernel Mode):
      • 커널이 실행되는 모드로, 하드웨어에 직접 접근 가능.
      • 높은 권한으로 시스템 자원을 관리.

 

커널의 종류

  1. 모놀리식 커널 (Monolithic Kernel)
    • 모든 핵심 기능(프로세스 관리, 파일 시스템, 네트워크 등)이 커널 내부에서 동작.
    • 특징: 빠른 속도, 하나의 큰 단위로 관리되며, 디버깅이 어려움.
    • 예: 리눅스 커널, 유닉스 커널.
  2. 마이크로커널 (Microkernel)
    • 최소한의 기능만 커널에 포함(프로세스, 메모리 관리 등 기본 기능).
    • 나머지 기능(파일 시스템, 네트워크 등)은 사용자 공간에서 실행.
    • 특징: 안정성과 보안성이 높지만 성능이 낮음.
    • 예: MINIX, QNX.
  3. 하이브리드 커널 (Hybrid Kernel)
    • 모놀리식 커널과 마이크로커널의 혼합형.
    • 예: Windows NT 커널, macOS X 커널(XNU).
  4. 엑소커널 (Exokernel)
    • 최소한의 하드웨어 추상화만 제공하며, 대부분의 기능을 애플리케이션이 처리.
    • 특징: 높은 유연성과 성능.

 

리눅스 커널 (Linux Kernel)

 

 

 

 

 

 

 

/etc/rc...

 

/etc/rc3.d

 

MacOs   /etc

 

  • 리눅스 커널 특징
    1. 오픈 소스: 누구나 코드 수정 및 배포 가능.
    2. 모놀리식 커널: 커널 내에서 모든 주요 기능이 동작.
    3. 모듈화 지원: 커널 기능을 동적으로 추가/제거 가능(lsmod, modprobe 명령어 사용).
    4. 다중 플랫폼: 다양한 아키텍처(x86, ARM, RISC-V 등) 지원.
  • 리눅스 커널 업데이트
    • 커널 업데이트는 보안 취약점 수정, 성능 향상, 새로운 하드웨어 지원을 위해 필수.
    • 커널 버전 확인: uname -r
    • 커널 업데이트 방법: 
    •  
sudo yum update kernel
sudo reboot

 

 

더보기

 

  • 커널이란 무엇인가요?
    • 답변: 커널은 운영 체제의 핵심 부분으로, 하드웨어와 애플리케이션 사이에서 자원을 관리하고 중재하는 역할을 합니다.
  • 커널 모드와 사용자 모드의 차이는 무엇인가요?
    • 답변: 사용자 모드는 애플리케이션이 실행되는 제한된 모드이며, 커널 모드는 하드웨어와 시스템 자원을 직접 관리하는 고권한 모드입니다.
  • 리눅스 커널이 오픈 소스라는 점의 이점은 무엇인가요?
    • 답변: 누구나 커널 소스를 수정하거나 개선할 수 있으며, 전 세계적으로 커뮤니티가 협력해 발전시킬 수 있습니다.
  • 커널을 업데이트해야 하는 이유는 무엇인가요?
    • 답변: 보안 취약점 수정, 성능 개선, 새로운 하드웨어 지원 등을 위해 업데이트가 필요합니다.
  • 모놀리식 커널과 마이크로커널의 차이는 무엇인가요?
    • 답변: 모놀리식 커널은 모든 기능이 커널 내에서 실행되며 성능이 뛰어나지만, 디버깅이 어렵습니다. 마이크로커널은 최소한의 기능만 커널에 포함되며 안정성과 보안성이 높지만 성능이 낮습니다

 


6. 벤치마크 테스트

  • 벤치마크란?
    • 서버 성능을 측정하고 최적화를 위한 기준 데이터를 수집하는 과정.
  • CS 질문: 서버 성능 테스트를 위한 방법은 무엇인가요?
    • 답변:
      • 네트워크 테스트: ab (Apache Benchmark), wrk
      • CPU 테스트: stress, sysbench
      • I/O 테스트: fio
  • 명령어 예시:
    • ab -n 1000 -c 10 http://localhost/ (1,000개의 요청, 동시 10개 요청).

 

 


7. man top

 

 

 

  • man top이란?
    • top 명령어의 사용법을 보여주는 매뉴얼.
    • top은 시스템의 실시간 프로세스 상태, CPU, 메모리 사용량을 모니터링하는 데 사용.
  • CS 질문: top 명령어의 주요 옵션은 무엇인가요?
    • 답변:
      • P: CPU 사용률 정렬.
      • M: 메모리 사용률 정렬.
      • k: 특정 PID 종료.

 

'학습 기록 (Learning Logs) > CS Study' 카테고리의 다른 글

kafka  (0) 2025.01.23
nestjs + kafka  (0) 2025.01.20
sort  (0) 2025.01.09
WebSocket  (0) 2025.01.06
AOP  (0) 2024.12.23