홈서버 구축 완전 가이드 4편: 파일 서버 구축
Home Server Complete Guide Part 4: File Server Setup
서론: 왜 파일 서버인가?
홈서버를 구축하는 가장 큰 이유 중 하나가 바로 파일 서버입니다. 클라우드 서비스도 편리하지만, 매월 구독료를 내야 하고 저장 용량에 제한이 있습니다. 무엇보다 내 소중한 데이터가 다른 회사의 서버에 저장된다는 점이 불안할 수 있습니다.
자체 파일 서버를 구축하면 이런 걱정에서 벗어날 수 있습니다. 한 번 하드디스크를 구매하면 추가 비용 없이 무제한으로 사용할 수 있고, 데이터는 오직 내 집 안에만 존재합니다. 가족 사진, 동영상, 문서 등을 안전하게 보관하면서 어디서든 접근할 수 있는 나만의 클라우드를 만들어봅시다.
이번 편에서는 파일 서버의 핵심 기술인 Samba와 NFS를 중심으로, 다양한 기기에서 파일에 접근하는 방법과 안정적인 디스크 관리 방법까지 다루겠습니다.
1. 파일 공유 프로토콜 비교
1.1 주요 프로토콜 개요
파일을 네트워크로 공유하는 방법은 여러 가지가 있습니다. 각각의 특징을 이해하고 상황에 맞게 선택하는 것이 중요합니다.
| 프로토콜 | 주요 용도 | 장점 | 단점 |
|---|---|---|---|
| Samba (SMB/CIFS) | Windows와의 호환 | 모든 OS 지원, 설정 용이 | 상대적으로 느림 |
| NFS | Linux/Unix 환경 | 빠른 속도, 낮은 오버헤드 | Windows 지원 제한적 |
| SFTP | 보안 파일 전송 | 암호화, 방화벽 친화적 | 실시간 접근 불편 |
| WebDAV | 웹 기반 접근 | 어디서나 접근 가능 | 성능 제한 |
1.2 어떤 것을 선택해야 할까?
일반적인 가정 환경에서는 다음과 같이 추천합니다:
- Windows PC가 주력이라면: Samba가 최선입니다. 탐색기에서 네트워크 드라이브로 바로 연결됩니다.
- Linux나 Mac만 사용한다면: NFS가 더 빠르고 효율적입니다.
- 혼합 환경이라면: Samba와 NFS를 둘 다 설정하면 됩니다. 같은 폴더를 두 프로토콜로 공유할 수 있습니다.
- 외부 접속이 필요하다면: VPN을 통해 내부 네트워크에 접속하거나, SFTP를 사용하는 것이 안전합니다.
2. Samba 파일 서버 구축
2.1 Samba 설치
Samba는 Windows의 파일 공유 프로토콜(SMB)을 Linux에서 구현한 것입니다. Windows 탐색기에서 직접 접근할 수 있어 가장 범용적으로 사용됩니다.
# Samba 설치
sudo apt update
sudo apt install samba samba-common-bin
# 서비스 상태 확인
sudo systemctl status smbd
# 버전 확인
smbd --version
2.2 공유 디렉토리 생성
파일을 공유할 디렉토리를 만들고 적절한 권한을 설정합니다.
# 공유 디렉토리 생성
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 chown -R root:sambashare /srv/samba/private
2.3 Samba 사용자 생성
Samba는 시스템 계정과 별도로 자체 사용자 데이터베이스를 관리합니다. 시스템 계정이 있는 사용자만 Samba 계정으로 등록할 수 있습니다.
# 시스템 사용자가 없다면 먼저 생성
sudo useradd -M -s /usr/sbin/nologin sambauser
# Samba 사용자 등록 및 비밀번호 설정
sudo smbpasswd -a sambauser
# 사용자 활성화
sudo smbpasswd -e sambauser
# 사용자를 sambashare 그룹에 추가
sudo usermod -aG sambashare sambauser
2.4 Samba 설정
Samba 설정 파일을 편집하여 공유 폴더를 정의합니다.
# 기존 설정 백업
sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.backup
# 설정 파일 편집
sudo nano /etc/samba/smb.conf
설정 파일 끝에 다음 내용을 추가합니다:
# 공개 공유 폴더 (게스트 접근 가능)
[Public]
comment = Public Shared Folder
path = /srv/samba/public
browseable = yes
read only = no
guest ok = yes
create mask = 0666
directory mask = 0777
# 비공개 공유 폴더 (인증 필요)
[Private]
comment = Private Shared Folder
path = /srv/samba/private
browseable = yes
read only = no
guest ok = no
valid users = @sambashare
create mask = 0660
directory mask = 0770
# 사용자별 홈 디렉토리
[homes]
comment = Home Directories
browseable = no
read only = no
create mask = 0700
directory mask = 0700
valid users = %S
설정을 확인하고 서비스를 재시작합니다:
# 설정 문법 검사
testparm
# Samba 서비스 재시작
sudo systemctl restart smbd nmbd
# 부팅 시 자동 시작
sudo systemctl enable smbd nmbd
2.5 방화벽 설정
# Samba 포트 허용
sudo ufw allow samba
# 또는 개별 포트 허용
sudo ufw allow 139/tcp
sudo ufw allow 445/tcp
sudo ufw allow 137/udp
sudo ufw allow 138/udp
3. 클라이언트에서 Samba 연결
3.1 Windows에서 연결
방법 1: 파일 탐색기에서 직접 접근
- 파일 탐색기를 열고 주소창에
\\192.168.1.100입력 (서버 IP) - 공유 폴더 목록이 표시됨
- Private 폴더 접근 시 사용자명과 비밀번호 입력
방법 2: 네트워크 드라이브 연결
- 파일 탐색기에서 "내 PC" 우클릭
- "네트워크 드라이브 연결" 선택
- 드라이브 문자 선택 (예: Z:)
- 폴더에
\\192.168.1.100\Private입력 - "다른 자격 증명을 사용하여 연결" 체크
- 로그온 시 다시 연결 체크하면 자동 마운트
3.2 macOS에서 연결
- Finder 메뉴에서 "이동" > "서버에 연결" (Cmd+K)
- 서버 주소에
smb://192.168.1.100입력 - 연결할 볼륨 선택
- 사용자 이름과 비밀번호 입력
자동 마운트 설정:
- 시스템 환경설정 > 사용자 및 그룹
- 현재 사용자 선택 > 로그인 항목
- 연결된 네트워크 드라이브를 목록에 추가
3.3 Linux에서 연결
임시 마운트:
# CIFS 유틸리티 설치
sudo apt install cifs-utils
# 마운트 포인트 생성
sudo mkdir -p /mnt/samba
# 마운트 (사용자 지정)
sudo mount -t cifs //192.168.1.100/Private /mnt/samba -o username=sambauser,password=yourpassword
# 또는 비밀번호 입력 프롬프트
sudo mount -t cifs //192.168.1.100/Private /mnt/samba -o username=sambauser
자동 마운트 (fstab):
# 자격 증명 파일 생성 (보안을 위해)
sudo nano /etc/samba/credentials
# 내용
username=sambauser
password=yourpassword
# 권한 설정
sudo chmod 600 /etc/samba/credentials
# fstab 편집
sudo nano /etc/fstab
# 다음 줄 추가
//192.168.1.100/Private /mnt/samba cifs credentials=/etc/samba/credentials,iocharset=utf8,uid=1000,gid=1000 0 0
# 마운트 테스트
sudo mount -a
4. NFS 파일 서버 구축
4.1 NFS란?
NFS(Network File System)는 Unix/Linux 환경에서 표준으로 사용되는 네트워크 파일 시스템입니다. Samba보다 오버헤드가 적어 Linux 간 파일 공유에 최적화되어 있습니다.
4.2 NFS 서버 설치 및 설정
# NFS 서버 설치
sudo apt update
sudo apt install nfs-kernel-server
# 공유 디렉토리 생성
sudo mkdir -p /srv/nfs/shared
sudo chown nobody:nogroup /srv/nfs/shared
sudo chmod 755 /srv/nfs/shared
NFS 내보내기 설정:
# exports 파일 편집
sudo nano /etc/exports
다음 내용을 추가합니다:
# 형식: 공유경로 허용IP(옵션)
# 특정 IP만 허용
/srv/nfs/shared 192.168.1.0/24(rw,sync,no_subtree_check)
# 특정 클라이언트만 허용
/srv/nfs/shared 192.168.1.50(rw,sync,no_subtree_check,no_root_squash)
# 읽기 전용 공유
/srv/nfs/readonly 192.168.1.0/24(ro,sync,no_subtree_check)
주요 옵션 설명:
rw: 읽기/쓰기 허용ro: 읽기 전용sync: 변경사항 즉시 디스크에 기록no_subtree_check: 하위 디렉토리 체크 비활성화 (성능 향상)no_root_squash: 클라이언트의 root를 서버의 root로 매핑
# 내보내기 적용
sudo exportfs -a
# 현재 내보내기 목록 확인
sudo exportfs -v
# NFS 서비스 재시작
sudo systemctl restart nfs-kernel-server
# 부팅 시 자동 시작
sudo systemctl enable nfs-kernel-server
4.3 방화벽 설정
# NFS 포트 허용
sudo ufw allow from 192.168.1.0/24 to any port nfs
# 또는 특정 포트 허용
sudo ufw allow 2049/tcp
sudo ufw allow 2049/udp
4.4 NFS 클라이언트 설정
# NFS 클라이언트 설치
sudo apt install nfs-common
# 마운트 포인트 생성
sudo mkdir -p /mnt/nfs
# 임시 마운트
sudo mount 192.168.1.100:/srv/nfs/shared /mnt/nfs
# 마운트 확인
df -h | grep nfs
자동 마운트 (fstab):
# fstab 편집
sudo nano /etc/fstab
# 다음 줄 추가
192.168.1.100:/srv/nfs/shared /mnt/nfs nfs defaults,_netdev 0 0
# 마운트 테스트
sudo mount -a
5. 사용자별 접근 권한 관리
5.1 Samba 그룹 기반 권한
여러 사용자가 있을 때 그룹으로 권한을 관리하면 편리합니다.
# 그룹 생성
sudo groupadd family
sudo groupadd work
# 사용자를 그룹에 추가
sudo usermod -aG family user1
sudo usermod -aG family user2
sudo usermod -aG work user3
# 디렉토리 그룹 소유권 설정
sudo chown -R root:family /srv/samba/family
sudo chown -R root:work /srv/samba/work
# 그룹 쓰기 권한 설정
sudo chmod -R 2770 /srv/samba/family
sudo chmod -R 2770 /srv/samba/work
smb.conf에 그룹별 공유 설정 추가:
[Family]
comment = Family Shared Folder
path = /srv/samba/family
browseable = yes
read only = no
valid users = @family
create mask = 0660
directory mask = 0770
force group = family
[Work]
comment = Work Shared Folder
path = /srv/samba/work
browseable = yes
read only = no
valid users = @work
create mask = 0660
directory mask = 0770
force group = work
5.2 개별 사용자 권한 설정
# 특정 사용자만 쓰기 가능
[Reports]
comment = Reports - Admin Write Only
path = /srv/samba/reports
browseable = yes
read only = yes
write list = admin
valid users = admin, user1, user2
6. 디스크 관리와 RAID 기초
6.1 디스크 상태 확인
# 연결된 디스크 목록
lsblk
# 디스크 상세 정보
sudo fdisk -l
# 디스크 사용량
df -h
# SMART 상태 확인 (디스크 건강 상태)
sudo apt install smartmontools
sudo smartctl -a /dev/sda
6.2 새 디스크 포맷 및 마운트
# 디스크 파티션 생성
sudo fdisk /dev/sdb
# n: 새 파티션
# p: 기본 파티션
# Enter: 기본값 사용
# w: 저장
# ext4 파일시스템 생성
sudo mkfs.ext4 /dev/sdb1
# 마운트 포인트 생성
sudo mkdir -p /mnt/data
# 마운트
sudo mount /dev/sdb1 /mnt/data
# UUID 확인 (fstab에 사용)
sudo blkid /dev/sdb1
# fstab에 자동 마운트 추가
sudo nano /etc/fstab
# UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /mnt/data ext4 defaults 0 2
6.3 RAID 기초 개념
RAID(Redundant Array of Independent Disks)는 여러 디스크를 하나로 묶어 성능이나 안정성을 높이는 기술입니다.
| RAID 레벨 | 최소 디스크 | 특징 | 용량 효율 |
|---|---|---|---|
| RAID 0 | 2개 | 속도 향상, 안정성 없음 | 100% |
| RAID 1 | 2개 | 미러링, 완전 복제 | 50% |
| RAID 5 | 3개 | 분산 패리티, 1개 고장 허용 | (n-1)/n |
| RAID 6 | 4개 | 이중 패리티, 2개 고장 허용 | (n-2)/n |
| RAID 10 | 4개 | 미러+스트라이프 조합 | 50% |
6.4 소프트웨어 RAID 구성 (mdadm)
예시로 RAID 1 (미러링)을 구성해봅시다:
# mdadm 설치
sudo apt install mdadm
# RAID 1 어레이 생성 (sdb와 sdc 사용)
sudo mdadm --create --verbose /dev/md0 --level=1 --raid-devices=2 /dev/sdb /dev/sdc
# 어레이 상태 확인
cat /proc/mdstat
sudo mdadm --detail /dev/md0
# 파일시스템 생성
sudo mkfs.ext4 /dev/md0
# 마운트
sudo mkdir -p /mnt/raid
sudo mount /dev/md0 /mnt/raid
# mdadm 설정 저장
sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf
sudo update-initramfs -u
# fstab에 추가
echo '/dev/md0 /mnt/raid ext4 defaults 0 2' | sudo tee -a /etc/fstab
중요: RAID는 백업을 대체하지 않습니다. RAID는 하드웨어 장애에 대한 대비일 뿐, 실수로 파일을 삭제하거나 랜섬웨어에 감염되면 RAID도 소용없습니다. 반드시 별도의 백업을 유지하세요.
7. SFTP를 이용한 보안 파일 전송
7.1 SFTP 설정
SFTP는 SSH 기반의 보안 파일 전송 프로토콜입니다. SSH가 설치되어 있다면 별도 설치 없이 바로 사용할 수 있습니다.
# SFTP 전용 사용자 생성
sudo useradd -m -s /usr/sbin/nologin sftpuser
sudo passwd sftpuser
# SFTP 전용 디렉토리 설정
sudo mkdir -p /home/sftpuser/files
sudo chown root:root /home/sftpuser
sudo chmod 755 /home/sftpuser
sudo chown sftpuser:sftpuser /home/sftpuser/files
SSH 설정에서 SFTP chroot 설정:
sudo nano /etc/ssh/sshd_config
파일 끝에 추가:
Match User sftpuser
ChrootDirectory /home/sftpuser
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
# SSH 재시작
sudo systemctl restart ssh
7.2 SFTP 클라이언트 접속
명령줄:
# SFTP 접속
sftp sftpuser@192.168.1.100
# 기본 명령어
ls # 원격 디렉토리 목록
lls # 로컬 디렉토리 목록
cd files # 디렉토리 이동
put file.txt # 업로드
get file.txt # 다운로드
bye # 종료
GUI 클라이언트 추천:
- Windows: WinSCP, FileZilla
- macOS: Cyberduck, FileZilla
- Linux: FileZilla, Nautilus (내장)
8. 정리 및 다음 단계
이번 편에서는 홈서버를 본격적인 파일 서버로 만드는 방법을 알아보았습니다. Samba로 Windows와 호환되는 파일 공유를 설정하고, NFS로 Linux 클라이언트와 빠르게 연결하며, RAID를 통해 데이터 안정성을 확보하는 방법까지 다루었습니다.
파일 서버 구축 체크리스트
- Samba가 정상적으로 설치되고 작동하는가?
- Windows/Mac에서 네트워크 드라이브로 연결되는가?
- 사용자별 접근 권한이 올바르게 설정되었는가?
- NFS가 Linux 클라이언트에서 마운트되는가?
- 방화벽에서 필요한 포트가 허용되었는가?
- 디스크 상태가 정상인가? (SMART 확인)
- 중요 데이터의 백업 계획이 있는가?
성능 최적화 팁
- 기가비트 이더넷: 최소 1Gbps 네트워크 환경을 구축하세요. 파일 서버 성능의 90%는 네트워크에 달려 있습니다.
- SSD 캐시: 자주 접근하는 파일은 SSD에, 대용량 저장은 HDD에 배치하세요.
- 점보 프레임: 네트워크 장비가 지원한다면 MTU를 9000으로 설정하면 대용량 전송 시 효율이 높아집니다.
다음 편에서는 Docker를 이용한 다양한 서비스 구축에 대해 알아보겠습니다. Nextcloud로 나만의 클라우드 스토리지를 만들고, Plex나 Jellyfin으로 미디어 서버를 구축하는 방법 등 실용적인 서비스들을 다룰 예정입니다.