AlmaLinux 9에서 NFS 서버와 클라이언트 설치 및 구성 가이드

AlmaLinux 9에서 NFS(Network File System)를 설치하고 서버에 공유 디렉터리를 구성한 다음 클라이언트에서 이를 마운트하고 부팅 시 자동 마운트를 설정하는 단계별 안내입니다. idmapd 설정, /etc/exports 구성, firewalld 규칙, /etc/fstab 옵션, SELinux·권한·문제 해결 체크리스트와 보안 권장사항까지 포함합니다.
개요
NFS는 네트워크를 통해 원격 파일 시스템을 로컬처럼 접근할 수 있게 하는 표준 프로토콜입니다. Sun Microsystems에서 개발되었고, 중앙 집중형 파일 공유 환경에서 널리 사용됩니다. 이 문서는 AlmaLinux 9 환경을 기준으로 NFS Server를 설치하고 클라이언트에서 마운트하여 자동 마운트를 설정하는 전체 워크플로우를 다룹니다.
중요 용어 한 줄 정의
- NFS: 네트워크 파일 시스템. 원격 디렉터리를 로컬처럼 마운트해 파일을 읽고 쓸 수 있게 하는 프로토콜.
- RPC: 원격 프로시저 호출, NFS의 제어 통신에 사용되는 메커니즘.
필요 조건
- AlmaLinux 9 서버(예: hostname: almalinux9-server, IP: 192.168.10.15)
- sudo 권한이 있는 비루트 사용자
- 하나 이상의 클라이언트(RHEL 계열 배포판이면 충분)
중요
- 내부 네트워크 예시 IP는 192.168.10.0/24입니다. 환경에 맞게 주소를 조정하세요.
1. NFS 서버와 클라이언트에 nfs-utils 설치
AlmaLinux 포함 대부분의 RHEL 기반 배포판은 AppStream 저장소에서 nfs-utils 패키지를 제공합니다. 서버와 클라이언트 양쪽에 설치해야 합니다.
서버와 클라이언트에서 다음을 실행하세요.
sudo dnf install nfs-utils
설치가 완료되면 idmapd 구성 및 NFS 서비스 시작으로 넘어갑니다.
2. idmapd 설정
NFSv4에서는 사용자/그룹 매핑을 위해 idmapd가 필요합니다. /etc/idmapd.conf에서 Domain 값을 설정하세요.
sudo nano /etc/idmapd.conf
Domain 항목의 주석을 해제하고 서버의 FQDN이나 호스트명을 입력합니다.
Domain = almalinux9-server
파일을 저장하고 종료합니다.
3. NFS 서비스 시작 및 활성화
서비스를 시작하고 부팅 시 자동 시작하도록 활성화합니다.
sudo systemctl start nfs-server
sudo systemctl enable nfs-server
sudo systemctl status nfs-server
정상적으로 실행 중이면 상태 출력에 active (running) 이 보입니다.
4. 공유 디렉터리 생성 및 권한 설정
서버에서 공유할 디렉터리를 생성하고 권한을 설정합니다. 예시는 /mnt/shared와 /mnt/backup입니다.
sudo mkdir -p /mnt/shared /mnt/backup
sudo chown -R nobody:nobody /mnt/shared /mnt/backup
sudo chmod 775 /mnt/shared /mnt/backup
설명
- 소유자를 nobody:nobody으로 설정한 이유는 기본적인 비특권 공유 계정으로 매핑을 쉽게 하기 위해서입니다. 실제 환경에서는 필요에 따라 사용자·그룹을 맞춤 설정하세요.
5. /etc/exports 구성
NFS 서버에 어떤 디렉터리를 누구에게 어떤 옵션으로 제공할지 /etc/exports에 정의합니다.
sudo nano /etc/exports
예시 구성:
/mnt/backup 192.168.10.21(rw,sync,no_subtree_check)
/home 192.168.10.21(rw,sync,no_root_squash,no_subtree_check)
/mnt/shared 192.168.10.0/24(rw,sync,no_subtree_check)
주요 옵션 설명
- rw: 읽기/쓰기 허용
- sync: 서버가 디스크에 데이터를 동기 기록한 후에 클라이언트 요청을 처리합니다. 데이터 안정성↑, 성능↓
- no_subtree_check: 하위 트리 검사 비활성화. 성능 향상
- no_root_squash: 클라이언트의 root를 서버 상에서 root로 취급(권한 상승 가능). 보안상 주의 필요
파일을 저장하고 /etc/exports 변경을 적용하려면 NFS를 재시작합니다.
sudo systemctl restart nfs-server
sudo exportfs -v
exportfs -v 출력으로 현재 공유 상태를 확인하세요.
6. firewalld로 포트 및 서비스 허용
NFS는 여러 RPC 기반 서비스를 사용합니다. firewalld를 사용 중이면 아래 서비스를 허용합니다.
sudo firewall-cmd --add-service={nfs,nfs3,mountd,rpc-bind} --permanent
sudo firewall-cmd --reload
sudo firewall-cmd --list-all
서비스가 잘 추가됐는지 확인하세요.
중요
- 방화벽 규칙은 환경(퍼블릭 인터넷 vs 내부망)에 따라 더 엄격히 적용해야 합니다. 외부에 직접 노출해서는 안 됩니다.
7. 클라이언트 설정 및 공유 확인
클라이언트에서 nfs-utils를 설치한 뒤 NFS 서버가 제공하는 공유 목록을 확인합니다.
sudo dnf install nfs-utils
sudo showmount -e 192.168.10.15
서버가 제공한 경로(/mnt/backup, /mnt/shared, /home)가 출력되는지 확인합니다.
클라이언트에서 마운트할 디렉터리를 생성합니다.
sudo mkdir -p /data /backup /shared
마운트 명령:
sudo mount 192.168.10.15:/mnt/backup /backup
sudo mount 192.168.10.15:/mnt/shared /shared
sudo mount 192.168.10.15:/home /data
마운트가 정상인지 확인:
sudo df -h
8. 클라이언트에서 쓰기 확인
클라이언트에서 파일을 생성하고 서버에서 확인하여 읽기/쓰기 권한을 검증합니다.
echo "This file from client" > /backup/test-write1.txt
echo "This file from client" > /shared/test-write2.txt
echo "This file from client" > /data/alice/test-write3.txt
서버로 돌아가 다음을 확인하세요.
cat /mnt/backup/test-write1.txt
cat /mnt/shared/test-write2.txt
cat /home/alice/test-write3.txt
파일이 서버에서 보이면 쓰기 동작이 성공한 것입니다.
9. /etc/fstab으로 자동 마운트 설정
클라이언트 재부팅 시 자동으로 마운트하려면 /etc/fstab에 항목을 추가하세요.
먼저 현재 마운트를 해제합니다.
sudo umount /data /backup /shared
sudo df -h
/etc/fstab 편집:
sudo nano /etc/fstab
예시 항목:
192.168.10.15:/mnt/backup /backup nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0
192.168.10.15:/mnt/shared /shared nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0
192.168.10.15:/home /data nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0
옵션 설명 요약
- auto: 부팅 시 자동 마운트
- nofail: 마운트 실패 시 부팅을 중단하지 않음
- noatime: 접근 시간 기록 비활성화로 읽기 성능 향상
- nolock: 파일 잠금 비활성화
- intr: 인터럽트 허용(커널이 I/O를 중단 가능)
- tcp: TCP 프로토콜 사용
- actimeo=1800: 캐시 일치 시간(초)
저장 후 다음으로 즉시 마운트를 적용합니다.
sudo mount -a
sudo df -h
자동 마운트가 정상 동작하는지 확인하세요.
10. SELinux 고려사항
AlmaLinux에서 SELinux가 활성화되어 있다면 NFS를 위해 적절한 컨텍스트와 boolean을 설정해야 할 수 있습니다.
- NFS 마운트에 대해 SELinux가 문제를 일으키면 audit 로그(/var/log/audit/audit.log)를 확인하세요.
- 필요한 경우 다음 boolean을 활용할 수 있습니다.
sudo setsebool -P use_nfs_home_dirs 1
설정 변경 전에는 정책 영향과 보안 리스크를 검토하세요.
11. 문제 해결 체크리스트
- showmount -e 서버에서 공유가 보이는가?
- exportfs -v로 서버가 해당 경로를 내보내는가?
- 방화벽에서 nfs, mountd, rpc-bind가 허용되었는가?
- 클라이언트에서 DNS 또는 /etc/hosts로 서버 이름을 해석 가능한가?
- SELinux가 거부 로그를 생성하는가? (/var/log/audit/audit.log)
- 네트워크 경로에 패킷 손실이나 MTU 이슈는 없는가?
- no_root_squash 사용 시 권한 오남용 위험을 확인했는가?
일반적인 증상과 해결법
- 마운트 시 시간이 오래 걸림 또는 타임아웃: 네트워크 연결 및 방화벽 확인
- 파일이 보이나 쓰기가 불가: 권한·소유자·export 옵션 확인
- 파일 권한이 클라이언트별로 달라 보임: UID/GID 일치 여부 확인 및 idmapd 구성
12. 보안 강화 권장사항
- 공개 네트워크에서 직접 NFS 포트를 열지 마세요. 내부 네트워크 또는 VPN을 사용하세요.
- no_root_squash는 최소화하여 민감한 디렉터리에 적용하지 마세요.
- export 대상은 CIDR로 최소 권한 네트워크만 허용하세요.
- 정기적으로 /etc/exports와 방화벽 규칙을 검토하세요.
- 감사 로깅(auditd)으로 중요한 디렉터리 접근을 모니터링하세요.
- 가능하면 Kerberos를 사용한 인증(NFSv4 + sec=krb5) 도입을 검토하세요.
13. 대안과 비교
- SMB/CIFS: Windows 환경과의 파일 공유가 주요 목표라면 Samba가 더 적합합니다.
- GlusterFS: 분산 파일 시스템, 다중 서버에 걸친 확장성과 복제 필요 시 사용
- CephFS: 대규모 분산 스토리지가 필요할 때 선택
- SSHFS: 관리가 간단한 원격 마운트가 필요할 때(퍼포먼스는 NFS보다 낮음)
선택 가이드
- 단일 중앙 서버 + 내부 네트워크 + Linux 클라이언트: NFS 권장
- Windows 클라이언트가 많은 환경: Samba 권장
- 고가용성·확장성 필요: GlusterFS 또는 Ceph 권장
14. 마이그레이션 및 호환성 팁
- NFSv3 vs NFSv4: NFSv4는 방화벽 규칙이 단순하고 상태 기반(stateful)이며 idmapd를 사용합니다. 기존 NFSv3 환경을 옮길 때는 클라이언트 호환성을 확인하세요.
- UID/GID 불일치 문제: 사용자 매핑 전략을 정의(중앙 인증 또는 계정 동기화)
- 성능 튜닝: rsize/wsize, async 옵션(주의), 하드웨어 I/O 특성에 따른 조정
15. 운영자 역할별 체크리스트
시스템 관리자
- nfs-utils 설치 및 서비스 활성화
- /etc/exports 및 방화벽 검토
- SELinux boolean 점검
- 백업 정책 수립
보안 담당자
- no_root_squash 사용 검토 및 제한
- 네트워크 접근 제어 목록 검토
- 감사와 알림 설정
개발자/사용자
- 공유 디렉터리 사용 가이드(경로, 권한) 숙지
- 중요한 파일은 버전 관리 및 백업 권장
16. 테스트 사례 및 수락 기준
기본 테스트
- 클라이언트에서 showmount -e로 서버 공유가 보여야 함
- 클라이언트에서 공유 디렉터리 마운트 후 읽기/쓰기 가능
- 서버에서 exportfs -v에 공유가 나열되어야 함
- 재부팅 후 /etc/fstab으로 자동 마운트되어야 함
수락 기준
- 모든 테스트 항목 통과
- 보안검토(방화벽, no_root_squash, SELinux) 통과
17. 빠른 참조 치트시트
자주 쓰는 명령
- 서버 공유 목록: sudo exportfs -v
- 클라이언트에서 서버 공유 확인: sudo showmount -e <서버_IP>
- 서비스 관리: sudo systemctl start|restart|enable nfs-server
- 방화벽: sudo firewall-cmd –add-service={nfs,nfs3,mountd,rpc-bind} –permanent
- 즉시 마운트 적용: sudo mount -a
/etc/fstab 예시 옵션 설명 요약
- nofail: 네트워크 문제 시 부팅 지연 방지
- actimeo: 클라이언트 캐시 지속 시간
- nolock: lockd 사용 안 함(공유 동시성 문제 주의)
18. 결정 트리
flowchart TD
A[시작: NFS가 필요한가?]
A -->|Windows 클라이언트 다수| B[Samba 권장]
A -->|리눅스 클라이언트, 내부망| C[NFS 권장]
C --> D{고가용성 필요?}
D -->|예| E[GlusterFS/Ceph 검토]
D -->|아니오| F[NFS 단일 서버 구성]
19. 마무리 요약
축하합니다. 이 가이드에서 AlmaLinux 9에 NFS Server를 설치하고 공유 디렉터리를 구성했으며, 클라이언트에서 마운트하고 /etc/fstab으로 자동 마운트까지 설정하는 전 과정을 다뤘습니다. 추가로 SELinux, 방화벽, 보안 권장사항, 문제 해결 체크리스트와 운영자별 체크리스트, 대안 비교와 테스트 케이스를 제공했습니다.
다음 단계 권장
- Kerberos 기반 인증 도입(NFSv4 + sec=krb5) 검토
- 백업·감사 정책 수립
- 운영 환경에 맞춘 성능 튜닝과 모니터링 도구 통합
요점 정리
- /etc/exports로 공유를 정의하고 exportfs로 확인
- firewalld에서 관련 서비스를 허용
- 클라이언트는 showmount로 공유를 확인 후 mount 또는 /etc/fstab로 자동 마운트
- 보안(방화벽, SELinux, no_root_squash)에 특별히 주의
중요
운영 환경에서는 네트워크 접근 제어, 권한 최소화, 정기적인 감사가 필수입니다.