7 분 소요

전체 흐름 요약

이 글은 리눅스 학습 시리즈의 여덟 번째 파트로, 네트워크를 통한 파일 공유를 다룹니다. 리눅스 간 파일 공유를 위한 NFS와 윈도우와의 파일 공유를 위한 Samba를 모두 학습합니다. 서버 설정부터 클라이언트 접속, 자동 마운트 설정까지 실무에서 필요한 모든 내용을 포함합니다.


파일 공유 개요

파일 공유란?

네트워크를 통해 여러 시스템이 하나의 저장 공간을 공유하는 기술입니다.

graph TD
    A[파일 공유 시스템] --> B[NFS<br/>Linux ↔ Linux]
    A --> C[Samba/CIFS<br/>Linux ↔ Windows]

파일 공유 프로토콜 비교

프로토콜 용도 운영체제 포트
NFS 리눅스 간 공유 Linux/Unix 2049, 111
Samba/CIFS 윈도우 호환 공유 Linux ↔ Windows 445, 139

NFS (Network File System)

NFS 개념

NFS (Network File System)

  • Linux/Unix 시스템 간 저장 공간을 네트워크로 공유하는 시스템
  • 원격 디렉토리를 로컬 디렉토리처럼 사용
  • RPC (Remote Procedure Call) 기반

NFS 특징

  • 상태 정보를 저장하지 않음 (Stateless)
  • 마운트 시 쿠키를 부여하여 디렉토리 인식
  • portmap/rpcbind를 통한 동적 포트 할당
  • NFSv3, NFSv4 버전 존재

주요 구성 요소

  • 서버: 디렉토리를 공유하는 시스템
  • 클라이언트: 공유 디렉토리를 마운트하는 시스템
  • portmap/rpcbind: RPC 서비스 포트 관리

NFS 서버 설정 (Debian/Ubuntu)

1. 패키지 설치

# NFS 서버 설치
sudo apt update
sudo apt install nfs-kernel-server

# Debian/Ubuntu
sudo apt install nfs-kernel-server nfs-common

# CentOS/RHEL
sudo yum install nfs-utils

2. 공유할 디렉토리 생성

# 공유 디렉토리 생성
sudo mkdir -p /srv/nfs/share1
sudo mkdir -p /srv/nfs/share2

# 권한 설정
sudo chmod 755 /srv/nfs/share1
sudo chown nobody:nogroup /srv/nfs/share1

3. NFS 설정 파일 수정

# /etc/exports 파일 편집
sudo vi /etc/exports

# 다음 형식으로 추가:
# [공유할 디렉토리] [접근 허용 호스트/네트워크] [옵션]

exports 설정 예시

# 특정 IP에게 읽기/쓰기 권한
/srv/nfs/share1    192.168.1.100(rw,sync,no_subtree_check)

# 특정 네트워크 대역에 권한
/srv/nfs/share2    192.168.1.0/24(rw,sync,no_subtree_check)

# 여러 호스트 설정
/srv/nfs/public    192.168.1.100(rw) 192.168.1.101(ro)

# 읽기 전용
/srv/nfs/readonly  *(ro,sync,no_subtree_check)

NFS 옵션 설명

옵션 설명
rw 읽기/쓰기 권한
ro 읽기 전용
sync 동기화 (안전하지만 느림)
async 비동기화 (빠르지만 위험)
no_subtree_check 하위 디렉토리 체크 안 함 (성능 향상)
root_squash root를 nobody로 매핑 (기본값, 보안)
no_root_squash root 권한 유지 (위험)
all_squash 모든 사용자를 nobody로 매핑

4. NFS 서비스 시작

Debian/Ubuntu:

# exports 파일 다시 로드
sudo exportfs -ra

# 설정 확인
sudo exportfs -v

# NFS 서버 시작
sudo systemctl start nfs-kernel-server
sudo systemctl enable nfs-kernel-server

# 상태 확인
sudo systemctl status nfs-kernel-server

CentOS/RHEL:

# exports 파일 다시 로드
sudo exportfs -ra

# 설정 확인
sudo exportfs -v

# NFS 서버 시작
sudo systemctl start nfs-server
sudo systemctl enable nfs-server

# 상태 확인
sudo systemctl status nfs-server

5. 방화벽 설정

Debian/Ubuntu (UFW):

# NFS 포트 열기
sudo ufw allow from 192.168.1.0/24 to any port nfs
sudo ufw allow from 192.168.1.0/24 to any port 111

CentOS/RHEL (firewalld):

# NFS 서비스 허용
sudo firewall-cmd --permanent --add-service=nfs
sudo firewall-cmd --permanent --add-service=nfs3
sudo firewall-cmd --permanent --add-service=rpc-bind

# 또는 한번에
sudo firewall-cmd --permanent --add-service={nfs,nfs3,rpc-bind}

# 적용
sudo firewall-cmd --reload

# 확인
sudo firewall-cmd --list-all

6. 공유 확인

# 현재 공유 중인 디렉토리 확인
sudo exportfs -v

# 또는
sudo showmount -e localhost

NFS 클라이언트 설정 (Debian/Ubuntu)

1. 패키지 설치

# Debian/Ubuntu
sudo apt install nfs-common

# CentOS/RHEL
sudo yum install nfs-utils

2. NFS 서버의 공유 목록 확인

# 서버의 공유 디렉토리 확인
showmount -e 192.168.1.100

# 예상 출력:
# Export list for 192.168.1.100:
# /srv/nfs/share1 192.168.1.0/24
# /srv/nfs/share2 192.168.1.0/24

3. 마운트 포인트 생성

# 마운트 포인트 생성
sudo mkdir -p /mnt/nfs/share1
sudo mkdir -p /mnt/nfs/share2

4. 수동 마운트

# NFS 마운트
sudo mount -t nfs 192.168.1.100:/srv/nfs/share1 /mnt/nfs/share1

# 마운트 확인
df -h | grep nfs
mount | grep nfs

# 테스트
cd /mnt/nfs/share1
touch test.txt
ls -l

5. 자동 마운트 설정

# /etc/fstab 편집
sudo vi /etc/fstab

# 다음 줄 추가:
192.168.1.100:/srv/nfs/share1  /mnt/nfs/share1  nfs  defaults  0  0
192.168.1.100:/srv/nfs/share2  /mnt/nfs/share2  nfs  defaults  0  0

# 테스트 (모든 fstab 항목 마운트)
sudo mount -a

# 확인
df -h

6. 언마운트

# 언마운트
sudo umount /mnt/nfs/share1

# 강제 언마운트 (사용 중일 때)
sudo umount -f /mnt/nfs/share1

# 지연 언마운트 (더 이상 사용하지 않을 때 자동)
sudo umount -l /mnt/nfs/share1

NFS 실무 예시

시나리오 1: 웹 서버 데이터 공유

# 서버: /var/www/html 공유
sudo vi /etc/exports
/var/www/html  192.168.1.0/24(rw,sync,no_subtree_check,no_root_squash)

sudo exportfs -ra
sudo systemctl restart nfs-kernel-server

# 클라이언트: 마운트
sudo mount -t nfs 192.168.1.100:/var/www/html /var/www/html

시나리오 2: 백업 서버 구성

# 서버: 백업 디렉토리 공유
sudo mkdir /backup
sudo vi /etc/exports
/backup  192.168.1.0/24(rw,sync,no_subtree_check)

sudo exportfs -ra

# 클라이언트: 자동 백업 스크립트
#!/bin/bash
mount -t nfs 192.168.1.100:/backup /mnt/backup
tar czf /mnt/backup/backup_$(date +%Y%m%d).tar.gz /important/data
umount /mnt/backup

Samba (Windows 호환 파일 공유)

Samba 개념

Samba란?

  • SMB/CIFS 프로토콜을 사용하여 Linux와 Windows 간 파일 공유
  • 윈도우 네트워크에 리눅스를 통합
  • 프린터 공유도 지원

프로토콜

  • SMB (Server Message Block): 윈도우 파일 공유 프로토콜 (포트 445, 139)
  • CIFS (Common Internet File System): SMB의 확장 버전, 더 안정적

Samba 구성

  • 서버 → 클라이언트 방향:
    • Linux Samba 서버 → Windows/Linux 클라이언트
    • Windows 공유 → Linux 클라이언트 (CIFS)

Samba 서버 설정 (Linux → Windows/Linux)

1. 패키지 설치

# Debian/Ubuntu
sudo apt update
sudo apt install samba samba-common-bin

# CentOS/RHEL
sudo yum install samba samba-client

2. Samba 설정 파일 백업

# 원본 백업
sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.backup

3. Samba 설정 파일 수정

# 설정 파일 편집
sudo vi /etc/samba/smb.conf

기본 설정 예시

[global]
   workgroup = WORKGROUP
   server string = Samba Server %v
   netbios name = ubuntu-server
   security = user
   map to guest = bad user
   dns proxy = no

[public]
   comment = Public Shared Folder
   path = /srv/samba/public
   browsable = yes
   writable = yes
   guest ok = yes
   read only = no
   create mask = 0755

[private]
   comment = Private Shared Folder
   path = /srv/samba/private
   valid users = @sambagroup
   browsable = yes
   writable = yes
   read only = no
   create mask = 0700

설정 옵션 설명

옵션 설명
[공유이름] 공유 폴더 이름
comment 공유 설명
path 실제 디렉토리 경로
browsable 목록에 표시 여부
writable 쓰기 가능 여부
read only 읽기 전용 (writable과 반대)
guest ok 게스트 접속 허용
valid users 접근 가능 사용자
create mask 생성 파일 권한

4. 공유 디렉토리 생성

# 디렉토리 생성
sudo mkdir -p /srv/samba/public
sudo mkdir -p /srv/samba/private

# 권한 설정
sudo chmod 777 /srv/samba/public
sudo chmod 770 /srv/samba/private

# 그룹 생성 및 설정
sudo groupadd sambagroup
sudo chgrp sambagroup /srv/samba/private

5. Samba 사용자 추가

# 리눅스 사용자 생성 (이미 있으면 생략)
sudo useradd -M -s /usr/sbin/nologin sambauser

# Samba 비밀번호 설정
sudo smbpasswd -a sambauser
# 비밀번호 입력 요구됨

# Samba 사용자 활성화
sudo smbpasswd -e sambauser

# Samba 사용자를 그룹에 추가
sudo usermod -aG sambagroup sambauser

# Samba 사용자 목록 확인
sudo pdbedit -L

6. 설정 파일 검증

# 문법 오류 확인
testparm

# 간단히 확인
testparm -s

7. Samba 서비스 시작

Debian/Ubuntu:

# Samba 시작
sudo systemctl start smbd
sudo systemctl enable smbd

# 상태 확인
sudo systemctl status smbd

CentOS/RHEL:

# Samba 시작
sudo systemctl start smb
sudo systemctl enable smb

# 상태 확인
sudo systemctl status smb

8. 방화벽 설정

Debian/Ubuntu (UFW):

# Samba 포트 열기
sudo ufw allow samba
# 또는
sudo ufw allow 445/tcp
sudo ufw allow 139/tcp

CentOS/RHEL (firewalld):

# Samba 서비스 허용
sudo firewall-cmd --permanent --add-service=samba
sudo firewall-cmd --reload

Samba 클라이언트 (Linux → Windows 공유 접속)

1. 필요 패키지 설치

# Debian/Ubuntu
sudo apt install cifs-utils smbclient

# CentOS/RHEL
sudo yum install cifs-utils samba-client

2. Windows 공유 폴더 확인

# Windows 공유 목록 확인
smbclient -L //192.168.1.200 -U username

# 예시 출력:
# Sharename       Type      Comment
# ---------       ----      -------
# SharedFolder    Disk      My Shared Folder
# IPC$            IPC       Remote IPC

3. Windows 공유 폴더 마운트

# 마운트 포인트 생성
sudo mkdir /mnt/windows_share

# 수동 마운트
sudo mount -t cifs //192.168.1.200/SharedFolder /mnt/windows_share -o username=윈도우사용자,password=비밀번호

# 또는 인증 정보 입력 방식
sudo mount -t cifs //192.168.1.200/SharedFolder /mnt/windows_share -o username=윈도우사용자
# 비밀번호 입력 프롬프트 표시됨

# 확인
df -h | grep cifs

4. 자동 마운트 설정

# 인증 파일 생성 (보안)
sudo vi /root/.smbcredentials

# 내용:
username=윈도우사용자
password=비밀번호

# 권한 설정
sudo chmod 600 /root/.smbcredentials

# /etc/fstab 편집
sudo vi /etc/fstab

# 추가:
//192.168.1.200/SharedFolder  /mnt/windows_share  cifs  credentials=/root/.smbcredentials,uid=1000,gid=1000  0  0

# 테스트
sudo mount -a
df -h

5. 언마운트

# 언마운트
sudo umount /mnt/windows_share

# 강제 언마운트
sudo umount -f /mnt/windows_share

Windows에서 Linux Samba 접속

Windows 탐색기에서 접속

1. Windows 탐색기 열기
2. 주소창에 입력: \\192.168.1.100\public
3. 사용자 인증 필요 시:
   - 사용자: sambauser
   - 비밀번호: (설정한 비밀번호)

네트워크 드라이브 연결

1. 내 PC > 네트워크 드라이브 연결
2. 폴더: \\192.168.1.100\public
3. 다른 자격 증명 사용
4. 완료

Samba 실무 예시

시나리오 1: 부서 공유 폴더 설정

# 부서별 디렉토리 생성
sudo mkdir -p /srv/samba/{dev,sales,hr}

# 그룹 생성
sudo groupadd dev_team
sudo groupadd sales_team

# 설정 파일
sudo vi /etc/samba/smb.conf

[Development]
   path = /srv/samba/dev
   valid users = @dev_team
   writable = yes
   browsable = yes
   create mask = 0770

[Sales]
   path = /srv/samba/sales
   valid users = @sales_team
   writable = yes
   browsable = yes
   create mask = 0770

시나리오 2: 읽기 전용 공용 자료실

# 공용 자료 디렉토리
sudo mkdir /srv/samba/docs

# 설정
[Documents]
   path = /srv/samba/docs
   browsable = yes
   read only = yes
   guest ok = yes

NFS vs Samba 비교

특성 NFS Samba
주 용도 Linux ↔ Linux Linux ↔ Windows
프로토콜 NFS SMB/CIFS
포트 2049, 111 445, 139
성능 빠름 보통
설정 간단 복잡
인증 호스트 기반 사용자 기반
사용 예 서버 간 데이터 공유 윈도우 호환 필요 시

주요 개념 요약표

개념 설명 핵심 명령어
NFS Linux 간 파일 공유 exports, exportfs, mount
Samba Windows 호환 파일 공유 smb.conf, smbpasswd
exports NFS 공유 설정 파일 /etc/exports
showmount NFS 공유 목록 확인 showmount -e
CIFS Windows 공유 마운트 mount -t cifs
smbclient Samba 클라이언트 도구 smbclient -L
testparm Samba 설정 검증 testparm
rw/ro 읽기쓰기/읽기전용 NFS, Samba 옵션

댓글 남기기