블로그로 돌아가기

Ubuntu 20.04에서 NFS 마운트 설정하기

Ubuntu 20.04에서 NFS 마운트 설정하기

The Network File System (NFS)은 분산 스토리지 솔루션입니다. 로컬 서버에 원격 디렉토리를 마운트하여 로컬 스토리지처럼 사용할 수 있도록 해주는 파일 시스템 프로토콜입니다. NFS를 사용하면 여러 클라이언트가 원격 스토리지를 공유할 수 있습니다. 정기적으로 공유 리소스가 필요한 환경에 적합합니다. NFS는 ONC RPC(Open Network Computing Remote Procedure Call) 시스템을 기반으로 구축되었습니다. 이는 RFC(Request for Comments)에 정의된 개방형 표준입니다. 이를 통해 누구나 프로토콜을 구현할 수 있습니다.

이 가이드에서는 Ubuntu 20.04에서 NFS 마운트를 설정하고 구성하는 단계를 살펴보겠습니다.

사전 요구 사항

NFS의 설명에서 알 수 있듯이, NFS 구성에는 두 가지 부분이 있습니다:

  • 호스트: 물리적으로 데이터를 저장하고 "클라이언트" 시스템과 스토리지를 공유합니다.

  • 클라이언트: "호스트"에 연결하여 원격 스토리지를 로컬 스토리지처럼 사용하는 시스템입니다.

데모를 위해 Ubuntu 20.04로 구성된 두 대의 서버를 사용합니다. 다음은 이에 대한 쉬운 가이드입니다. Ubuntu 서버를 설정하는 방법. 가이드 전반에 걸쳐 이 서버들은 호스트클라이언트로 지칭됩니다. 클라이언트에 대한 작업은 클라이언트가 여러 개인 경우에도 동일합니다.

서버에는 다음과 같은 IP 주소가 할당됩니다. 이 서버들은 CloudSigma에서 호스팅됩니다:

  • 호스트: 31.171.240.79

  • 클라이언트: 31.171.250.109

적절한 IP 주소로 변경해야 합니다.

NFS 설치하기

NFS는 공식 Ubuntu 리포지토리에서 쉽게 사용할 수 있습니다. 호스트클라이언트 시스템용으로 서로 다른 소프트웨어 패키지가 있습니다.

  • 호스트에 NFS 설치하기

호스트에는 머신이 NFS 호스트 역할을 수행할 수 있도록 하는 구성 요소가 필요합니다. 이는 nfs-kernel-server 패키지 형태로 제공됩니다. Ubuntu는 패키지 관리자로 APT를 사용합니다. 먼저 터미널을 실행하고 APT 패키지 데이터베이스를 업데이트합니다:

Server Apt Update

다음으로, nfs-kernel-server 패키지를 설치합니다. 필요한 경우 APT 가 추가 의존성을 자동으로 처리합니다:

Install nfs kernel server

  • 클라이언트에 NFS 설치하기

On the 클라이언트 시스템에서는 네트워크를 통해 호스트 디렉토리에 연결하는 기능이 필요합니다. NFS 서버 기능은 필요하지 않습니다. Ubuntu에서는 이 기능이 nfs-common 패키지에 번들로 제공됩니다. APT 패키지 데이터베이스를 업데이트합니다:

Client apt update

그런 다음, nfs-common 패키지를 설치합니다:

Install nfs common

호스트의 공유 디렉토리

다음으로, 각각 다른 구성을 가진 두 개의 개별 디렉토리를 공유할 것입니다. 수퍼유저 권한과 관련하여 NFS 마운트가 작동하는 두 가지 주요 방식을 보여드리겠습니다. 기본적으로 수퍼유저는 전체 시스템에서 모든 작업을 수행할 수 있는 권한을 가집니다. 그러나 NFS 마운트된 디렉토리는 마운트된 시스템의 일부가 아닙니다. NFS 서버는 수퍼유저 권한이 필요한 모든 작업의 수행을 거부합니다. 이 제한으로 인해 클라이언트는 NFS 마운트에서 쓰기, 소유권 재할당 및 기타 수퍼유저 작업을 수행할 권한이 없게 됩니다.

마운트된 파일 시스템에서 신뢰할 수 있는 특정 사용자가 이러한 작업을 수행하도록 허용할 수 있습니다. 그러나 이는 위험 요소를 수반하는데, 그러한 클라이언트호스트에 대한 전체 권한을 얻을 가능성이 있기 때문입니다. 이는 적절한 사용자 권한 관리를 통해 완화할 수 있습니다. Linux에서 sudoers 파일은 시스템의 모든 사용자 권한을 제어합니다. 자세한 내용은 다음 튜토리얼을 참조하십시오: Linux sudoers 파일 구성 방법.

  • 일반 목적 마운트

첫 번째 예는 기본 NFS 동작을 사용하는 일반 목적의 NFS 마운트입니다. 이 방식에서는 클라이언트가 마운트에서 수퍼유저 작업을 수행하기가 매우 어렵습니다. 이러한 유형의 NFS 마운트는 파일 스토리지, CMS(콘텐츠 관리 시스템)를 사용한 업로드 또는 프로젝트 파일 공유 등에 일반적으로 배포됩니다.

다음 단계는 호스트 시스템에서 수행해야 합니다. 먼저, nfs:

Create nfs general dir

디렉터리가 다음 권한으로 생성되었으므로 sudo 권한이 부여되어 소유자는 다음과 같이 지정됩니다. root:

List nfs general

기본 설정에 따라 NFS는 보안 조치를 위해 클라이언트 측의 모든 root 작업을 nobody:nogroup 권한으로 변환합니다. 일관성을 위해 디렉터리 소유권을 해당 자격 증명과 일치하도록 변경합니다:

Change owner nogroup

  • 홈 디렉터리

두 번째 예는 다음 사용자의 홈 디렉터리를 host 클라이언트가 사용할 수 있도록 설정하는 것입니다. 선택된 클라이언트의 신뢰할 수 있는 관리자가 액세스하여 사용자를 편리하게 관리할 수 있습니다. /home 디렉터리는 기본적으로 존재하므로 디렉터리를 새로 생성할 필요가 없습니다. 디렉터리 권한의 경우, 변경 시 이점보다 더 많은 문제가 발생할 수 있으므로 변경할 필요가 없습니다.

NFS 내보내기(Exports) 구성

공유할 디렉터리가 생성되었습니다. 다음으로, 클라이언트가 이 디렉터리를 사용할 수 있도록 NFS를 구성해야 합니다. NFS는 구성 파일을 사용하여 공유할 디렉터리를 추적합니다. 원하는 텍스트 편집기에서 다음 NFS 구성 파일을 엽니다.

exports file

파일의 주석 섹션에는 구성의 일반적인 구문 구조가 설명되어 있습니다. 간단히 말해, 모든 디렉터리는 다음과 같은 형식으로 선언되어야 합니다.

공유하기로 결정한 두 디렉터리의 경우 구성은 다음과 같습니다. 두 디렉터리 모두 거의 동일한 구성 옵션을 가집니다.

exports file mod

구성 옵션에 대한 간략한 설명은 다음과 같습니다.

  • rw: 클라이언트에 볼륨에 대한 읽기 및 쓰기 권한이 모두 부여됩니다.

  • sync: 응답하기 전에 NFS가 변경 사항을 디스크에 강제로 기록하도록 합니다. 더 안정적이고 일관된 경험을 제공합니다. 응답은 원격 볼륨의 실제 상태를 반영합니다. 그러나 파일 작업 속도는 느려집니다.

  • no_subtree_check: 하위 트리 검사(subtree checking)를 방지합니다. 비활성화하지 않으면 호스트는 클라이언트의 모든 단일 요청에 대해 내보낸 트리에서 파일의 존재 여부를 강제로 확인해야 합니다. 이로 인해 클라이언트가 파일을 사용하는 동안 파일 이름이 변경되는 등 많은 문제가 발생할 수 있습니다. 대부분의 경우 하위 트리 검사를 비활성화하는 것이 좋습니다.

  • no_root_squash: 앞서 언급했듯이 NFS는 원격 root 사용자의 모든 요청을 권한이 없는 일반 사용자로 변환합니다. 이는 호스트 시스템에 대한 원치 않는 액세스를 방지하기 위한 의도된 보안 기능입니다. 그러나 이 옵션을 사용하면 이 동작이 비활성화됩니다.

구성 파일을 저장하고 편집기를 종료합니다. 변경 사항을 적용하려면 NFS 서버를 다시 시작합니다.

Restart nfs kernel server

방화벽 조정

모든 서버에서 적절한 방화벽 구성은 필수입니다. Ubuntu 20.04 서버를 그에 맞게 구성했다고 가정하면, UFW 방화벽이 활성화되어 있어야 합니다. 이는 대부분의 Linux 배포판에 포함되어 있는 간단하면서도 강력한 방화벽입니다. 초보자를 위해, UFW의 개념, 작동 방식 및 예제를 통한 일반적인 UFW 사용법을 설명하는 간단한 가이드가 있습니다..

기본적으로 방화벽은 모든 수신 및 발신 트래픽을 차단합니다. NFS 서버가 제대로 연결되고 트래픽을 교환할 수 있도록 하려면 NFS 프로토콜에 대한 예외를 추가해야 합니다. 먼저 방화벽 상태를 확인합니다. 현재 설정된 모든 규칙도 함께 출력됩니다:

ufw status

보시다시피 시스템에는 SSH 트래픽만 허용됩니다. NFS 트래픽을 허용하려면 예외를 추가해야 합니다.

대부분의 경우, 필요한 트래픽은 허용하면서도 가장 제한적인 규칙을 사용하는 것이 강력히 권장됩니다. 따라서 선택한 클라이언트만 호스트에 연결할 수 있도록 허용합니다:

ufw allow ports

그 후, 방화벽 상태를 다시 확인합니다:

ufw status after change

마운트 포인트 생성

이제 서버가 클라이언트 시스템이 NFS 프로토콜에 연결할 수 있도록 허용할 준비가 되었습니다. 다음으로 클라이언트를 준비해야 합니다. 원격 볼륨에 액세스하려면 클라이언트에 로컬로 마운트해야 합니다. 마운트 포인트의 경우 전용 빈 디렉터리를 사용하는 것이 좋습니다.

두 개의 원격 볼륨에 대해 두 개의 별도 마운트 포인트를 생성합니다:

Create client nfs general directory

Create client nfs home directory

이제 마운트 포인트가 준비되었으므로 원격 볼륨을 마운트해야 합니다:

Mount general directory on client

Mount home directory on client

마운트가 성공했는지 확인할 수 있습니다. 마운트된 모든 볼륨 목록을 확인합니다:

Disk free in client

짜잔! 원격 볼륨이 성공적으로 마운트되었습니다. 다음 명령을 사용하여 공간 사용량을 확인할 수도 있습니다:

Disk usage in client home

NFS 액세스 테스트

지금까지 원격 볼륨이 올바르게 마운트되었습니다. 하지만 클라이언트가 원격 볼륨에서 데이터를 읽고 쓸 수 없다면 아무 소용이 없습니다. 확인을 위해 NFS 마운트에 더미 파일을 생성합니다. 여기서는 루트 관련 구성이 제대로 작동하는지 테스트하기 위해 root 권한으로 파일을 생성하여 루트 전용 구성이 올바르게 작동하는지 테스트합니다:

Create file in nfs

다음으로 파일의 소유권을 확인합니다:

Check ownership of file created

보시다시피, NFS는 파일 소유자를 다음으로 변환하고 있습니다: nobody:nogroup. /var/nfs/ general 디렉터리의 소유권이 nobody:nogroup으로 되어 있기 때문에 NFS가 파일 소유권을 변환하는 것입니다. 이제 다른 NFS 마운트를 테스트할 차례입니다:

Create home file

파일의 존재 여부와 소유권을 확인합니다:

Check ownership of home file

이 경우 NFS는 파일의 소유권을 변환하지 않았습니다. 이 클라이언트는 관리 작업을 수행할 수 있도록 구성되었습니다. 또한 원래 host 디렉터리인 /home의 소유권이 다음으로 설정되어 있지 않습니다: nobody:nogroup.

추가 팁

  • 부팅 시 마운트

지금까지는 로컬 디렉터리에 NFS 볼륨을 수동으로 마운트해야 했습니다. 마운트를 해제하지 않으면 NFS 마운트는 시스템이 재부팅될 때까지 유지됩니다. NFS 볼륨을 정기적으로 사용하는 경우 수동 마운트는 매우 번거로운 작업이 됩니다. 여러 개의 NFS 마운트가 있는 경우 이를 하나씩 수동으로 마운트하는 것은 비현실적입니다.

Using the /etc/fstab 파일을 사용하면 이 프로세스를 자동화할 수 있습니다. 부팅 중에 이 스크립트는 대상 마운트 포인트에 NFS 볼륨을 자동으로 마운트합니다. 텍스트 편집기에서 파일을 엽니다:

fstab file

호스트 시스템의 원격 볼륨을 마운트하려면 다음 줄을 추가합니다:

fstab file after change

스크립트를 저장하고 텍스트 편집기를 닫습니다. 다음 부팅 시 Linux가 원격 볼륨을 자동으로 마운트합니다. 시스템이 볼륨에 연결하고 마운트하는 동안 부팅하는 데 시간이 다소 걸릴 수 있습니다.

  • NFS 볼륨 마운트 해제

원격 볼륨이 더 이상 필요하지 않은 경우, 볼륨을 마운트 해제하면 클라이언트 시스템에서 제거됩니다. 하지만 마운트를 해제하기 전에 어떤 애플리케이션이나 스크립트도 원격 볼륨을 사용하고 있지 않은지 확인하십시오. NFS 마운트 해제는 다른 마운트를 해제하는 것과 유사합니다. 이 경우, /nfs/home/nfs/general:

Unmount nfs

그런 다음, 작업을 확인합니다:

Disks after unmount

마치며

이 가이드에서는 NFS 서버를 생성하고 NFS 원격 공유의 몇 가지 기본 사항을 시연했습니다. 실제 운영 환경에 NFS를 구현하는 데 관심이 있다면, NFS 프로토콜은 암호화되지 않는다는 점을 염두에 두어야 합니다. 이는 예를 들어 중간자 공격(man-in-the-middle attacks)과 같은 보안 문제를 야기할 수 있습니다.

즐거운 컴퓨팅 되세요!

author

Pranay Kapgate

작성자 · CloudSigma

Preslav Dobrev는 CloudSigma의 크리에이티브 디자이너로서, 전통적이고 혁신적인 마케팅 채널을 활용하여 일관된 비즈니스 정체성을 구축하는 데 중점을 두고 있습니다. 그는 영향력 있는 브랜드 내러티브를 창출하기 위해 예술적 비전과 전략적 마케팅을 결합하는 데 능숙합니다.

댓글

아직 댓글이 없습니다. 첫 번째로 작성해 보세요.