해당 포스팅은 작성자가 공부 목적으로 작성 및 기록하였습니다.
개요
네트워크 기반의 스토리지를 사용하기 위해 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
공유할 디렉토리 설정
공유할 디렉토리는 일반적으로 소유자와 소유그룹을 의사사용자인 nobody
와 nogroup
으로 변경한다. 이는 신뢰할 수 없는 클라이언트 들에 대해 대응하며 NFS
에서만 사용하도록 권장된다. 일반적으로 디렉토리의 권한은 775
이고 클라이언트는 쓰기권한이 없다. 아래에서 언급할 root_squash
설정을 통해 클라이언트의 root
는 nobody
로 매핑하여 파일쓰기를 할 수 있다. 예시 경로는 /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
: 공유된 디렉토리의 사용자(서버)와 클라이언트의 사용자가 일치해야한다.uid
와gid
가 일치하면 쓰기작업을 할 수 있다.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