해당 포스팅은 작성자가 공부 목적으로 작성 및 기록하였습니다.

개요

네트워크 기반의 스토리지를 사용하기 위해 NFS 서버를 구축하여 다른 PC에서 NFS 서버가 제공하는 스토리지를 마운트 해본다.

테스트 환경

  • Server PC(IP: 10.10.10.2) Ubuntu 18.04
  • Client PC(IP: 10.10.10.3) Ubuntu 18.04

Server 설정

패키지 설치

서버 쪽 셋팅을 위해 nfs-kernel-server 패키지를 설치한다.

$ sudo apt update
$ sudo apt install nfs-kernel-server

공유할 디렉토리 설정

공유할 디렉토리는 일반적으로 소유자와 소유그룹을 의사사용자인 nobodynogroup으로 변경한다. 이는 신뢰할 수 없는 클라이언트 들에 대해 대응하며 NFS에서만 사용하도록 권장된다. 일반적으로 디렉토리의 권한은 775이고 클라이언트는 쓰기권한이 없다. 아래에서 언급할 root_squash 설정을 통해 클라이언트의 rootnobody로 매핑하여 파일쓰기를 할 수 있다. 예시 경로는 /home/nfs_server 디렉토리이다.

$ sudo mkdir -p /home/nfs_server
$ sudo chown -R nobody:nogroup /home/nfs_server

권한 설정 후 배포

배포할 디렉토리에 대한 권한 및 설정을 작성한다. /etc/exports 파일을 수정하는데 해당 파일은 서버가 클라이언트에 노출하는 모든 디렉토리에 대한 정보를 담는다. 예시는 다음과 같이 클라이언트 IP 10.10.10.3 으로 전제한다.

  • rw, ro: 읽기/쓰기, 읽기 전용
  • sync: 변경사항 발생 시 동기적 저장 및 처리
  • async: 데이터의 변경에 대해 비동기적 처리
  • root_squatsh: 클라이언트의 root 사용자를 root가 아닌 서버의 nobody 유저의 권한으로 처리. 쓰기작업 시 클라이언트 root로 작업해도 nobody로 작업된다. 기본값.
  • no_root_squatsh: 클라이언트의 root 사용자를 root 그대로의 권한을 인정해줌. 클라이언트가 생성한 파일의 소유자가 root로 작성된다.(root 권한으로 작성된 파일은 보안에 민감할 수 있다.)
  • all_squash: 모든 클라이언트 사용자를 nobody 유저로 매핑시킨다. 클라이언트는 root 권한이 없이 작업하고 이는 nobody 유저의 작업으로 된다.
  • no_all_squash: 공유된 디렉토리의 사용자(서버)와 클라이언트의 사용자가 일치해야한다. uidgid가 일치하면 쓰기작업을 할 수 있다.
  • no_subtree_check: 클라이언트가 작업한 내용에 대해 무결성 검사를 하는 하위 트리 검사를 수행하지 않는다.
$ sudo vi /etc/exports

>>>
/home/nfs_server       10.10.10.3(rw,sync,no_subtree_check)
  • 클라이언트 IP를 직접 지정할 뿐 아니라 마스크를 명시하여 대역으로 정의할 수 있다. 10.10.10.X의 C레벨 대역에 전부 공유해주려면 10.10.10.3/24 와 같이 넷마스크를 언급해주면 된다.

수정한 권한 및 설정을 적용하기 위해 아래 명령어를 실행한다.

$ sudo exportfs -a
$ sudo systemctl restart nfs-kernel-server.service

Client 설정

공유 된 NFS 디렉토리를 마운트하기 위해 패키지를 설치한다.

$ sudo apt update
$ sudo apt install nfs-common

공유된 디렉토리 보기

NFS 서버의 IP와 함께 아래 명령어를 이용하여 마운트 할 디렉토리를 확인할 수 있다.

$ showmount -e 10.10.10.2

>>>
Export list for 10.10.10.2:
/home/nfs_server 10.10.10.3

마운트

임시로 디렉토리를 만들어 NFS 디렉토리를 마운트한다.

$ sudo mkdir /home/nfs_client
$ sudo mount 10.10.10.2:/home/nfs_server /home/nfs_client

서버에서 설정한 대역이 다르다면

NFS 서버에서 /etc/exports에 설정한 IP대역이 클라이언트와 맞지 않는다면 마운트 시 다음과 같은 오류를 볼 수 있다.

$ sudo mount 10.10.10.2:/home/nfs_server /home/nfs_client

>>>
mount.nfs: access denied by server while mounting 10.10.10.2:/home/nfs_server

참고: Ubuntu 18.04에서 NFS 서버를 설치 및 구성하는 방법
참고: Red Hat - /etc/exports
참고: askubuntu - nobody

Leave a comment