본문 바로가기
서버 구축·실습

리눅스 NFS 서버 구축 실습 정리: exportfs 옵션 이해부터 nobody 권한 매핑까지

by joe2026 2026. 1. 24.

멀티클라우드·서버 운영 학습 과정에서 진행한 NFS(Network File System, 네트워크 파일 시스템) 실습을 이론 + 실습 + 검증 흐름으로 정리했습니다. 특히 exportfs 옵션, root_squash/all_squash 기반의 nobody(nfsnobody) 권한 매핑을 중점적으로 다룹니다.

NFS구조도

1. NFS와 exportfs 역할

NFS(Network File System, 네트워크 파일 시스템)는 네트워크를 통해 서버의 디렉터리를 공유하고, 클라이언트가 해당 디렉터리를 마운트하여 로컬 디렉터리처럼 사용하게 해주는 기술입니다.

핵심 개념

  • /etc/exports: “무엇을 누구에게 어떤 정책으로 공유할지”를 정의하는 설정 파일
  • exportfs: /etc/exports 정책을 NFS 서버에 “적용/해제/조회”하는 관리 명령

이 실습의 목적은 단순히 “연결 성공”이 아니라, 권한 통제(Privilege Control, 권한 제어)검증(Verification, 검증)까지 포함해 운영 관점으로 이해하는 것입니다.

2. exportfs 명령 옵션 정리

먼저 exportfs에서 자주 사용하는 옵션을 정리합니다.

옵션 의미 활용 상황
-v Verbose(상세 출력): export 대상과 옵션을 자세히 표시 현재 적용된 공유 정책을 눈으로 확인
-r Re-export: /etc/exports를 다시 읽고 반영 설정 변경 후 즉시 적용
-a All: 모든 export 항목을 대상으로 처리 전체 적용/전체 해제 등
-u Unexport: 특정 export 해제 특정 클라이언트 공유만 중단
-s 현재 export 상태 요약 출력 간단한 상태 확인

실습에서 가장 많이 쓰는 조합

exportfs -rav

-r(재적용) + -a(전체) + -v(상세 확인) 조합으로, 설정 변경 후 반영과 동시에 옵션을 확인할 수 있어 실습/운영 모두에서 유용합니다.

3. /etc/exports 문법과 구조

/etc/exports는 다음 구조로 작성합니다.

공유디렉터리   클라이언트(옵션)

예시:

/srv/nfs/share 192.168.88.21(rw,sync,root_squash)

실습 환경 예시

  • NFS Server: 192.168.88.10
  • Client-1: 192.168.88.21
  • Client-2: 192.168.88.22

4. /etc/exports 주요 옵션 분류

4-1. 접근 권한(Access Control, 접근 제어)

옵션 의미
ro 읽기 전용
rw 읽기/쓰기 허용

4-2. 동기화(Synchronization, 동기화)

옵션 의미 비고
sync 쓰기 즉시 디스크 반영 안정적(기본에 가까움)
async 메모리에 쌓았다가 반영 빠르지만 장애 시 데이터 유실 위험

4-3. root 권한 제어(Privilege Control, 권한 제어) — 핵심

옵션 의미 운영 관점
root_squash 클라이언트 root 권한을 nfsnobody로 매핑 보안상 권장(기본값으로 동작하는 경우가 많음)
no_root_squash 클라이언트 root 권한 유지 보안 위험: 운영 환경에서는 신중해야 함
all_squash 모든 사용자를 nfsnobody로 매핑 공용/테스트/익명 공유 성격의 환경에 사용

4-4. nobody(nfsnobody) 매핑(Anonymous Mapping, 익명 매핑)

옵션 의미 예시
anonuid nobody로 매핑될 UID 지정 anonuid=65534
anongid nobody로 매핑될 GID 지정 anongid=65534

대부분의 리눅스 배포판에서 nfsnobody는 UID/GID가 65534인 경우가 많습니다. (실제 값은 시스템마다 다를 수 있으므로 필요하면 getent passwd nfsnobody로 확인 가능합니다.)

5. 실습: nobody(nfsnobody)로 권한 매핑하기

5-1. root만 nobody로 매핑(운영에서 일반적)

클라이언트의 root만 제한하려면 root_squash를 사용합니다.

# /etc/exports
/srv/nfs/share 192.168.88.21(rw,sync,root_squash)
/srv/nfs/share 192.168.88.22(rw,sync,root_squash)

5-2. 모든 사용자를 nobody로 매핑(공용/테스트 성격)

클라이언트의 모든 사용자를 nobody로 만들고 싶다면 all_squash + anonuid/anongid를 사용합니다.

# /etc/exports
/srv/nfs/share 192.168.88.21(rw,sync,all_squash,anonuid=65534,anongid=65534)
/srv/nfs/share 192.168.88.22(rw,sync,all_squash,anonuid=65534,anongid=65534)

운영 관점 주의

no_root_squash는 실습에서는 편하지만, 운영 환경에서는 클라이언트 root가 서버 공유 디렉터리에 대해 과도한 권한을 갖게 되어 보안 사고로 이어질 수 있습니다.

5-3. 설정 반영

exportfs -rav

6. 검증: exportfs, mount, df로 확인하기

6-1. 서버에서 export 정책 확인

exportfs -v

출력에 공유 경로와 옵션이 함께 보이면 정책이 적용된 것입니다.

6-2. 클라이언트에서 마운트 확인

fstab 설정 후 재부팅 없이 적용하려면 mount -a를 사용합니다.

mount -a

중요: mount -a는 성공하면 보통 출력이 없습니다. (침묵 = 정상)

6-3. 실제 마운트 상태 확인

mount | grep nfs

6-4. 용량/마운트 지점 확인

df -h | grep nfs

df -h는 디스크/네트워크 파일시스템의 용량 정보를 사람이 읽기 쉬운 단위(G, T 등)로 보여줍니다. Filesystem 컬럼에 NFS 서버 주소가 보이면 네트워크 마운트가 정상입니다.

6-5. 권한 매핑(=nfsnobody) 검증: 파일 I/O 테스트

클라이언트에서 파일을 만들고, 서버에서 소유자를 확인하면 옵션이 제대로 동작하는지 확인할 수 있습니다.

클라이언트에서 파일 생성

cd /mnt/nfs
touch test_from_client.txt
ls -l

서버에서 소유자 확인

ls -l /srv/nfs/share

결과가 nfsnobody로 보이면 root_squash 또는 all_squash에 따른 매핑이 정상 동작한 것입니다.

7. 운영 관점에서 중요한 이유

NFS는 “파일 공유”라는 기능만 보면 단순해 보이지만, 실제 운영에서는 권한 설계가 핵심입니다.

  • 권한(Privilege, 권한)을 잘못 열어두면 공유 디렉터리가 곧 취약점이 된다
  • UID/GID 매핑 개념이 없으면 서버가 늘어날수록 권한 충돌이 발생한다
  • 검증 루틴(exportfs → mount → df → 파일 I/O)을 습관화하면 장애를 예방한다

한 줄 정리

NFS의 핵심은 “연결”이 아니라 “통제(Access Control, 접근 제어)”이며, exportfs 옵션은 그 통제 정책의 중심입니다.

8. 다음 실습 확장 아이디어

  • NFS 마운트 옵션 hard/soft 차이와 장애 상황(Hang) 대응
  • NFS 서버 중지 시 클라이언트에서 발생하는 현상과 복구 절차
  • 웹 서버(DocumentRoot)와 NFS를 연동해 다중 서버에서 동일 콘텐츠 제공

이 글은 멀티클라우드 학습 과정에서 직접 실습하며 정리한 내용입니다. 추후 실습을 확장하면서 내용을 계속 업데이트할 예정입니다.

참고: 운영 환경에서는 네트워크/방화벽/SELinux 정책에 따라 NFS 접근이 제한될 수 있습니다. 실습에서는 단순화를 위해 기본 흐름을 중심으로 정리했습니다.

 


소개 및 문의 · 개인정보처리방침 · 면책조항

© 2026 클라우드학습기