RHEL에서 NFS 클라이언트 액세스 구성

LinuxBeginner
지금 연습하기

소개

이 실습에서는 Red Hat Enterprise Linux(RHEL) 시스템에서 NFS 클라이언트 액세스를 구성하는 데 필요한 기본 기술을 배웁니다. 먼저 mount 명령으로 네트워크 공유를 수동으로 마운트하면서 기본 절차를 익힙니다. 그런 다음 /etc/fstab에 영구 마운트 항목을 구성해 시스템을 재부팅한 뒤에도 NFS 공유를 자동으로 사용할 수 있도록 합니다. 이를 통해 정적 네트워크 파일 시스템 통합의 기초를 이해합니다.

이러한 핵심 개념을 바탕으로 자동 마운터를 설정해 더 동적이고 효율적인 방법을 사용합니다. autofs 서비스를 설치하고 활성화한 뒤, 필요할 때 디렉터리를 마운트하는 간접 맵과 고정 마운트 지점을 사용하는 직접 맵을 모두 만듭니다. 마지막으로 여러 사용자가 직접 및 간접 자동 마운트를 올바르게 사용할 수 있는지 확인하면서 안정적인 NFS 클라이언트 구성을 관리하는 능력을 다집니다.

mount 명령으로 NFS 공유 수동 마운트

이 단계에서는 Network File System(NFS) 프로토콜을 사용해 네트워크로 공유된 디렉터리에 수동으로 액세스하는 방법을 배웁니다. NFS를 사용하면 클라이언트 시스템이 로컬 저장소에 액세스하는 것처럼 컴퓨터 네트워크를 통해 파일에 액세스할 수 있습니다. 이 실습에서는 필요한 명령을 연습하기 위해 로컬 시스템에서 NFS 서버와 클라이언트를 모두 실행하는 상황을 시뮬레이션합니다.

시스템에는 /srv/nfs/shared_data 디렉터리를 내보내기(export), 즉 공유하도록 NFS 서버가 미리 구성되어 있습니다. 이 공유 디렉터리를 로컬 폴더에 마운트하고, 액세스를 확인한 다음 마운트를 해제합니다.

Step 1.1: 로컬 마운트 지점 만들기

공유된 NFS 디렉터리에 액세스하려면 "마운트 지점"으로 사용할 로컬 디렉터리가 필요합니다. 마운트 지점은 원격 공유를 마운트했을 때 그 내용이 표시되는 클라이언트 시스템의 빈 폴더입니다. 모든 작업은 ~/project 디렉터리에서 수행합니다.

프로젝트 폴더 안에 nfs_mount라는 디렉터리를 만듭니다.

mkdir ~/project/nfs_mount

프로젝트 폴더의 내용을 나열해 디렉터리가 생성되었는지 확인합니다.

ls -F ~/project
nfs_mount/

Step 1.2: NFS 공유 마운트

이제 mount 명령으로 원격 NFS 공유를 새로 만든 마운트 지점에 연결합니다. 파일 시스템 마운트는 시스템 수준 작업이므로 sudo 권한이 필요합니다.

기본 구문은 mount -t nfs -o vers=3,nolock <server>:<remote_directory> <local_mount_point>입니다.

  • -t nfs -o vers=3,nolock: 파일 시스템 유형을 NFS로 지정하고 NFSv3을 사용하도록 하며, 컨테이너 기반 실습 환경에서 별도의 NFS 잠금 서비스가 실행되지 않으므로 파일 잠금을 로컬에서 처리합니다.
  • localhost:/srv/nfs/shared_data: 마운트할 원본입니다. 서버와 서버가 내보내는 경로를 지정합니다.
  • ~/project/nfs_mount: 공유 디렉터리에 액세스할 로컬 마운트 지점입니다.

다음 명령을 실행해 공유를 마운트합니다.

sudo mount -t nfs -o vers=3,nolock localhost:/srv/nfs/shared_data ~/project/nfs_mount

성공하면 이 명령은 아무 출력도 표시하지 않습니다.

Step 1.3: 마운트 확인 및 공유 사용

mount 명령을 실행한 뒤 공유가 올바르게 마운트되었는지 확인합니다. 몇 가지 방법으로 확인할 수 있습니다.

먼저 mount 명령의 출력을 grep으로 전달해 NFS 마운트만 필터링합니다.

mount | grep nfs
localhost:/srv/nfs/shared_data on /home/labex/project/nfs_mount type nfs (rw,relatime,vers=3,rsize=...,wsize=...,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,local_lock=none,addr=...)

다음으로 마운트 지점의 내용을 확인합니다. 원격 /srv/nfs/shared_data 디렉터리의 파일이 표시되어야 합니다.

ls -l ~/project/nfs_mount
total 4
-rw-r--r--. 1 root root 32 Nov 10 14:30 welcome.txt

이제 이 디렉터리를 로컬 폴더처럼 사용할 수 있습니다. 이 실습 환경에서는 NFS 서버가 no_root_squash로 구성되어 있으므로 파일 소유자가 root입니다. 운영 환경에서는 NFS 서버 설정에 따라 소유자가 nobody로 표시될 수도 있습니다. 마운트한 공유 안에 새 파일을 만들어 보겠습니다. NFS 공유의 소유자가 root일 수 있으므로 파일을 작성하려면 tee 명령과 함께 sudo를 사용해야 합니다.

echo "My test file" | sudo tee ~/project/nfs_mount/my_file.txt > /dev/null

새 파일이 기존 파일과 함께 생성되었는지 확인합니다.

ls -l ~/project/nfs_mount
total 8
-rw-r--r--. 1 root  root  13 Nov 10 14:35 my_file.txt
-rw-r--r--. 1 root  root  32 Nov 10 14:30 welcome.txt

Step 1.4: NFS 공유 마운트 해제

네트워크 공유 사용을 마쳤으면 umount 명령으로 깔끔하게 마운트를 해제해야 합니다. 이렇게 하면 모든 데이터가 동기화되고 연결이 정상적으로 종료됩니다. 이때는 마운트 지점만 지정하면 됩니다.

sudo umount ~/project/nfs_mount

공유가 마운트 해제되었는지 확인하려면 ~/project/nfs_mount 디렉터리의 내용을 나열합니다. 이제 다시 비어 있어야 합니다.

ls -l ~/project/nfs_mount
total 0

/etc/fstab에 영구 NFS 마운트 구성

이 단계에서는 수동 마운트 방법을 익힌 뒤 NFS 마운트를 영구적으로 구성합니다. 수동 마운트는 일시적이므로 시스템을 재부팅하면 유지되지 않습니다. 마운트를 영구적으로 설정하려면 /etc/fstab 파일에 항목을 추가해야 합니다. /etc/fstab은 "file systems table"의 약자로, 시스템이 부팅될 때 자동으로 마운트할 파일 시스템과 장치 목록을 포함합니다.

이 단계에서는 /etc/fstab에 항목을 추가해 같은 NFS 공유를 영구적으로 마운트합니다.

Step 2.1: 환경 준비

먼저 이전 단계의 마운트 지점인 ~/project/nfs_mount가 존재하고 비어 있는지 확인합니다. 이전 단계에서 바로 이어서 진행한다면 이미 존재해야 합니다.

디렉터리가 없으면 지금 만듭니다.

mkdir -p ~/project/nfs_mount

또한 이 디렉터리에 현재 마운트된 항목이 없는지 확인합니다. umount 명령을 실행하면 마운트되지 않은 경우 오류가 표시되지만, 이 경우에는 정상입니다.

sudo umount ~/project/nfs_mount

Step 2.2: /etc/fstab 파일 편집

이제 영구 NFS 마운트를 정의하기 위해 /etc/fstab 파일에 새 줄을 추가합니다. 이 시스템 구성 파일을 편집하려면 sudo를 사용해야 합니다. 여기서는 nano 편집기를 사용합니다.

다음 명령으로 파일을 엽니다.

sudo nano /etc/fstab

파일의 맨 아래로 이동해 다음 줄을 추가합니다. 이 파일의 구문이 잘못되면 시스템 부팅 문제가 발생할 수 있으므로 주의합니다.

localhost:/srv/nfs/shared_data /home/labex/project/nfs_mount nfs defaults,_netdev,vers=3,nolock 0 0

이 줄의 각 항목은 다음과 같습니다.

  • localhost:/srv/nfs/shared_data: 마운트할 장치입니다. NFS 서버(localhost)와 서버가 내보내는 디렉터리(/srv/nfs/shared_data)를 지정합니다.
  • /home/labex/project/nfs_mount: 공유 디렉터리에 액세스할 로컬 마운트 지점입니다.
  • nfs: 파일 시스템 유형을 지정합니다.
  • defaults,_netdev,vers=3,nolock: 마운트 옵션입니다. defaults에는 표준 옵션 집합이 포함되며, 그중 rw는 읽기-쓰기를 의미합니다. _netdev는 네트워크 파일 시스템에 중요한 옵션으로, 이 공유를 마운트하기 전에 네트워크가 활성화될 때까지 시스템이 기다리도록 합니다. vers=3,nolock은 별도의 잠금 서비스 없이 컨테이너 기반 실습 환경에서 동작하는 NFS 프로토콜을 사용하도록 합니다.
  • 0: dump 필드입니다. dump 백업 유틸리티가 사용하며, 값이 0이면 비활성화됩니다.
  • 0: pass 필드입니다. 부팅 시 파일 시스템 검사 순서를 fsck 유틸리티에 지정하며, 값이 0이면 해당 파일 시스템을 검사하지 않습니다.

줄을 추가한 뒤 Ctrl+X, Y, Enter를 차례로 눌러 파일을 저장하고 nano를 종료합니다.

Step 2.3: /etc/fstab 항목 테스트

/etc/fstab 항목을 테스트하기 위해 시스템을 재부팅할 필요는 없습니다. mount 명령은 /etc/fstab을 읽을 수 있습니다. 마운트 지점만 지정하면 mount/etc/fstab에서 해당 항목을 찾아 그 정보를 사용합니다.

마운트 지점만 지정해 공유를 마운트합니다.

sudo mount ~/project/nfs_mount

명령이 오류 없이 완료되면 /etc/fstab 항목이 올바른 것입니다.

Step 2.4: 마운트 확인

mount 명령의 출력과 디렉터리 내용을 확인해 공유가 마운트되었는지 확인합니다.

mount | grep nfs_mount
localhost:/srv/nfs/shared_data on /home/labex/project/nfs_mount type nfs (rw,relatime,vers=3,rsize=...,wsize=...,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,local_lock=none,addr=...,_netdev)

이제 내용을 확인합니다. 공유 디렉터리의 파일이 표시되어야 합니다.

ls -l ~/project/nfs_mount
total 4
-rw-r--r--. 1 root root 32 Nov 10 14:30 welcome.txt

이 마운트는 이제 영구적으로 설정되었으며, 재부팅 후 자동으로 다시 마운트됩니다.

Step 2.5: 환경 정리

이후 실습과의 충돌을 방지하려면 지금 변경 사항을 되돌립니다. 먼저 공유를 마운트 해제한 다음 /etc/fstab에서 추가한 줄을 삭제합니다.

디렉터리의 마운트를 해제합니다.

sudo umount ~/project/nfs_mount

다시 /etc/fstab을 열어 항목을 삭제합니다.

sudo nano /etc/fstab

화살표 키로 추가한 줄(localhost:/srv/nfs/shared_data ... vers=3,nolock ...)로 이동한 다음 Ctrl+K를 눌러 줄 전체를 삭제합니다. 그런 다음 Ctrl+X, Y, Enter를 눌러 저장하고 종료합니다.

이제 다음 실습을 진행할 수 있도록 시스템이 깨끗한 상태로 복원됩니다.

autofs 설치 및 활성화로 자동 마운터 설정

이 단계에서는 수동 및 영구 마운트에서 자동 마운트로 전환합니다. /etc/fstab은 영구 마운트에 유용하지만, 부팅 시 모든 항목을 마운트하려고 한다는 단점이 있습니다. 네트워크 공유를 사용할 수 없으면 부팅이 느려지거나 중단될 수도 있습니다. autofs 서비스가 제공하는 자동 마운터는 네트워크 파일 시스템을 처음 액세스할 때만 필요에 따라 마운트해 이 문제를 해결합니다.

autofs 서비스는 "맵"이라고 하는 구성 파일 집합을 사용해 어떤 원격 공유를 어디에 마운트할지 결정합니다. 이 단계에서는 필요한 패키지를 설치하고 서비스를 시작해 자동 마운터를 사용할 수 있도록 시스템을 준비합니다.

Step 3.1: autofs 패키지 설치

autofs 기능은 기본 RHEL 설치에 포함되지 않습니다. dnf 패키지 관리자로 설치해야 하며, sudo 권한이 필요합니다.

다음 명령으로 autofs 패키지를 설치합니다. -y 플래그는 확인 프롬프트에 자동으로 "yes"라고 응답하므로 이 실습에서 편리합니다.

sudo dnf install -y autofs

이 명령은 autofs 패키지와 필요한 종속 항목을 다운로드하고 설치합니다. 다음과 비슷한 출력이 표시됩니다.

Last metadata expiration check: ...
Dependencies resolved.
================================================================================
 Package       Architecture    Version                Repository           Size
================================================================================
Installing:
 autofs        x86_64          1:5.1.7-50.el9         ...                  ...
...

Transaction Summary
================================================================================
Install  1 Package

Total download size: ...
Installed size: ...
...
Complete!

Step 3.2: autofs 서비스 시작

일반적인 RHEL 시스템에서는 systemctl로 서비스를 시작하고 활성화합니다. 그러나 이 실습은 systemctl을 사용할 수 없는 컨테이너 환경에서 실행됩니다. 따라서 automount라는 명령을 사용해 autofs 데몬을 직접 시작합니다.

이 명령은 자동 마운터 데몬을 시작합니다. 데몬은 백그라운드에서 실행되면서 맵에 구성된 디렉터리에 액세스하려는 시도를 감시합니다.

다음 명령을 실행해 서비스를 시작합니다.

sudo automount

성공하면 이 명령은 아무 출력도 표시하지 않습니다. 데몬 프로세스만 시작합니다.

Step 3.3: 서비스 실행 여부 확인

서비스를 확인할 때 systemctl status autofs를 사용할 수 없으므로 ps 명령으로 automount 프로세스가 실행 중인지 확인합니다. ps aux 명령은 실행 중인 모든 프로세스를 나열하며, 출력에 파이프 연산자 |를 사용해 grep으로 automount 프로세스만 필터링할 수 있습니다.

ps aux | grep automount

automount 프로세스 자체를 나타내는 줄이 하나 이상 표시되어야 합니다. grep automount가 표시된 두 번째 줄은 방금 실행한 grep 명령이므로 무시해도 됩니다.

root      ...  0.0  0.0 ...      ?        Ssl  15:30   0:00 /usr/sbin/automount
labex     ...  0.0  0.0 ...      pts/0    S+   15:31   0:00 grep --color=auto automount

/usr/sbin/automount 프로세스가 보이면 서비스가 실행 중이며 필요에 따른 마운트를 처리할 준비가 되었다는 뜻입니다. 다음 단계에서는 autofs에 동작을 지시하는 맵을 구성합니다.

동적 디렉터리를 위한 간접 자동 마운트 맵 만들기

이 단계에서는 간접 맵을 사용해 첫 번째 자동 마운트 규칙을 구성합니다. 간접 맵은 가장 일반적인 자동 마운트 구성 유형입니다. /home 또는 /net과 같은 하나의 기본 디렉터리를 맵 파일과 연결합니다. 사용자가 기본 디렉터리 아래의 하위 디렉터리에 액세스하면 autofs가 맵 파일에서 해당 하위 디렉터리 이름을 찾고, 연결된 원격 공유를 필요에 따라 마운트합니다.

이 방식은 사용자 홈 디렉터리나 여러 공유 프로젝트 폴더를 한 번에 모두 마운트하지 않고 사용할 때 매우 유용합니다. 여기서는 /project_shares라는 새 기본 디렉터리 아래에 있는 프로젝트 디렉터리를 동적으로 마운트하도록 간접 맵을 구성합니다.

Step 4.1: NFS 서버 내보내기 만들기

먼저 시뮬레이션한 NFS 서버에서 공유할 디렉터리를 준비합니다. /srv/nfs/ 안에 designtesting이라는 두 프로젝트 디렉터리를 만듭니다.

디렉터리를 만들고 각각에 샘플 파일을 배치합니다.

sudo mkdir -p /srv/nfs/{design,testing}
sudo sh -c 'echo "Design documents" > /srv/nfs/design/README'
sudo sh -c 'echo "Testing scripts" > /srv/nfs/testing/README'

그런 다음 NFS 서버에 이 디렉터리를 내보내도록 알려야 합니다. /etc/exports 파일에 항목을 추가합니다.

nano로 파일을 엽니다.

sudo nano /etc/exports

파일에 다음 줄을 추가합니다. 이 줄은 모든 클라이언트(*)에 designtesting 디렉터리를 읽기-쓰기(rw) 권한으로 공유하도록 NFS 서버에 지시합니다.

/srv/nfs/design *(rw,sync,no_root_squash)
/srv/nfs/testing *(rw,sync,no_root_squash)

파일을 저장하고 종료합니다(Ctrl+X, Y, Enter).

마지막으로 모든 디렉터리를 다시 내보내 NFS 서버에 변경 사항을 적용합니다.

sudo exportfs -ra

Step 4.2: 마스터 맵 항목 만들기

autofs 구성은 마스터 맵 파일 /etc/auto.master에서 시작합니다. 일반적으로 이 파일을 직접 편집하지 않고 /etc/auto.master.d/ 디렉터리에 새 구성 파일을 추가하는 것이 좋습니다.

프로젝트 공유용 새 마스터 맵 파일을 만듭니다.

sudo nano /etc/auto.master.d/shares.autofs

이 파일에 다음 한 줄을 추가합니다.

/project_shares /etc/auto.shares

이 줄은 autofs에 다음과 같이 지시합니다. /project_shares 디렉터리 아래에 액세스가 발생하면 /etc/auto.shares에 있는 맵 파일을 확인해 처리 방법을 찾습니다.

편집기를 저장하고 종료합니다.

Step 4.3: 간접 맵 파일 만들기

이제 마스터 맵에서 참조한 간접 맵 파일 /etc/auto.shares를 만듭니다.

sudo nano /etc/auto.shares

파일에 다음 줄을 추가합니다.

design  -fstype=nfs,rw,sync,vers=3,nolock   localhost:/srv/nfs/design
testing -fstype=nfs,rw,sync,vers=3,nolock   localhost:/srv/nfs/testing

한 줄을 예로 들어 각 항목을 살펴보겠습니다.

  • design: "키"입니다. /project_shares 아래의 하위 디렉터리 이름과 연결됩니다. 사용자가 /project_shares/design에 액세스하면 이 줄이 작동합니다.
  • -fstype=nfs,rw,sync,vers=3,nolock: 마운트 옵션입니다. 파일 시스템 유형, 읽기-쓰기 액세스, 동기식 쓰기, NFS 버전, 이 실습 환경에서 사용하는 로컬 잠금을 지정합니다.
  • localhost:/srv/nfs/design: 마운트할 원격 NFS 공유 위치입니다.

편집기를 저장하고 종료합니다.

Step 4.4: autofs 다시 로드하고 마운트 테스트

새 맵 파일을 autofs 서비스가 인식하도록 구성을 다시 로드해야 합니다. systemctl을 사용할 수 없으므로 automount 프로세스에 HUP(hangup) 신호를 보냅니다. 그러면 프로세스가 구성을 다시 읽습니다.

sudo killall -HUP automount

이제 테스트합니다. 먼저 기본 디렉터리 /project_shares의 내용을 나열합니다. 아직 마운트된 항목이 없으므로 비어 있는 것처럼 표시됩니다.

ls -l /project_shares
total 0

다음으로 하위 디렉터리 중 하나에 액세스합니다. 이 액세스가 autofs가 마운트를 수행하게 만드는 트리거입니다.

ls -l /project_shares/design
total 4
-rw-r--r--. 1 root root 17 Nov 10 16:10 README

성공했습니다. design 공유가 자동으로 마운트되었습니다. 이제 기본 디렉터리를 다시 나열하면 활성 마운트 지점이 된 design 디렉터리가 표시됩니다.

ls -l /project_shares
total 0
dr-xr-xr-x. 2 root root 0 Nov 10 16:12 design

testing 디렉터리에도 같은 작업을 수행해 정상적으로 동작하는지 확인합니다.

ls -l /project_shares/testing
total 4
-rw-r--r--. 1 root root 16 Nov 10 16:10 README

간접 자동 마운트 맵을 성공적으로 구성하고 테스트했습니다.

고정 마운트 지점을 위한 직접 자동 마운트 맵 만들기

이 단계에서는 두 번째 자동 마운트 구성 유형인 직접 맵을 배웁니다. 여러 마운트를 하나의 기본 디렉터리 아래에 그룹화하는 간접 맵과 달리, 직접 맵은 파일 시스템 어디에서나 특정한 개별 마운트 지점을 정의합니다. 직접 맵의 각 항목은 하나의 절대 경로에 대응합니다.

직접 맵은 /usr/local/tools에 공유 도구 디렉터리를 마운트하는 것처럼, 적은 수의 공유를 잘 알려진 고정 위치에 마운트할 때 유용합니다. 여기서는 공유 common_data 디렉터리를 /mnt/common에 마운트하도록 직접 맵을 구성합니다.

Step 5.1: NFS 서버 내보내기 준비

앞에서와 마찬가지로 먼저 시뮬레이션한 NFS 서버에서 공유할 디렉터리를 설정합니다. common_data라는 디렉터리를 만듭니다.

디렉터리와 그 안의 샘플 파일을 만듭니다.

sudo mkdir -p /srv/nfs/common_data
sudo sh -c 'echo "Common shared data" > /srv/nfs/common_data/info.txt'

이제 /etc/exports에 항목을 추가해 이 디렉터리를 NFS로 사용할 수 있게 합니다.

sudo nano /etc/exports

파일에 다음 줄을 새로 추가합니다. /srv/nfs/common_data 디렉터리를 공유하는 설정입니다.

/srv/nfs/common_data *(rw,sync,no_root_squash)

파일을 저장하고 종료합니다(Ctrl+X, Y, Enter).

모든 디렉터리를 다시 내보내 NFS 서버에 변경 사항을 적용합니다.

sudo exportfs -ra

Step 5.2: 직접 맵의 마스터 맵 항목 만들기

직접 맵을 사용하려면 먼저 마스터 맵 구성에서 직접 맵을 참조해야 합니다. 특수 마운트 지점 /-는 연결된 맵 파일이 직접 맵임을 나타냅니다.

직접 마운트용 새 마스터 맵 파일을 만듭니다.

sudo nano /etc/auto.master.d/direct.autofs

이 파일에 다음 한 줄을 추가합니다.

/- /etc/auto.direct

이 줄은 autofs에 다음과 같이 지시합니다. 직접 마운트 목록은 /etc/auto.direct 파일에서 확인하며, 마운트 지점은 해당 파일에 정의된 절대 경로를 사용합니다.

편집기를 저장하고 종료합니다.

Step 5.3: 직접 맵 파일 만들기

이제 방금 참조한 직접 맵 파일 /etc/auto.direct를 만듭니다.

sudo nano /etc/auto.direct

파일에 다음 줄을 추가합니다. 간접 맵과 형식이 약간 다릅니다.

/mnt/common -fstype=nfs,rw,sync,vers=3,nolock   localhost:/srv/nfs/common_data

이 줄을 분석하면 다음과 같습니다.

  • /mnt/common: "키"입니다. 직접 맵에서는 마운트 지점의 전체 절대 경로가 키가 됩니다.
  • -fstype=nfs,rw,sync,vers=3,nolock: 마운트 옵션입니다. 앞에서와 동일하며, NFS 버전과 이 실습 환경에서 사용하는 로컬 잠금을 포함합니다.
  • localhost:/srv/nfs/common_data: 마운트할 원격 NFS 공유 위치입니다.

편집기를 저장하고 종료합니다.

Step 5.4: autofs 다시 로드하고 직접 마운트 테스트

간접 맵에서와 마찬가지로 새 직접 맵을 인식하도록 autofs 구성을 다시 로드해야 합니다.

sudo killall -HUP automount

이제 직접 마운트를 테스트합니다. 간접 맵과 달리 /mnt/common 마운트 지점은 액세스하기 전까지 파일 시스템에 존재하지 않습니다.

/mnt/common 디렉터리에 액세스합니다. 그러면 autofs가 마운트 지점을 만들고 공유를 마운트합니다.

ls -l /mnt/common
total 4
-rw-r--r--. 1 root root 19 Nov 10 17:00 info.txt

성공했습니다. 직접 마운트가 필요할 때 생성되었습니다. 이 실습 환경에서는 NFS 서버와 클라이언트가 같은 시스템이므로 마운트 표시 방식이 달라질 수 있습니다. 따라서 ls -l /mnt/common이 성공하고 위와 같은 출력이 표시되는 것이 가장 신뢰할 수 있는 확인 방법입니다.

이제 동적 하위 디렉터리를 위한 간접 맵과 고정된 절대 마운트 지점을 위한 직접 맵을 모두 성공적으로 구성했습니다.

서로 다른 사용자로 직접 및 간접 자동 마운트 확인

이 단계에서는 여러 사용자가 사용하는 환경에서 자동 마운터가 어떻게 동작하는지 확인합니다. 자동 마운트는 공유를 사용할 수 있게 하지만, 실제로 파일을 읽거나 쓸 수 있는 사용자를 결정하는 것은 NFS 서버의 파일 시스템 권한입니다. 테스트 사용자 두 명을 만들고 각각의 NFS 공유에 소유권을 부여한 다음, 간접 맵과 직접 맵에 대한 액세스를 테스트합니다.

이 실습은 서로 다른 팀(예: design 팀과 testing 팀)이 각각 공유 디렉터리를 소유하고, 다른 사용자는 읽을 수 있지만 소유자만 쓸 수 있는 실제 환경을 보여줍니다.

Step 6.1: 테스트 사용자 만들기 및 권한 설정

먼저 designer1tester1이라는 새 사용자 두 명을 만듭니다. 두 사용자 계정으로 전환할 수 있도록 간단한 비밀번호도 설정합니다.

useradd 명령으로 사용자를 만듭니다. -m 플래그는 사용자의 홈 디렉터리를 생성합니다.

sudo useradd -m designer1
sudo useradd -m tester1

다음으로 각 사용자에게 비밀번호를 설정합니다. 이 실습에서는 간단하게 두 사용자 모두 labex.io를 사용합니다. 이 비밀번호는 길이, 대소문자 혼합, 숫자, 특수 문자를 포함해 복잡성 요구 사항을 충족합니다.

sudo passwd designer1
## Enter new UNIX password: labex.io
## Retype new UNIX password: labex.io
## passwd: password updated successfully

sudo passwd tester1
## Enter new UNIX password: labex.io
## Retype new UNIX password: labex.io
## passwd: password updated successfully

이제 "서버" 측의 공유 디렉터리(/srv/nfs/*) 소유권을 변경해 새 사용자에게 액세스 권한을 부여합니다.

sudo chown -R designer1:designer1 /srv/nfs/design
sudo chown -R tester1:tester1 /srv/nfs/testing

/srv/nfs/common_data 디렉터리는 계속 root가 소유하므로 일반 사용자는 읽기만 할 수 있습니다.

Step 6.2: designer1 사용자로 액세스 테스트

su(substitute user) 명령으로 designer1 사용자 계정으로 전환합니다. -를 사용하면 해당 사용자의 전체 로그인 환경이 적용됩니다.

su - designer1
## Password: labex.io

명령 프롬프트가 [designer1@host ~]$로 변경됩니다.

먼저 간접 맵을 통해 design 공유에 액세스합니다. 정상적으로 성공해야 합니다.

ls -l /project_shares/design
total 4
-rw-r--r--. 1 designer1 designer1 17 Jun 16 16:12 README

이제 이 디렉터리에 파일을 작성합니다. 이 작업도 성공해야 합니다.

echo "My design file" > /project_shares/design/design_file.txt
ls -l /project_shares/design
total 8
-rw-r--r--. 1 designer1 designer1 15 Jun 16 16:18 design_file.txt
-rw-r--r--. 1 designer1 designer1 17 Jun 16 16:12 README

다음으로 testing 공유에 액세스합니다. 내용은 볼 수 있지만 tester1이 소유한 디렉터리이므로 파일을 작성할 수는 없습니다.

ls -l /project_shares/testing
total 4
-rw-r--r--. 1 tester1 tester1 16 Jun 16 16:12 README

마지막으로 직접 맵으로 구성한 공유를 테스트합니다. designer1은 읽을 수 있지만 파일을 작성할 수는 없어야 합니다.

cat /mnt/common/info.txt
Common shared data
echo "test" > /mnt/common/new_file.txt
-bash: /mnt/common/new_file.txt: Permission denied

designer1 세션을 종료하고 labex 사용자로 돌아갑니다.

exit

Step 6.3: tester1 사용자로 액세스 테스트

이제 tester1 사용자로 비슷한 테스트를 수행합니다.

su - tester1
## Password: labex.io

design 공유에 액세스합니다. designer1이 만든 파일을 포함한 내용을 볼 수 있지만 파일을 작성할 수는 없습니다.

ls -l /project_shares/design
total 8
-rw-r--r--. 1 designer1 designer1 15 Jun 16 16:18 design_file.txt
-rw-r--r--. 1 designer1 designer1 17 Jun 16 16:12 README

이제 testing 공유에 액세스하고 파일을 작성합니다. tester1이 이 디렉터리의 소유자이므로 성공해야 합니다.

ls -l /project_shares/testing
total 4
-rw-r--r--. 1 tester1 tester1 16 Jun 16 16:12 README
echo "My test script" > /project_shares/testing/test_script.sh
ls -l /project_shares/testing
total 8
-rw-r--r--. 1 tester1 tester1 16 Jun 16 16:12 README
-rw-r--r--. 1 tester1 tester1 15 Jun 16 16:19 test_script.sh

tester1 세션을 종료합니다.

exit

Step 6.4: 환경 정리

실습을 마치고 시스템을 원래 상태로 복원하려면 만든 테스트 사용자를 삭제합니다. userdel -r 명령은 사용자와 해당 홈 디렉터리를 함께 삭제합니다.

sudo userdel -r designer1
sudo userdel -r tester1

이것으로 autofs를 사용한 NFS 관리 실습을 마칩니다.

요약

이 실습에서는 RHEL 시스템에서 NFS 클라이언트 액세스를 구성하는 방법을 배웠습니다. 먼저 로컬 마운트 지점을 만들고 mount 명령으로 NFS 공유에 연결해 수동 마운트를 수행했습니다. 그런 다음 /etc/fstab에 항목을 추가해 영구 마운트를 구성하고, 부팅 시 공유가 자동으로 마운트되도록 했습니다.

또한 autofs 서비스를 사용한 필요에 따른 마운트 구성도 다뤘습니다. 서비스를 설치하고 활성화한 뒤, 두 가지 방법으로 공유 마운트 방식을 정의했습니다. 간접 맵으로 디렉터리를 동적으로 마운트하고, 직접 맵으로 사전에 정해진 고정 위치에 공유를 마운트했습니다. 마지막으로 여러 사용자에게 직접 및 간접 자동 마운트가 올바르게 동작하는지 확인했습니다.