본문 바로가기
서버 보안/리눅스 실무

[NFS]NFS 서버 설치와 운영해보기

by 어깨 :) 2023. 5. 30.
728x90

오늘은 NFS 서버에 대해서 실습하려고 합니다. NFS 서버는 리눅스 컴퓨터끼리 저장 공간을 공유하는 서비스입니다.

windows는 네트워크로 연결된 컴퓨터끼리 간단하게 폴더(디렉터리)를 공유할 수 있지만, 리눅스는 대부분 명령어로 작업을 해결해야 하므로 windows보다는 좀 더 복잡한 과정을 거쳐야 합니다.

 

 

 

 

-NFS 서버 구현의 개요도

 

 

 

-구현 순서

1. NFS 서버에 관련 패키지를 설치합니다.

2. NFS 서버의 /etc/exports에 공유할 디렉터리, 접근을 허가할 컴퓨터, 접근 권한을 지정합니다.

3. NFS 서비스를 실행합니다.

4. NFS 클라이언트에 관련 패키지를 설치합니다.

5. NFS 클라이언트에 showmount 명령을 실행해 NFS 서버에 공유된 디렉터리가 있는지 확인합니다.

6. NFS 클라이언트에서 mount 명령을 실행해 NFS 서버에 공유된 디렉터리를 마운트 합니다.


 

NFS 서버를 설정합니다. apt -y install nfs-kernel-server 명령을 입력해 NFS 서버 패키지를 설치합니다.

→ nfs-kernel-server를 설치하면 NFS 운영을 위해 필요한 nfs-common, rpcbind 등도 함께 설치됩니다.

 

여기서 잠깐! nfs-common, rpcbind는 무엇일까?

nfs-common:
nfs-common은 Linux 시스템에서 NFS 프로토콜을 구현하기 위한 패키지입니다. NFS는 클라이언트와 서버 간에 파일 및 디렉터리를 공유하기 위한 네트워크 프로토콜입니다. nfs-common 패키지는 NFS 클라이언트로서 동작하기 위해 필요한 여러 도구와 유틸리티를 제공합니다. 이 패키지는 NFS 마운트 및 원마운트를 관리하고, 공유된 파일 시스템에 액세스 하고, 파일 및 디렉터리를 복사하고 이동하는 등의 작업을 수행하는 데 사용됩니다. nfs-common 패키지는 NFS 클라이언트로서 시스템에서 NFS 파일 공유를 사용하려는 경우에 설치되어야 합니다.

rpcbind:
rpcbind는 Remote Procedure Call (RPC) 시스템을 위한 네트워크 서비스입니다. RPC는 클라이언트와 서버 간에 프로시저(함수) 호출을 통해 통신하는 프로그래밍 모델입니다. 클라이언트는 원격 서버에 있는 프로시저를 호출하여 결과를 받아올 수 있습니다. rpcbind는 RPC 호출을 위해 클라이언트와 서버 간의 통신을 관리합니다. 클라이언트는 rpcbind 서비스에게 요청을 전달하고, rpcbind는 해당 서비스가 제공하는 네트워크 포트 번호를 알려줍니다. 클라이언트는 이 포트 번호를 사용하여 원격 서버와 통신할 수 있게 됩니다. rpcbind는 NFS 서비스와 같은 다른 RPC 기반 서비스와의 상호 작용을 지원하기 위해 필요합니다.

요약하자면, nfs-common은 NFS 클라이언트를 구현하기 위한 패키지로 NFS 파일 공유를 사용하는 시스템에서 필요합니다. rpcbind는 RPC 기반 서비스와의 상호 작용을 관리하는 네트워크 서비스로, NFS 서비스와 함께 사용됩니다.

 

 

 

gedit이나 nano로 /etc/exports 파일에 다음 내용을 입력해서 공유할 디렉터리를 추가한 후 저장하고 닫습니다.

 

 

 

/share    서버에 접근할 컴퓨터의 ip주소(rw, sync)를 입력합니다.

"/share 192.168.111.*(rw, sync)"는 NFS 서버의 내보내기 설정 중 하나를 나타내며, NFS 파일 공유를 구성하는 데 사용됩니다. 이 설정은 다음과 같은 의미를 갖습니다:

"/share": 이는 내보내기(export)할 파일 시스템의 경로를 나타냅니다. NFS 서버에서 공유하고자 하는 파일 시스템이 "/share" 경로에 위치한다는 것을 의미합니다. 클라이언트는 이 경로를 통해 파일 및 디렉터리에 액세스 할 수 있게 됩니다.

"192.168.111.*": 이는 허용된 클라이언트의 IP 주소 범위를 나타냅니다. 여기서는 "192.168.111"로 시작하는 모든 IP 주소를 허용하고 있습니다. 따라서 192.168.111.0부터 192.168.111.255까지의 IP 주소 범위에 속하는 클라이언트는 이 NFS 공유에 액세스 할 수 있습니다.

"(rw, sync)": 이 부분은 클라이언트에 대한 공유 권한과 동기화(sync) 방식을 나타냅니다.

"rw"는 읽기와 쓰기 권한을 클라이언트에게 부여한다는 의미입니다. 클라이언트는 공유된 파일 시스템에서 읽기와 쓰기 작업을 수행할 수 있습니다.
"sync"는 동기화 방식을 의미합니다. 이는 NFS 서버에서 클라이언트의 작업이 완료되기 전에 응답을 기다리는 것을 의미합니다. NFS 서버는 데이터를 디스크에 동기적으로 기록하여 일관성을 유지하며, 클라이언트에게 응답하기 전에 완료됩니다.
이 설정은 192.168.111.* IP 주소 범위에 있는 클라이언트들이 "/share" 경로에 대한 읽기 및 쓰기 액세스를 가지며, 동기화 방식으로 데이터를 처리할 수 있다는 것을 나타냅니다.

 

 

 

 

/share 디렉터리를 생성하고 chmod 명령으로 /share 디렉터리의 접근 권한을 707로 합니다. 적당한 파일을 /share 디렉터리에 미리 복사합니다.

 

 

 

 

systemctl restart/enable nfs-server 명령으로 nfs-server 서비스를 시작 및 상시 가동되게 합니다.

 

 

 

exportfs -v 명령을 입력해 서비스가 가동하는지 확인합니다.

 

 

 

ufw disable 명령으로 방화벽을 잠시 비활성화시킵니다.

 

 

 

 

client NFS 서버에 접속해서 공유한 디렉터리를 사용해 봅니다.

 

 

 

 

 

sudo apt -y install nfs-common 명령을 입력하여 관련 패키지를 설치합니다.(암호는 ubuntu를 입력합니다)

 

 

 

 

우선 showmount -e NFS서버 IP주소 명령을 입력하여 NFS 서버에 공유된 디렉터리를 확인해 봅니다.

 

 

 

 

/share 디렉터리에 마운트 할 디렉터리 /home/ubuntu/myShare를 만들고 NFS서버에 마운트 합니다.

 

 

 

 

myShare의 목록을 확인해 봅니다.

 

 

 

 

sudo nano /etc/fstab 명령으로 파일을 열고 제일 아랫줄에 내용을 추가합니다.

 

 

 

 

reboot 명령으로 client를 재부팅한 다음 자동으로 nfs 공유 폴더가 마운트 되었는지 확인합니다. 또 마운트 된 디렉터리에 빈 파일 하나를 생성해서 읽기/쓰기 모드로 마운트 된 것도 확인합니다.

 

 

 

 

 

리눅스에서 공유한 NFS 서버 디렉터리를 windows에서 접근해 봅니다.

windows의 검색에서 'windows 기능'을 입력한 후, 목록에서 'windows 기능 켜기/끄기'를 선택합니다.

windows 기능 창에서 NFS용 서비스 → NFS용 클라이언트를 체크하고 확인을 클릭합니다. 변경 내용 적용이 완료된 후 재부팅 여부를 물으면 '다시 시작'을 클릭해서 재부팅합니다.

 

 

 

 

 

 

 

재부팅된 후 windows의 검색에서 cmd를 입력해 명령 프로프트를 실행하고, mount NFS서버 IP 주소 서버공유디렉터리 * 명령을 입력해 NFS 서버에 접속합니다.

 

 

 

 

 

Windows 파일 탐색기를 열어봅니다.

 

 

 

 

 

 

windows 파일 탐색기를 열어보면 자동으로 Z드라이브가 생성되면서 접속된 것을 확인할 수 있습니다.

파일 읽기/쓰기가 가능할 것입니다. 적당한 파일을 복사해서 넣어봅니다.

 

 

 

 

 

 

아래와 같이 새로운 4가지 파일을 복사해서 넣었습니다.

 

 

 

 

 

 

NFS서버에서 /share 디렉터리를 확인하면 복사한 파일들이 보입니다.

 

 

 


지금까지 살펴본 것처럼 NFS는 리눅스 환경에서 서로 디렉터리를 공유하는 데 필요한 필수 유틸리티입니다.

다음 시간에는 리눅스와 Windows 사이에서 파일과 프린터를 공유하는 Samba를 살펴보겠습니다.

감사합니다.

728x90