Rocky9

[Linux] Rocky Linux 9.5 NFS 구성 및 테스트 가이드 (rw/ro + root_squash 비교)






1. 개요

  • NFS(Network File System)를 설치하고, rw/roroot_squash 옵션에 따른 접근 제어와 성능을 테스트하는 방법을 정리한 가이드입니다.
  • 서버와 클라이언트 간 파일 공유를 설정한 뒤, 쓰기/읽기 권한, root 권한 매핑, 그리고 I/O 성능 차이를 실제로 확인합니다.



2. 버전

  • Rocky Linux 9.5



3. 설명




3-1. nobody란?

  • nobody는 리눅스 시스템에서 권한이 가장 낮은 익명 사용자를 의미합니다.
  • 주로 보안상 “특정 사용자의 권한을 제한”할 때 사용됩니다.
    • root_squash 옵션이 활성화되면, 클라이언트의 root 사용자가 서버에서 파일을 수정하려고 할 때 nobody 권한으로 강등됩니다.
    • 이렇게 하면 클라이언트가 root 권한을 이용해 서버의 중요한 파일을 변경하는 것을 방지할 수 있습니다.



3-2. NFS(Network File System) 란?

  • 리눅스 및 유닉스 환경에서 네트워크를 통해 파일 시스템을 공유하는 프로토콜입니다.
  • 한 서버의 디렉터리를 다른 클라이언트가 로컬 디렉터리처럼 마운트하여 사용할 수 있습니다.
    • 주요 특징
      • 네트워크를 통한 디렉터리 공유
      • 사용자는 마치 로컬 디스크처럼 접근 가능
      • 사용자 권한 및 UID/GID 매핑 기반 접근 제어
      • 파일 잠금, 캐시, 동기화 기능 지원
    • 사용 목적
      • 중앙 서버에 데이터를 저장하고 여러 시스템에서 접근
      • 클러스터(Cluster) 환경에서 공유 스토리지 구성
      • 백업, 로그 수집, 공용 데이터 디렉터리 제공



3-3. 주요 용어 정리

용어설명
NFS 서버파일을 공유하는 주체. /etc/exports 파일로 공유 디렉터리 정의
NFS 클라이언트공유된 디렉터리를 네트워크를 통해 마운트하여 사용하는 시스템
root_squash클라이언트의 root 사용자를 서버의 nobody 사용자로 매핑 (보안 강화용)
no_root_squashroot 계정을 그대로 유지 (보안 위험 높음, 테스트 환경용)
sync / asyncsync는 안정적이지만 느리고, async는 빠르지만 비정상 종료 시 데이터 유실 가능
UID/GID 매핑클라이언트와 서버의 사용자 ID가 일치해야 동일 권한으로 접근 가능



3-4. NFS 서버 옵션

옵션설명
rw읽기/쓰기 허용
ro읽기 전용
sync데이터가 디스크에 기록될 때까지 응답 지연 (안정적)
async메모리에 먼저 기록 후 응답 (빠르지만 위험)
root_squash클라이언트 root → 서버 nobody로 매핑
no_root_squash클라이언트 root를 그대로 유지
all_squash모든 사용자 → nobody로 매핑
anonuid / anongid익명 사용자(nobody)의 UID/GID를 명시적으로 지정
secure1024 이하 포트에서만 접근 허용 (기본값)
insecure높은 포트에서도 접근 허용
wdelay여러 쓰기 요청을 모아 한 번에 기록 (성능 향상)
no_subtree_check서브 디렉터리 확인 비활성화 (성능 향상)



3-5. NFS 클라이언트 마운트 옵션

옵션설명
vers=3 / vers=4NFS 버전 지정
rw / ro읽기/쓰기 또는 읽기 전용
sync / async서버와 동일 의미
hard / soft서버 응답 지연 시 처리 방식 (hard는 계속 재시도, soft는 에러 반환)
timeo=n타임아웃 시간 설정 (기본 600 = 60초)
intr서버 응답이 없을 때 작업 중단 가능
nolock파일 잠금(lock) 기능 비활성화
noatime파일 접근 시 접근시간(atime) 갱신하지 않음 (성능 향상)



4. NFS 서버




4-1. NFS 패키지 설치

# dnf -y install nfs-utils



4-2. NFS 서비스 활성화 및 실행

# systemctl enable --now nfs-server



4-3. 공유 디렉터리 생성

# mkdir -p /nfs/{rw_squash,ro_squash,rw_no_squash,ro_no_squash}



4-4. NFS 설정

# chmod 777 /nfs/{rw_squash,ro_squash}


# vim /etc/exports


설정 예시:

/nfs/rw_squash     192.168.204.0/24(rw,async,root_squash)
/nfs/ro_squash     192.168.204.0/24(ro,sync,root_squash)
/nfs/rw_no_squash  192.168.204.231(rw,sync,no_root_squash)
/nfs/ro_no_squash  192.168.204.231(ro,sync,no_root_squash)



4-5. NFS 설정 적용

# exportfs -ra



4-6. NFS 설정 확인

# exportfs -v


출력 예시:

/nfs/rw_no_squash 192.168.204.231(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,no_root_squash,no_all_squash)
/nfs/ro_no_squash 192.168.204.231(sync,wdelay,hide,no_subtree_check,sec=sys,ro,secure,no_root_squash,no_all_squash)
/nfs/rw_squash 192.168.204.0/24(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash)
/nfs/ro_squash 192.168.204.0/24(sync,wdelay,hide,no_subtree_check,sec=sys,ro,secure,root_squash,no_all_squash)



5. 방화벽




5-1. 기존 서비스 확인

# firewall-cmd --list-services


출력 예시:

cockpit dhcpv6-client ntp ssh



5-2. NFS 관련 포트 허용

# firewall-cmd --permanent --add-service=nfs --add-service=rpc-bind --add-service=mountd
# firewall-cmd --reload



5-3. 방화벽 설정 확인

# firewall-cmd --list-services


출력 예시:

cockpit dhcpv6-client mountd nfs ntp rpc-bind ssh



6. NFS 클라이언트




6-1. NFS 패키지 설치

# dnf -y install nfs-utils



6-2. 마운트 포인트 생성

# mkdir -p /nfs/{rw_squash,ro_squash,rw_no_squash,ro_no_squash}



6-3. 수동 마운트

# mount -t nfs -o vers=3,rw,async 192.168.204.230:/nfs/rw_squash /nfs/rw_squash
# mount -t nfs -o vers=3,ro,sync 192.168.204.230:/nfs/ro_squash /nfs/ro_squash



6-4. 자동 마운트

# vim /etc/fstab


설정 예시:

192.168.204.230:/nfs/rw_no_squash /nfs/rw_no_squash nfs rw,async,vers=3 0 0
192.168.204.230:/nfs/ro_no_squash /nfs/ro_no_squash nfs ro,async,vers=3 0 0


# systemctl daemon-reload
# mount -a



6-5. 마운트 확인

# df -Th | grep nfs


출력 예시:

192.168.204.230:/nfs/rw_squash    nfs       252G   14G  239G   6% /nfs/rw_squash
192.168.204.230:/nfs/ro_squash    nfs       252G   14G  239G   6% /nfs/ro_squash
192.168.204.230:/nfs/rw_no_squash nfs       252G   14G  239G   6% /nfs/rw_no_squash
192.168.204.230:/nfs/ro_no_squash nfs       252G   14G  239G   6% /nfs/ro_no_squash



7. 테스트




7-1. 권한 테스트

  • root_squash : root 사용자를 nobody로 매핑 → 보안 강화
  • no_root_squash : root 그대로 유지 → 테스트 환경 전용


# echo "rw,ro test" >> /nfs/rw_squash/rw_ro_test
# echo "rw,ro test" >> /nfs/rw_no_squash/rw_ro_test
# echo "rw,ro test" >> /nfs/ro_squash/rw_ro_test


출력 예시:

-bash: /nfs/ro_squash/rw_ro_test: Read-only file system


# echo "rw,ro test" >> /nfs/ro_no_squash/rw_ro_test


출력 예시:

-bash: /nfs/ro_no_squash/rw_ro_test: Read-only file system


# ls -al /nfs/rw_squash/rw_ro_test


출력 예시:

-rw-r--r-- 1 nobody nobody 11 Oct 18 16:52 /nfs/rw_squash/rw_ro_test


# ls -al /nfs/rw_no_squash/rw_ro_test


출력 예시:

-rw-r--r-- 1 root root 11 Oct 18 16:52 /nfs/rw_no_squash/rw_ro_test



7-2. 성능 테스트

  • async는 빠르지만 데이터 유실 가능성 존재
  • sync는 안전하지만 I/O 속도는 느림


# time dd if=/dev/zero of=/nfs/rw_squash/file bs=1M count=100


출력 예시:

100+0 records in
100+0 records out
104857600 bytes (105 MB, 100 MiB) copied, 0.398387 s, 263 MB/s

real    0m0.426s
user    0m0.000s
sys     0m0.259s


# time dd if=/dev/zero of=/nfs/rw_no_squash/file bs=1M count=100


출력 예시:

100+0 records in
100+0 records out
104857600 bytes (105 MB, 100 MiB) copied, 0.975371 s, 108 MB/s

real    0m1.005s
user    0m0.000s
sys     0m0.432s



seuheu

최근 게시물

[Linux] Rocky Linux 9.5 Cron 설정 및 테스트 방법

https://youtu.be/4MVxzmepY3s 1. 개요 리눅스에서 정기적으로 실행되는 작업(백업, 로그 정리, 모니터링 등)은 cron 서비스를 통해 자동화할 수 있습니다.…

%일 전

[Linux] Rocky Linux 9.5 계정 관리 (생성 · 권한 · 잠금 · 삭제) 정리

https://youtu.be/vPfxWFBE1yc 1. 개요 리눅스 서버를 운영할 때 사용자 계정 생성, 비밀번호 설정, 권한 부여, 계정…

%일 전

[Linux] Rocky Linux 9.5 Chrony로 시간 동기화 설정하기

https://youtu.be/Gvp2XwBfoKw 1. 개요 리눅스 서버에서는 시스템 시간(OS 시간) 과 하드웨어 시간(RTC, Real-Time Clock) 을 동기화하는 것이 매우 중요합니다. 클러스터…

%일 전

[Linux] Rocky Linux 9.5 리눅스 시간 관리 입문: 하드웨어(RTC)와 시스템(OS) 시간 개념부터 동기화까지

https://youtu.be/pt9qhawl8LY 1. 개요 리눅스 서버에서는 시스템 시간(OS 시간) 과 하드웨어 시간(RTC, Real-Time Clock) 을 모두 관리할 수 있습니다. 운영체제의…

%일 전

[Linux] Rocky Linux 9.5 타임존(Timezone)이 뭐예요? 리눅스 시간 확인과 변경 방법

https://youtu.be/iPdHGXh7DUg 1. 개요 서버 운영 시 시스템 시간이 올바르게 설정되어 있지 않으면 로그 분석, 모니터링,…

%일 전

[Linux] Rocky Linux 9.5 LVM 구성 디스크 초기화 절차 (PV/VG/LV/Partiton 제거)

https://youtu.be/F06CS8Encr8 1. 개요 LVM 환경에서 캐시 LV까지 포함된 볼륨 그룹(VG) 을 깨끗하게 삭제하는 과정을 다룹니다. umount…

%일 전