본문 바로가기
Linux

리눅스 과정 11일차

by Mostlove 2025. 3. 4.
728x90
반응형

🚀 Linux 서비스 관리 개요

Linux 서버는 다양한 서비스를 제공하며, 클라이언트가 네트워크를 통해 서버의 서비스를 이용할 수 있도록 구성해야 해! 
이 서비스들은 데몬(daemon) 형태로 백그라운드에서 실행되며, 클라이언트는 포트를 통해 특정 서비스에 접속하지.


🔹 서비스 실행 및 클라이언트 접속 과정

1) 필요한 서비스 모듈/패키지 설치

  • 서비스가 기본적으로 설치되지 않았다면 **패키지 매니저(yum, apt 등)**를 사용해서 설치해야 해.
 
# 예: SSH 서버 설치 (CentOS 기준) yum install -y openssh-server

2) 설정/구성 파일 수정

  • 서비스 실행 전, 설정 파일을 수정해야 할 수도 있어 (예: /etc/ssh/sshd_config).
  • 서비스에 맞는 포트 변경, 접근 제어 설정 등을 조정할 수 있음.
 
vi /etc/ssh/sshd_config # SSH 설정 파일 편집

3) 서비스 실행 및 관리

  • 서비스 실행 명령어는 시스템의 서비스 관리 방식에 따라 다름.
 
# Init 방식 service sshd start
# 서비스 시작 service sshd stop
# 서비스 중지 service sshd restart
# 서비스 재시작 service sshd status
# 서비스 상태 확인 # Systemd 방식 (CentOS 7 이상, Ubuntu 16.04 이상) systemctl enable sshd.service
# 부팅 시 자동 실행 설정 systemctl start sshd
# 서비스 시작 systemctl stop sshd
# 서비스 중지 systemctl restart sshd
# 서비스 재시작 systemctl status sshd
# 서비스 상태 확인
# 과거 Init 스크립트 방식 /etc/(rc.d)/init.d/sshd start

4) 방화벽 및 SELinux 설정

  • 서비스가 실행 중이어도 방화벽(Firewall)이나 SELinux 설정에 막혀 있다면 클라이언트가 접근할 수 없어 🚫
 
# 방화벽에서 특정 서비스(예: SSH, 포트 22) 허용
firewall-cmd --permanent --add-service=ssh
firewall-cmd --permanent --add-port=22/tcp
firewall-cmd --reload
# SELinux 설정 변경 (필요한 경우)
setsebool -P httpd_can_network_connect 1

5) 서비스가 실행 중인지 확인

  • 서비스가 제대로 실행되고 있는지 확인하려면 포트 상태를 체크해야 해 🔍
 
netstat -nltp | grep 22 # 특정 포트(22, SSH)가 열려있는지 확인
netstat -nltp | grep sshd # 특정 서비스(SSHD)가 실행 중인지 확인
ss -nltp | grep 22 # 최신 시스템에서는 'ss' 명령어도 사용 가능

6) 클라이언트 접속 테스트

  • 모든 설정이 끝났다면, 클라이언트에서 서버로 접속해 보자!
 
ssh user@192.168.100.130 # SSH로 접속 (IP는 서버 주소)

🔹 서버 서비스 데몬(Server Service Daemon) 개념

🔹 서버에서 제공하는 주요 서비스

  • Mail(메일), Database(데이터베이스), Web(웹 서버), DNS, NIS, DHCP 등
  • 이 서비스들은 데몬(daemon) 형태로 실행되며, 특정 포트(well-known port)를 열어두고 클라이언트의 요청을 기다림.
  • 클라이언트 요청이 오면, 임의의 포트(dynamic port)로 연결하여 서비스 제공 → 이를 Passive 모드라고 함.

💡 예시) 웹 서버(Apache)

httpd # Apache 웹 서버 실행
port: 80 # 기본적으로 80번 포트를 사용

💡 예시) 데이터베이스 서버(MySQL)

mysqld # MySQL 데이터베이스 서버 실행
port: 3306 # 기본적으로 3306번 포트를 사용

🔹 데몬(daemon)의 종류

1️⃣ 단독(Standalone) 데몬

  • 독립적으로 실행되며 항상 메모리에 상주하는 서비스.
  • 예: httpd (Apache 웹 서버), sshd (SSH 서버), mysqld (MySQL 서버)

2️⃣ 슈퍼(Super) 데몬

  • 여러 개의 하위(child) 데몬을 관리하는 메인 데몬 역할.
  • 필요할 때만 특정 데몬을 실행하는 방식으로 자원을 절약할 수 있음.
  • 예: xinetd (슈퍼 데몬), inetd

📌 대부분의 데몬은 서비스명 + d 형태 (httpd, sshd, smtpd 등)

🚀 Linux 데몬(daemon) 관리 개념 정리

Linux에서 서비스는 데몬(daemon) 형태로 실행되며, 이를 관리하는 방식에 따라 **단독 데몬(Standalone Daemon)**과 **슈퍼 데몬(Super Daemon)**으로 구분할 수 있어. 


🔹 단독 데몬(Standalone Daemon)

💡 특징:

  • 각 서비스(Web, Database, Mail 등)는 자신만의 독립적인 인스턴스(객체)를 메모리에 계속 상주시켜서 요청을 기다림.
  • 각 서비스마다 소켓 처리 루틴을 메모리에 유지해야 해서 시스템 리소스를 많이 사용함.
  • 자주 사용되고, 성능이 중요한 서비스는 단독 데몬으로 구성하는 것이 일반적.

💡 예제:

  • 웹 서버(Apache, Nginx) → httpd, nginx
  • 데이터베이스 서버(MySQL, PostgreSQL) → mysqld, postgresql
  • 메일 서버(Postfix, Sendmail) → postfix, sendmail

💡 서비스 실행 방법:

 
# 단독 데몬 직접 실행 service httpd start   
# Apache 웹 서버 시작 service mysqld start
# MySQL 데이터베이스 시작 service postfix start
# Postfix 메일 서버 시작

📌 단독 데몬은 항상 메모리에 상주하며, 클라이언트 요청을 받을 준비가 되어 있음.


🔹 슈퍼 데몬(Super Daemon)

💡 특징:

  • 단독 데몬 방식은 메모리를 많이 사용하는 단점이 있어서, 이를 보완하기 위해 슈퍼 데몬이 등장!
  • 개별 데몬을 직접 실행하는 대신, xinetd(슈퍼 데몬)가 대표로 실행되어 모든 차일드 데몬을 관리함.
  • 클라이언트 요청이 들어올 때만 해당 차일드 데몬을 실행하는 방식이라서, 메모리를 절약할 수 있음.

💡 슈퍼 데몬이 관리하는 서비스 예시:

  • Telnet(23번 포트) → telnetd
  • SSH(22번 포트, 과거에 xinetd로 관리 가능) → sshd
  • Rsync(873번 포트) → rsyncd
  • DNS(Bind, 53번 포트) → named
  • DHCP(67, 68번 포트) → dhcpd

💡 작동 방식:
1️⃣ 슈퍼 데몬(xinetd)이 부팅 시 실행됨.
2️⃣ 클라이언트가 특정 서비스(예: Telnet, SSH)를 요청하면, xinetd가 해당 서비스 포트를 확인함.
3️⃣ 요청이 들어오면, 해당 서비스의 차일드 데몬을 실행시켜 연결을 제공함.
4️⃣ 서비스가 끝나면 차일드 데몬이 종료되고, xinetd는 새로운 요청을 기다림.

💡 슈퍼 데몬 실행 방법:

# xinetd 실행 service xinetd start
# 슈퍼 데몬 시작

📌 xinetd가 실행되면, 개별 차일드 데몬을 따로 실행할 필요 없이 자동으로 관리됨!

💡 예제:

  • Telnet(23번 포트) 요청이 들어오면 xinetd가 요청을 받아서 telnetd를 실행하고, 클라이언트와 연결.
  • 요청이 끝나면 telnetd는 종료되고, 메모리를 절약할 수 있음.

🔹 단독 데몬 vs 슈퍼 데몬 비교

구분단독 데몬(Standalone Daemon)슈퍼 데몬(Super Daemon)

특징 서비스가 항상 실행됨 요청이 들어오면 실행됨
리소스 사용량 많음 (메모리 상주) 적음 (필요할 때만 실행)
사용 서비스 Web, Database, Mail Telnet, SSH, Rsync, DHCP 등
예제 httpd, mysqld, postfix telnetd, rsyncd, dhcpd
실행 방식 개별 서비스 직접 실행 xinetd가 자동 실행

🎯 정리

단독 데몬(Standalone Daemon)

  • 성능이 중요한 웹 서버(Apache), 데이터베이스(MySQL), 메일 서버(Postfix) 등에 사용
  • 서비스가 항상 실행됨 (빠른 응답 가능)
  • 리소스를 많이 사용

슈퍼 데몬(Super Daemon)

  • **자주 사용되지 않는 서비스(Telnet, Rsync, DHCP 등)**에 사용
  • 필요할 때만 실행되므로, 메모리 절약 효과가 있음
  • xinetd가 모든 차일드 데몬을 자동으로 관리

🚀 서버 리소스 관리 및 패키지 설치 정리

서버가 여러 클라이언트와 연결되면 리소스(HDD, RAM, CPU) 사용량이 급증하게 돼. 이를 효율적으로 관리하려면 사용자별 리소스 제한을 설정하고, 패키지 관리 방식도 이해해야 해! 🎯


🔹 1️⃣ 서버 리소스 제한 설정

서버 리소스를 보호하기 위해 연결 세션 수, HDD 사용량, CPU·RAM 제한을 설정할 수 있어.

HDD 사용량 제한 (Disk Quotas)

사용자별 디스크 사용량을 제한하려면 disk quotas 설정을 사용하면 돼.

CPU, RAM, 프로세스 사용 제한

📌 설정 파일: /etc/security/limits.conf

📌 사용자/그룹별 제한 예시

bash
복사편집
# 특정 그룹(wheel)의 동시 로그인 최대 2명 제한 @wheel hard maxlogins 2 # centos 사용자는 CPU 사용을 최대 60분까지 제한 centos soft cpu 60 # users 그룹은 최대 10MB(10240000KB) 메모리 사용 제한 @users hard memlock 10240000 # root 사용자는 무제한 메모리 사용 가능 root - memlock *

💡 hard limit → 절대 초과 불가능
💡 soft limit → 일시적으로 초과 가능 (grace 기간 내)


🔹 2️⃣ CentOS 7 DVD 마운트 및 패키지 서명 검증

📌 CentOS7 설치 DVD 마운트

bash
복사편집
mount /dev/cdrom /media

📌 /media/Packages/ → 약 4000개의 .rpm 패키지 파일 존재
📌 RPM-GPG-KEY-CentOS-7 → 패키지 정품 인증을 위한 공개 키(Public Key)

💡 공개 키 인증이 중요한 이유?
👉 인터넷에서 받은 .rpm 파일이 신뢰할 수 있는지 확인하기 위해 공개 키(GPG Key) 검증을 사용!


🔹 3️⃣ Linux 패키지 설치 방법 정리

🔹 RedHat 계열 (CentOS, RedHat, Fedora, Rocky)

bash
복사편집
# 개별 패키지 설치 rpm -ivh package.rpm # 기존 패키지 업그레이드 rpm -Uvh package.rpm # 종속 패키지 포함하여 설치 yum -y install package.rpm

🔹 Debian 계열 (Debian, Ubuntu, Kali)

bash
복사편집
# 개별 패키지 설치 dpkg -i package.deb # 종속 패키지 포함하여 설치 apt -y install package.deb

💡 yum이나 apt를 쓰면 필요한 패키지까지 자동으로 설치되므로 더 유용해!


🔹 4️⃣ 서비스 설정 기본 원칙

📌 설정 파일은 키 = 값 형태

bash
복사편집
# 서비스 비활성화 → 활성화 변경 예시 disable = yes # 기존 설정 disable = no # 변경 후

💡 enable = yes와 같은 의미지만, 원래 키는 변경하지 않는 것이 원칙!

🚀 FTP 서버 관리 및 보안 설정 정리

FTP(File Transfer Protocol)는 서버-클라이언트 간 파일을 주고받는 서비스야.
FTP 사용법과 보안 설정까지 확실하게 정리해볼게! 🎯


🔹 1️⃣ FTP 기본 명령어

원격 FTP 서버 연결

ftp 서버_IP_주소

📌 연결 후 사용자명과 비밀번호 입력

파일 & 디렉터리 관리

 
ls # FTP 서버의 현재 디렉터리 목록 보기
!ls # 로컬(현재 PC) 디렉터리 목록 보기
pwd # 현재 FTP 서버에서 위치 확인
cd dir # FTP 서버에서 디렉터리 이동
lcd dir # 로컬(현재 PC)에서 디렉터리 이동

파일 업로드 & 다운로드

get file_name # FTP 서버에서 내 로컬 PC로 파일 다운로드
put file_name # 내 로컬 PC에서 FTP 서버로 파일 업로드
mget * # 서버에서 모든 파일 다운로드
mput * # 로컬에서 모든 파일 업로드

🔹 2️⃣ FTP 사용자 계정 & 접속 디렉터리

기본 로그인 디렉터리

🔹 centos/centos → /home/centos
🔹 anonymous/x → /var/ftp/pub

💡 Anonymous 로그인

  • 익명 사용자(비회원)도 파일 다운로드 가능
  • /var/ftp/pub에 파일을 넣으면 불특정 다수가 다운로드 가능
  • 보안상 위험할 수 있으므로 주의!

🔹 3️⃣ FTP 보안 강화: chroot 설정

💡 보안 문제: 디렉터리 트래버설 공격

  • FTP 사용자가 cd ../../../ 입력 시 최상위 루트(/)까지 접근 가능
  • 이를 악용하면 시스템의 중요 파일을 훔쳐볼 수 있음 🛑

해결책: chroot 설정

chroot를 적용하면 사용자가 현재 디렉터리를 최상위 /로 인식하게 되어
디렉터리 이동이 차단돼!

📌 VSFTPD(FTP 서버)에서 chroot 활성화 방법

vi /etc/vsftpd/vsftpd.conf

아래 옵션을 추가하거나 변경

chroot_local_user=YES # 모든 로컬 사용자에게 chroot 적용 allow_writeable_chroot=YES # chroot 내에서 쓰기 가능

📌 설정 반영

systemctl restart vsftpd

하드웨어 관리 

4GB 정도의 USB 하나가 있거나 VMware에 4GB HDD를 추가한 뒤 실습하면 된다.
이 USB나 GDD를 Linux시스템에 연결해서 사용할 떄 Linux 시스템이 이 하드웨어 장치를 무엇으로 어디에서 인신하는지와 이 하드웨어를 mount 해서 시트템에서 사용하는 방법, 사용자들의 홈디텍터리를 별도의 공가넹서 생성해서 사용자들의 디스크 사용공간을 규제할 수 있는 디스크 쿼타(Disk Quota)를 적용시키는 법, 그리고 하드디스크에 저장된 데이터를 안정하게 하는 RAID와 디스크 공간을 임의로 조절해서 시스템 운영을 여유롭게 할 수 있는 LVM도 함께 알아보자

🚀 Linux에서 저장장치 관리: mount와 umount

Linux에서는 HDD, USB, DVD 등 저장장치를 파일처럼 다룬다.
이런 저장장치를 사용하려면 파일시스템에 연결(마운트, mount) 해야 하고,
사용이 끝나면 연결 해제(언마운트, umount) 해야 해! 🎯


🔹 1️⃣ mount 명령어 (저장장치 연결)

📌 기본 형식

mount /dev/장치_명 마운트_포인트

💡 마운트 포인트를 지정하지 않으면 /media 디렉터리에 자동 마운트됨.

📌 마운트된 장치 확인

df -hT # 디스크 사용량 & 파일시스템 타입 확인
lsblk # 블록 장치 목록 확인
fdisk -l # 파티션 정보 확인
mount # 현재 마운트된 장치 목록 확인

📌 파일 시스템 타입에 따라 특정 장치만 확인

mount -t ext4 # ext4 파일 시스템만 필터링
mount -t nfs # NFS 파일 시스템만 필터링

🔹 2️⃣ 저장장치 마운트 예제

DVD 마운트하기 (iso9660 파일 시스템)

mount -t iso9660 /dev/sr0 /mnt/dvd

💡 sr0은 CD/DVD-ROM 드라이브 기본 장치명. /mnt/dvd에 연결됨.

USB 마운트하기 (vfat, fat32 파일 시스템)

mount -t vfat /dev/sdb1 /mnt/usb

💡 USB 장치(/dev/sdb1)를 /mnt/usb에 연결.

Windows NTFS 드라이브 마운트하기

mount -t ntfs /dev/sda1 /mnt/windows

💡 Windows HDD를 Linux에서 마운트.

Samba 공유 폴더 마운트하기 (cifs)

mount -t cifs -o username=사용자,password=비밀번호 //192.168.1.100/shared /mnt/samba

💡 Windows 공유폴더(\\192.168.1.100\shared)를 /mnt/samba에 마운트.


🔹 3️⃣ 마운트 옵션

옵션설명

defaults 일반적인 기본 설정
ro 읽기 전용(읽기만 가능)
rw 읽기/쓰기 가능
noexec 실행 파일 실행 금지
exec 실행 파일 실행 허용
user 일반 사용자도 마운트 가능
nouser root만 마운트 가능
sync 동기식 데이터 전송
async 비동기식 데이터 전송

📌 USB를 읽기 전용(ro)으로 리마운트

mount -o remount,ro /dev/sdb1

🔹 4️⃣ umount 명령어 (저장장치 연결 해제)

📌 기본 형식

umount /dev/장치_명

or

umount 마운트_포인트

📌 예제: USB 언마운트

umount /mnt/usb

or

umount /dev/sdb1

📌 마운트 해제 실패 시 강제 해제

umount -l /mnt/usb # lazy unmount (사용 중이더라도 해제)
umount -f /mnt/usb # 강제 언마운트

📌 Linux에서 파티션 생성하기 (fdisk & parted)

🛠 새로운 디스크에 파일 시스템을 만들려면 먼저 파티션을 생성해야 해!

  • fdisk는 2TB 이하의 디스크에 사용
  • parted는 2TB 이상의 디스크에 사용

1️⃣ fdisk로 파티션 생성 (2TB 이하 디스크)

bash
복사편집
fdisk /dev/sdb # 대상 디스크 선택

🔹 명령어 입력 순서

  • n → 새 파티션 생성
  • p → Primary 파티션 선택
  • 1 → 첫 번째 파티션 번호 입력
  • Enter (기본값 사용) → 시작 섹터 입력
  • Enter (기본값 사용) → 끝 섹터 입력
  • w → 변경사항 저장 후 종료

파티션 테이블 확인

fdisk -l /dev/sdb

파일 시스템 포맷하기 (ext4 예시)

mkfs.ext4 /dev/sdb1

2️⃣ parted로 GPT 파티션 생성 (2TB 이상 디스크)

parted /dev/sdb

🔹 명령어 입력 순서

mklabel gpt # GPT 파티션 테이블 생성 mkpart primary ext4 0% 100% # 전체 디스크를 ext4로 사용 quit

파일 시스템 포맷하기

mkfs.ext4 /dev/sdb1

3️⃣ 마운트해서 사용하기

mkdir /mnt/data mount /dev/sdb1 /mnt/data

부팅 시 자동 마운트 설정 (/etc/fstab 수정)

echo "/dev/sdb1 /mnt/data ext4 defaults 0 0" >> /etc/fstab

**포멧 해주는 -mkfs

블록장치를 파티션했으면 이제 리눅스 파일 시스템으로 만들어 주어야 데이터를 저장실 수 있다. Windows나 DOS에서의 포메(fomat)과 같은 개념이다. mkfs -f ext4 /dev/sdb1식이다

📌 Linux 파일 시스템 & 디스크 관리 명령어 정리


1️⃣ BTRFS (BeTteR File System)

특징

  • IBM이 제안, Oracle에서 개발
  • 최대 16EB(엑사바이트) 지원
  • 빠른 파일 시스템 생성
  • 데이터 및 메타데이터 체크섬 지원
  • 스냅샷 및 온라인 문제 해결 가능

2️⃣ XFS (Extended File System)

특징

  • SGI(Silicon Graphics Inc.)에서 개발
  • 최대 16EB 지원
  • 고성능, 안정적, 확장성 좋음
  • 64비트 저널링 및 디스크 조각 모음(defrag) 지원
  • CentOS 7부터 기본 파일 시스템으로 채택됨

3️⃣ 파일 시스템 점검 및 복구

🔹 fsck (or e2fsck)

파일 시스템 손상 시 점검 및 복구

fsck /dev/sda1 # 특정 파일 시스템 검사
e2fsck -f /dev/sda1 # ext 계열 파일 시스템 강제 검사
  • 마운트 해제 후 검사해야 함
 
umount /dev/sdb1 && fsck /dev/sdb1
  • / 또는 /boot처럼 마운트 해제할 수 없는 경우
 
mount -o remount,ro /

(⚠ 하지만 잘 실행되지 않는 경우도 있음 → /etc/fstab에서 주석 처리 후 재부팅하여 검사하는 게 좋음)


4️⃣ 물리적 디스크 손상 점검

🔹 badblocks

badblocks -v /dev/sdb1

(💡 -v 옵션을 사용하면 진행 과정을 확인 가능)


5️⃣ 디스크 용량 및 사용량 확인

🔹 df (Disk Free)

디스크 용량 확인

df -hT /dev/sdb1 # -h (사람이 읽기 쉽게), -T (파일 시스템 타입 표시)

🔹 du (Disk Usage)

디스크 사용량 확인

du -h /dev/sdb1 # -h 옵션으로 사람이 읽기 쉽게 표시

🔹 lsblk

블록 장치만 보기

lsblk -l

6️⃣ 블록 장치 복사

🔹 dd (Disk Dump)

디스크 복사

dd if=/dev/sr0 of=/tmp/dvd.file bs=1024k count=2 sync # 동기화 (버퍼에 남은 데이터까지 기록)

특수 입력 파일

dd if=/dev/null of=/tmp/testfile # 빈 파일 생성 dd if=/dev/zero of=/tmp/zero_file bs=1M count=10 # 10MB짜리 0으로 채운 파일 생성

📌 Linux 디스크 쿼타(Quotas) 설정 및 관리


1️⃣ 디스크 쿼타란?

멀티 사용자 시스템에서 특정 사용자/그룹의 디스크 사용량을 제한
특정 사용자가 너무 많은 용량을 사용하면 다른 사용자에게 영향이 갈 수 있음
root는 디스크 쿼타 적용을 받지 않으며 무제한 사용 가능
사용자의 홈 디렉터리에 쿼타를 설정하면 작업량(HDD 사용량)에 영향을 줌


2️⃣ 디스크 쿼타 설정 방법

사용자별 디스크 사용량을 제한하는 방법 1️⃣ 직접 설정 파일 수정

edquota test1 # test1 사용자의 쿼타 설정

2️⃣ 명령어로 설정

setquota -u test2 10000 12000 0 0 /quotas

(💡 test2 사용자의 하드 리미트 12000, 소프트 리미트 10000으로 설정)

3️⃣ 다른 사용자 설정을 복사하여 적용

edquota -up test1 test2

(💡 test1의 쿼타 설정을 test2에게 적용)


3️⃣ 디스크 쿼타 제한 방식

Hard Limit (하드 리미트)

  • 절대 초과할 수 없는 용량 한계
  • 사용자가 지정된 한계를 넘으면 즉시 저장이 불가능

Soft Limit (소프트 리미트)

  • 일시적으로 초과할 수 있는 한계
  • Grace Period(유예 기간) 동안 초과가 허용됨

📌 예시:

  • soft limit = 10000MB, hard limit = 12000MB
  • 사용자가 10000MB를 초과하면 유예 기간 동안 계속 사용할 수 있음
  • 유예 기간이 끝나면 hard limit(12000MB)에 도달하면 저장 불가능

4️⃣ 디스크 쿼타 주요 명령어

명령어설명
quota -u user 특정 사용자의 디스크 사용량 및 쿼타 확인
repquota -a 모든 사용자의 쿼타 상태 확인
edquota user 특정 사용자의 쿼타 설정
setquota -u user soft hard 0 0 /home 사용자별 쿼타 설정 (soft/hard limit)
edquota -up user1 user2 user1의 쿼타 설정을 user2에게 복사
quotaoff -a 디스크 쿼타 비활성화
quotaon -a 디스크 쿼타 활성화

 

 

 
 
 
 
반응형

'Linux' 카테고리의 다른 글

리눅스 과정 13일차  (1) 2025.03.06
리눅스 과정 12일차  (1) 2025.03.05
리눅스 과정 10일차  (0) 2025.02.28
리눅스 과정 8일차  (0) 2025.02.27
리눅스 과정 7일차  (0) 2025.02.26