NFS란?
NFS는 Network File System의 약어로 Sun Microsystems에서 Unix 기반 시스템을 위한 상태 유지 파일 공유 프로토콜로 개발되었습니다1. 네트워크에 연결된 Unix, Linux 시스템끼리 NFS 디렉토리를 마운트하면 로컬 디렉토리처럼 자유롭게 사용할 수 있습니다. Windows에서도 NFS를 지원하는 것 같긴 하나, 기본적으로는 Unix-like 시스템을 위한 프로토콜입니다2.
작동 방식
NFS 서버-클라이언트 동작 방식은 다음과 같습니다1.
- 클라이언트는 RPC를 사용해 서버에 파일 또는 디렉토리를 요청합니다.
- 서버는 (1) 파일 또는 디렉토리의 가용성, (2) 클라이언트에 필요한 액세스 권한이 있는지 여부를 확인합니다.
- 서버는 파일 또는 디렉토리를 클라이언트에 원격으로 탑재하고 가상 연결을 통해 액세스를 공유합니다.
NFS 서버 설치
그럼 지금부터는 설치 실습을 해보겠습니다. 실습 환경은 Linux VM 2대(서버, 클라이언트)를 준비했습니다.

nfs-utils패키지를 설치합니다.
- 여기에서
nfs-utils와 함께rpcbind가 자동으로 설치되지 않는다면 추가로 설치해줘야 합니다.
- 여기에서
nfs-server를 실행해봅시다. 시스템 부팅 시 자동으로 시작되도록enable도 해줍니다.
만약 방화벽을 사용 중이라면 nfs를 허용해줍니다.

공유 디렉토리를 생성하고 등록해줍니다.

/data디렉토리를 생성하고/etc/exports파일에경로 클라이언트(옵션) [...]형식으로 추가합니다.- 최초에는 파일 내용이 없기 때문에 스크린샷과 같이 입력해줘도 되지만, vi나 nano 같은 에디터를 쓰는 것이 작성이나 수정하기 더 수월합니다.
- 클라이언트는 호스트명이 올 수도 있고, IP주소가 올 수도 있습니다.
- 저는 우선 rw(read & write) 권한만 줬는데 async/sync, root_squash/no_root_squash/all_squash, anonuid/anongid 등 다른 옵션들에 대해서는 터미널에서
man exports명령을 실행하면 자세한 설명을 볼 수 있습니다.
exportfs로 변경사항을 반영해줍니다.-r은 reexport이고 제대로 적용됐는지-v로 볼 수 있습니다.- 제가 준 rw 옵션 말고도 기본 옵션이 많이 적용되어 있습니다.
연결 후 확인 가능하도록 임의로 파일과 디렉토리를 만들어둡시다.

NFS 서버에 연결
로컬에서 마운트
우선 로컬에서 마운트를 해보겠습니다.
마운트 할 디렉토리를 생성하고 마운트 합니다.

파일, 디렉토리 생성/삭제를 해봅니다.

- 위에서 rw 권한을 줬는데 권한이 없다고 생성/삭제가 안됩니다.
NFS는 기본적으로 클라이언트의 root 사용자를 서버의 nobody에 매핑하는
root_squash기능을 사용하여 무단 쓰기를 방지합니다3.
권한 문제를 해결하기 위해 NFS 서비스 계정을 따로 만들어서 사용하겠습니다.

- 이 유저에 원격 접속을 하지는 않을거라 유저 생성 시
-M,-s /sbin/nologin옵션을 사용했습니다. - 공유 디렉토리
/data의 소유자/소유그룹을 변경해줍니다.
- 이 유저에 원격 접속을 하지는 않을거라 유저 생성 시
새로 생성한
nfsuser의 uid, gid를 확인하고, 공유 옵션을 수정한 뒤 nfs-server를 재시작합니다.
이제는 파일, 디렉토리의 생성/삭제가 다 잘 되는 것을 확인할 수 있습니다.

원격지에서 마운트
그러면 이제 원격지(이번 테스트에서는 다른 VM)에서 마운트 해봅시다.
클라이언트도
nfs-utils패키지가 필요하므로 설치합니다.그 다음은 [로컬에서 마운트]와 과정은 비슷한데,
mount명령어 옵션에 원격지 주소를 적어줘야 합니다.
이번에도 파일, 디렉토리 생성/삭제 테스트를 해봅시다.

추가로, 재부팅 후에도 마운트가 되도록 설정해봅시다.
/etc/fstab파일을 수정해줘야 합니다.
/etc/fstab파일에 적는 값은server:path /mountpoint fstype option,option,... 0 0형식입니다.- 마지막 두
0은 NFS에서는 사용되지 않는 값이라 0으로 둡니다. - 더 자세한 설명은
man nfs를 참고하세요.
- 마지막 두
이렇게 NFS 서버-클라이언트 구성 및 연결 실습을 해봤습니다. 유용하게 잘 사용하시길 바라겠습니다.
참고: 이 글에서 언급되었으나 깊게 설명하지 않은 내용입니다.
- Linux shell
- Linux filesystem
AWS. “NFS와 SMB의 차이점은 무엇인가요?” aws.amazon.com. https://aws.amazon.com/ko/compare/the-difference-between-nfs-smb/ (accessed Nov. 13, 2024). ↩︎ ↩︎
Microsoft. “네트워크 파일 시스템 개요.” Microsoft Learn. https://learn.microsoft.com/ko-kr/windows-server/storage/nfs/nfs-overview (accessed Oct. 26, 2024). ↩︎
Red Hat. “6.5. 마운트된 NFS 내보내기에 대한 파일 권한.” Red Hat Documentation. https://docs.redhat.com/ko/documentation/red_hat_enterprise_linux/9/html/managing_file_systems/file-permissions-on-mounted-nfs-exports_securing-nfs (accessed Oct. 26, 2024). ↩︎
Comments