리눅스 (7) - File Sharing (FTP, vsftpd, SCP, NFS)
리눅스 (7) - File Sharing (FTP, vsftpd, SCP, NFS)
File Sharing 개념 및 실습 (FTP, vsftpd, SCP, NFS)
리눅스 환경에서 서버 간 혹은 클라이언트와 파일 데이터를 주고받는 대표적인 기술 4가지(FTP, vsftpd, SCP/SSH, NFS)에 대한 개념과 간단한 실습을 정리한다.
1. FTP (File Transfer Protocol)
📌 개요
- 정의: 네트워크를 통해 컴퓨터 간에 파일을 전송하기 위한 가장 기본적인 표준 통신 규약
- 특징: 일반적인 프로토콜과 달리 2개의 포트를 동시에 활용
⚙️ 핵심 작동 원리: 2개 채널
- Control Channel (Port 21): 사용자 인증(ID/PW) 및 명령어 전달
- Data Channel (Port 20): 실제 파일 데이터 전송
🔄 접속 방식
- Active Mode (능동 모드): 서버가 클라이언트에게 접속을 시도하는 방식
- Passive Mode (수동 모드): 클라이언트가 서버에게 접속을 시도하는 방식 (공유기/방화벽 환경에 유용하며 대부분의 웹 브라우저가 사용)
🛡️ 종류 및 보안 방식
- 기본 FTP: 아이디/비밀번호 및 데이터가 평문으로 전송되어 해킹에 매우 취약
- SFTP (Secure FTP): SSH 기술을 활용해 전송 과정 전체를 암호화 (현재 가장 널리 사용)
- FTPS (FTP over SSL/TLS): SSL/TLS 인증서를 적용하여 전송 구간을 암호화
- 장점: 대용량 파일 일괄 전송 시 속도가 매우 빠르고 효율적
- 단점: 암호화 미설정 시 정보 유출 위험, 설정 및 방화벽 예외 처리가 까다로울 수 있음
2. vsftpd (Very Secure FTP Daemon)
📌 개요
- 우분투(Ubuntu) 등 리눅스에서 기본 제공되는 보안성과 성능이 우수한 FTP 서버 소프트웨어
- 설치 및 운영 관리가 간편함 (※ 최근에는 보안 이슈로 실무에서 단독 FTP는 잘 사용하지 않는 추세)
🛠️ 설치 및 설정
1
2
3
4
5
# 설치
sudo apt -y install vsftpd
# 설정 파일: /etc/vsftpd.conf
주요 설정 항목 (/etc/vsftpd.conf)
anonymous_enable: 익명 사용자 접속 허용 여부local_enable: 로컬 계정 사용자 접속 허용 여부max_clients: 동시 최대 접속자 수max_per_ip: IP당 최대 접속자 수
💻 실습 과정
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 1. 설정 변경 (익명 업로드 및 쓰기 권한 허용 예시)
# /etc/vsftpd.conf 수정
# anonymous_enable=YES
# write_enable=YES
# anon_upload_enable=YES
# anon_mkdir_write_enable=YES
# 2. 디렉토리 생성 및 권한 설정
cd /srv/ftp
sudo mkdir pub
sudo chmod 777 pub
cd pub
touch file
ls -l
# 3. 서비스 재시작
sudo systemctl restart vsftpd
3. SSH를 이용한 파일 전송 (SCP)
💡 핵심: 실무에서 파일 전송 작업 시 가장 빈번하게 사용되므로 반드시 숙지해야 하는 방식
📌 사용하는 이유
- 별도의 FTP 서버 프로그램 설치 불필요
- SSH 기반으로 전송 과정 데이터 무결성 및 암호화 보장
- 다양한 인증 방식(비밀번호, Key pair) 지원
🚀 SCP (Secure Copy) 기본 사용법
SCP는 명령어 한 줄로 간단하고 빠르게 파일/디렉토리를 복사할 수 있는 도구입니다. (SSH 서비스 동작 필요)
- 로컬 ➔ 원격지 파일 전송 ```bash scp [파일경로] [계정]@[IP주소]:[저장경로]
예시
scp at.dat etakyung@server:/home/etakyung/ftp
1
2
3
4
5
6
7
8
* **원격지 ➔ 로컬 파일 전송 (로컬에서 실행)**
```bash
scp [계정]@[IP주소]:[원격파일경로] [로컬저장경로]
# 예시
scp etakyung@server:/home/etakyung/etakyung.pem /home/etakyung
🔑 Key File (.pem)을 이용한 인증 전송
1
2
3
4
5
6
7
8
9
10
11
12
# 1. PEM 키 생성
ssh-keygen -t rsa -b 4096 -m PEM -f 파일경로
# 2. 키 파일 보안 권한 변경 (소유자 읽기 전용)
chmod 400 파일경로
# 3-1. PEM 키를 이용한 로컬 -> 원격지 전송
scp -i pem파일경로 [파일경로] [계정]@[IP주소]:[저장경로]
# 3-2. PEM 키를 이용한 원격지 -> 로컬 전송
scp -i pem파일경로 [계정]@[IP주소]:[파일경로] [로컬경로]
4. NFS (Network File System)
📌 개요
- 네트워크상의 다른 컴퓨터 파일 시스템을 마치 자신의 로컬 디스크처럼 마운트하여 사용할 수 있게 해주는 C/S 프로토콜
- 유닉스/리눅스 환경의 표준 네트워크 파일 공유 규약
✨ 주요 특징
- Transparency (투명성): 사용자는 파일이 원격에 있는지 로컬에 있는지 구분 없이 동일한 파일 시스템 명령어로 접근 가능
- 중앙 집중 관리: 서버 한 곳에서 데이터를 통합 관리하므로 백업 및 보안 관리 용이
- 플랫폼 독립성: RPC(Remote Procedure Call) 매커니즘을 사용하여 다른 OS 간에도 파일 공유 가능
⚖️ 장단점
- 장점: 비용 절감, 사용자 홈 디렉토리 공통화로 동일한 작업 환경 제공
- 단점: 네트워크 장애 시 영향도가 크며, 구버전의 경우 호스트 IP 기반 인증으로 인해 보안에 주의 필요
🎯 주요 활용 사례
- 클러스터 서버: 여러 대의 Web / WAS 서버가 동일한 정적 파일 디렉토리를 공유할 때
- 중앙 백업: 여러 서버의 데이터를 하나의 스토리지 서버로 모을 때
- Kubernetes (k8s): 컨테이너의 휘발성 데이터를 보존하기 위한 영구 볼륨(Persistent Volume) 연동
5. NFS 구축 실습
🔄 전체 구현 흐름
- NFS 서버: 패키지 설치 ➔
/etc/exports공유 경로/권한 설정 ➔ 서비스 시작 - NFS 클라이언트: 패키지 설치 ➔
showmount로 공유 확인 ➔mount명령어로 로컬 디렉토리에 마운트
🖥️ NFS Server 설정
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 1. 패키지 업데이트 및 설치
sudo apt update
sudo apt install nfs-kernel-server
# 2. 공유 디렉토리 생성 및 권한 부여
sudo mkdir -p /share && sudo chmod 777 /share
sudo touch /share/file
# 3. /etc/exports 파일 수정 (공유 대상 및 권한 설정)
sudo vim /etc/exports
# 예시 내용 추가: /share 192.168.64.0/24(rw,sync,no_subtree_check)
# 4. 설정 반영 및 방화벽 설정
sudo exportfs -rav
sudo ufw allow from 192.168.64.0/24
# 5. 서비스 활성화 및 재시작
sudo systemctl enable nfs-server
sudo systemctl restart nfs-server
sudo systemctl status nfs-server
💻 NFS Client 설정
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 1. 패키지 설치
sudo apt install nfs-common
# 2. 서버 공유 디렉토리 확인
showmount -e 192.168.64.16
# [출력 예시]
# Export list for 192.168.64.16:
# /share 192.168.64.0/24
# 3. 마운트할 디렉토리 생성 및 NFS 마운트
mkdir ~/myshare
sudo mount -t nfs -o nfsvers=3 192.168.64.16:/share ~/myshare
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.