Linux
파일 서버
Linux FTP, vsftpd, SSH 파일 전송, NFS 파일 서버 설정 정리
1) FTP
개요
- FTP(File Transfer Protocol)는 네트워크를 통해 컴퓨터 간에 파일을 전송하기 위한 가장 기본적인 표준 통신 규약
- 다른 프로토콜과 달리 2개의 포트를 동시에 사용
핵심 작동 원리: 2개의 채널
- Control Channel(21번 포트): 사용자 아이디/비밀번호 확인, 명령어 전달
- Data Channel(20번 포트): 실제 데이터 전송 통로
접속 방식
- 능동 모드(Active): 서버가 클라이언트에게 접속을 시도하는 방식
- 수동 모드(Passive): 클라이언트가 서버에게 접속을 시도하는 방식
- 대부분의 웹 브라우저나 공유기가 사용
종류
| 종류 | 설명 |
|---|---|
| 기본 FTP | 아이디와 비밀번호가 암호화되지 않은 채 전송 → 해킹에 취약 |
| SFTP(Secure FTP) | SSH 기술을 이용해 전송 과정 전체를 암호화 → 현재 가장 많이 사용 |
| FTPS(FTP over SSL/TLS) | SSL 인증서를 사용하여 암호화하는 방식 |
장점과 단점
- 장점: 대용량 파일을 일괄 전송하기에 매우 효율적, 전송 속도 빠름
- 단점: 하지만 보안 설정을 하지 않으면 정보 유출 위험이 크고 설정이 복잡해질 수 있음
2) vsftpd
개요
- 우분투에서 기본적으로 제공하는 보안성과 성능이 우수한 FTP 서버
- 설치 및 운영이 쉬움
설치
sudo apt -y install vsftpd
설정 파일
/etc/vsftpd.conf- 주요 옵션
anonymous_enable: 익명 사용자의 접속 허용 여부 (로그인 불필요)local_enable: 로컬 컴퓨터에서의 접속max_clients: 동시 최대 접속자 수max_per_ip: 하나의 PC에서 접속할 수 있는 접속자 수
실습
# 설정 변경 - /etc/vsftpd.conf 파일 수정
# anonymous_enable=YES
# write_enable=YES
# anon_upload_enable=YES
# anon_mkdir_write_enable=YES
# 디렉토리 생성
cd /srv/ftp
sudo mkdir pub
sudo chmod 777 pub
cd pub
sudo touch file
ls -l
# vsftpd 재시작
sudo systemctl restart vsftpd
3) SSH를 이용한 파일 전송
사용하는 이유
- 별도의 서버 설치 불필요
- 데이터 무결성 검증
- 인증 방식의 다양성
SCP (Secure Copy)
- 가장 빠르고 간단하게 파일을 복사하는 방식
- 명령어 한 줄로 전송 완료
# 로컬 → 원격지 파일 보내기
scp [파일 경로] [계정]@[IP주소]:[저장경로]
# 원격지 → 로컬 파일 가져오기
scp [계정]@[IP주소]:[파일경로] [로컬경로]
PEM 파일을 이용한 인증
# PEM 파일 생성
ssh-keygen -t rsa -b 4096 -m PEM -f 파일경로
# 파일 소유자에게만 읽기 권한 부여
chmod 400 파일경로
# 로컬 → 원격지 파일 보내기 (pem 인증)
scp -i pem파일경로 [파일 경로] [계정]@[IP주소]:[저장경로]
# 원격지 → 로컬 파일 가져오기 (pem 인증)
scp -i pem파일경로 [계정]@[IP주소]:[파일경로] [로컬경로]
4) NFS
개요
- NFS(Network File System)는 네트워크 상의 다른 컴퓨터의 파일 시스템을 마치 자신의 로컬 디스크에 있는 것처럼 사용할 수 있게 해주는 클라이언트/서버 프로토콜
- 유닉스와 리눅스 환경에서 표준 파일 공유 프로토콜로 사용됨
주요 특징
- Transparency(투명성): 사용자는 파일이 원격 서버에 있는지 로컬 디스크에 있는지 구분하지 않고 동일한 명령어로 파일 읽기/쓰기 가능
- 중앙 집중 관리: 데이터를 서버 한 곳에 모아 관리 → 백업이나 보안 정책 적용이 효율적
- 플랫폼 독립성: RPC(Remote Procedure Call) 메커니즘을 사용하여 서로 다른 운영체제 간에도 파일 공유 가능
장점
- 비용 절감
- 편의성: 사용자 홈 디렉토리를 NFS로 설정하면 어떤 컴퓨터에서 로그인하든 동일한 작업 환경 유지
단점
- 하지만 네트워크 의존성: 네트워크 장애 시 파일 시스템 사용 불가
- 하지만 보안 취약: 초창기 버전은 호스트 IP 기반 인증 방식 → 보안에 취약
활용 사례
- 클러스터 서버: 여러 대의 웹 서버나 애플리케이션 서버가 동일한 데이터를 공유해야 할 때 사용
- 데이터 백업: 여러 호스트의 데이터를 중앙 스토리지 서버로 모으는 용도
- Kubernetes: 컨테이너 환경에서 영구 볼륨(Persistent Volume)으로 NFS 연결 → 데이터 휘발성 방지
구현 순서
- SERVER
- 관련 패키지 설치 →
- 서버의 /etc/ecports에 공유할 디렉토리, 접근을 허용할 컴퓨터, 접근 권한을 지정
- 서비스 실행
- CLIENT
- 관련 패키지 설치
- showmount 명령을 실행해 NFS 서버에 공유된 디렉토리가 있는지 확인
- mount 명령을 실행해 NFS 서버에 공유된 디렉토리를 마운트
구현
- SERVER
sudo apt updatesudo apt install nfs-kernel-server -y- 공유할 디렉토리 생성 후 접근 권한 설정
sudo mkdir /share && sudo chmod 777 /share
- 설정 파일에 추가 → sudo nano /etc/exports
/share 10.0.2.0/24(rw,sync,no_subtree_check,no_root_squash,insecure)
- 설정 내용 반영
sudo exportfs -rav
- 방화벽 설정
sudo ufw allow from 10.0.2.0/24
- nfs-server가 부팅 시 시작하도록
sudo systemctl enable nfs-serversudo systemctl restart nfs-serversudo systemctl status nfs-server
sudo touch /share/file
- CLIENT
sudo apt install nfs-common -y- NFS 서버에 공유된 디렉토리 확인
- showmount -e 10.0.2.3
- 마운트할 디렉토리 생성
- mkdir ~/myshare
- 마운트
- sudo mount -t nfs -o nfservers=3 10.0.2.3:/share ~/myshare
댓글