웹사이트 검색

Ubuntu 20.04에 NFS 클라이언트 및 서버를 설치하는 방법


이 튜토리얼은 다음 OS 버전에 대해 존재합니다.

  • Ubuntu 10.04(Lucid Lynx)

이 페이지에서

  1. 전제 조건
  2. 1단계 - 서버 및 클라이언트에 NFS 설치
    1. 호스트\n
    2. 클라이언트

    1. 첫 번째 방법
    2. 두 번째 방법

    네트워크 파일 시스템 또는 짧은 NFS는 서버에 원격 디렉토리를 마운트할 수 있는 분산 파일 시스템 프로토콜입니다. NFS를 사용하면 다른 서버 또는 클라이언트에서 파일 및 폴더에 액세스할 수 있습니다. 네트워크를 통해 여러 클라이언트 또는 원격 시스템에서 해당 서버에 쓸 수 있습니다. 이 기술은 여러 시스템에서 리소스를 공유할 수 있는 유연성을 제공합니다.

    이 자습서에서는 NFS 서버를 설정하는 방법과 Ubuntu 20.04를 사용하여 클라이언트에 NFS 공유를 마운트하는 방법을 알아봅니다.

    전제 조건

    • 두 개의 Ubuntu 20.04 시스템. 각 서버에는 sudo 권한과 UFW 방화벽이 설정된 루트가 아닌 사용자가 있어야 합니다.\n
    • 개인 네트워크를 통해 서버와 클라이언트를 모두 설정할 수 있습니다. 이 자습서에서는 host_ip를 사용하여 host_ip 주소를 나타내고 client_ip를 사용하여 클라이언트 IP 주소를 나타냅니다.\n

    1단계 - 서버 및 클라이언트에 NFS 설치

    주최자

    디렉터리를 공유하려면 호스트에 nfs-kernel-server 패키지를 설치해야 합니다.

    $ sudo apt update
    $ sudo apt install nfs-kernel-server
    

    고객

    클라이언트의 경우 클라이언트가 호스트 디렉토리를 마운트할 수 있지만 디렉토리 자체를 호스트할 수 없는 nfs-common 패키지를 설치합니다.

    $ sudo apt update
    $ sudo apt install nfs-common
    

    2단계 - 호스트에 공유 디렉토리 생성

    호스트의 디렉토리에 대한 액세스 권한을 클라이언트에 부여할 수 있는 두 가지 방법이 있습니다. 기본적으로 NFS 서버는 sudo 권한이 필요한 작업을 허용하지 않습니다. 즉, 클라이언트의 수퍼유저는 파일을 루트로 쓰거나 소유권을 재할당하거나 상승된 권한이 필요한 작업을 수행할 수 없습니다.

    그러나 때때로 클라이언트는 높은 권한이 필요하지만 슈퍼유저 액세스는 필요하지 않은 특정 작업을 호스트에서 수행해야 합니다.

    첫 번째 방법

    이것은 디렉토리를 공유하는 기본 방법입니다. 클라이언트의 루트 사용자가 상승된 권한을 사용하여 호스트와 상호 작용하기 어렵게 만듭니다.

    먼저 공유 디렉토리를 생성합니다.

    $ sudo mkdir /var/nfs/general -p
    

    클라이언트에서 루트 작업을 수행하면 NFS는 이를 호스트 시스템의 nobody:nogroup 자격 증명으로 변환합니다. 따라서 공유 디렉터리에 적절한 소유권을 부여해야 합니다.

    $ sudo chown nobody:nogroup /var/nfs/general
    

    두 번째 방법

    여기에서 호스트 홈 디렉토리를 클라이언트와 공유합니다. 이렇게 하면 클라이언트의 루트 사용자가 호스트에 적절하게 액세스할 수 있습니다.

    홈 디렉토리는 호스트 서버에 이미 존재하므로 만들 필요가 없습니다. 호스트 시스템의 사용자에 대해 여러 문제를 생성하므로 이에 대한 권한을 변경할 필요가 없습니다.

    3단계 - 호스트에서 NFS 구성

    공유를 설정하기 위해 NFS를 구성할 때입니다.

    호스트 서버에서 /etc/exports 파일을 엽니다.

    $ sudo nano /etc/exports
    

    공유하는 각 디렉터리에 대해 다음 줄을 각각 하나씩 맨 아래에 추가합니다.

    /var/nfs/general    client_ip(rw,sync,no_subtree_check)
    /home               client_ip(rw,sync,no_root_squash,no_subtree_check)
    

    이 모든 옵션과 그 의미를 살펴보겠습니다.

    • rw: 클라이언트에게 호스트 디렉토리에 대한 읽기 및 쓰기 액세스 권한을 부여합니다.\n
    • 동기화: 이 옵션은 응답하기 전에 NFS가 변경 사항을 기록하도록 합니다. 이는 NFS가 먼저 호스트 디렉토리에 쓰기를 마친 다음 클라이언트에 응답함을 의미합니다. 이렇게 하면 호스트 서버의 실제 상태가 반영되지만 파일 작업 속도가 느려질 수 있습니다.\n
    • no_subtree_check: 이 옵션은 하위 트리 검사를 비활성화합니다. 하위 트리 확인은 각 NFS 요청에 대해 서버가 액세스된 파일이 존재하고 내보낸 트리에 있는지 확인해야 하는 작업입니다. 이 작업은 클라이언트가 액세스하는 파일의 이름이 변경될 때 문제를 일으킵니다. 따라서 대부분의 경우 비활성화 상태로 두는 것이 가장 좋습니다. 약간의 보안 관련 사항이 있지만 안정성을 향상시킬 수 있습니다.\n
    • no_root_squash: 기본적으로 NFS는 클라이언트가 루트로 수행한 모든 작업을 서버의 권한이 없는 사용자로 변환합니다. 이는 보안을 강화하기 위한 목적으로 수행됩니다. 이 옵션은 특정 공유에 대해 해당 동작을 비활성화합니다.\n

    완료되면 Ctrl + X를 누르고 메시지가 표시되면 Y를 입력하여 파일을 닫습니다.

    변경 사항을 적용하려면 NFS 서버를 다시 시작하십시오.

    $ sudo systemctl restart nfs-kernel-server
    

    4단계 - 호스트 방화벽 구성

    NFS의 모범 사례는 어디에서나 액세스를 허용하는 대신 각 클라이언트 IP 주소에 대해 별도로 활성화하는 것입니다.

    NFS는 포트 2049를 사용합니다. 다음 명령으로 NFS에 대한 액세스를 활성화합니다.

    $ sudo ufw allow from client_ip to any port nfs
    

    확인하려면 상태를 확인하세요.

    $ sudo ufw status
    Status: active
    
    To                         Action      From
    --                         ------      ----
    OpenSSH                    ALLOW       Anywhere                 
    2049                       ALLOW       167.100.34.78        
    OpenSSH (v6)               ALLOW       Anywhere (v6)
    

    5단계 - 클라이언트에서 마운트 지점 생성

    이제 호스트가 구성되었으므로 클라이언트를 설정할 차례입니다.

    클라이언트에서 마운트를 위한 두 개의 디렉토리를 생성합니다.

    $ sudo mkdir -p /nfs/general
    $ sudo mkdir -p /nfs/home
    

    이제 호스트 끝에 모든 것을 설정했으므로 호스트 IP 주소를 사용하여 공유를 마운트할 수 있습니다.

    $ sudo mount host_ip:/var/nfs/general /nfs/general
    $ sudo mount host_ip:/home /nfs/home
    

    다음 명령으로 성공적으로 마운트되었는지 확인할 수 있습니다.

    $ df -h
    Filesystem                      Size  Used Avail Use% Mounted on
    udev                            448M     0  448M   0% /dev
    tmpfs                            99M  664K   98M   1% /run
    /dev/vda1                        25G  3.2G   21G  14% /
    tmpfs                           491M     0  491M   0% /dev/shm
    tmpfs                           5.0M     0  5.0M   0% /run/lock
    tmpfs                           491M     0  491M   0% /sys/fs/cgroup
    tmpfs                            99M     0   99M   0% /run/user/1000
    123.175.112.87:/var/nfs/general  25G   18G  6.3G  74% /nfs/general
    123.175.112.87:/home             25G   18G  6.3G  74% /nfs/home
    

    목록 하단에서 탑재된 두 공유를 모두 볼 수 있습니다. 둘 다 동일한 파일 시스템에서 마운트되었으므로 마운트된 디렉토리의 실제 사용량이 아닌 전체 디스크 사용량을 표시합니다.

    각 마운트에서 실제 공간이 얼마나 사용되고 있는지 확인하려면 다음 명령을 사용하십시오.

    $ du -sh /nfs/general
    36K     /nfs/general
    

    6단계 - NFS 공유 테스트

    /var/nfs/general 공유에 테스트 파일을 만듭니다.

    $ sudo touch /nfs/general/general.test
    

    소유권을 확인하십시오.

    $ ls -l /nfs/general/general.test
    -rw-r--r-- 1 nobody nogroup 0 Aug  1 13:31 /nfs/general/general.test
    

    이것은 기본 NFS 옵션을 사용하여 마운트되었으며 클라이언트 시스템에서 루트를 사용하여 파일을 생성했기 때문에 호스트의 소유권이 nobody:nogroup으로 이전되었습니다. 여기서 클라이언트 사용자는 호스트 시스템에서 관리 작업을 수행할 수 없습니다.

    /nfs/home\ 공유에 테스트 파일을 만듭니다.

    $ sudo touch /nfs/home/home.test
    

    소유권을 확인하십시오.

    $ ls -l /nfs/home/home.test
    -rw-r--r-- 1 root root 0 Aug  1 13:32 /nfs/home/home.test
    

    여기에서 클라이언트 시스템의 루트를 사용하여 테스트 파일을 만들었으므로 소유권은 호스트 시스템에 유지되었습니다. 클라이언트 시스템의 루트 사용자를 호스트 시스템의 루트 사용자로 허용하는 no_root_squash 플래그를 사용했기 때문입니다.

    7단계 - 부팅 중 NFS 공유 마운트

    이러한 마운트는 클라이언트 시스템을 부팅하면 유지되지 않습니다. 영구적으로 만들려면 /etc/fstab 파일을 편집해야 합니다.

    편집을 위해 /etc/fstab 파일을 엽니다.

    $ sudo nano /etc/fstab
    

    파일 맨 아래에 다음 줄을 붙여넣습니다. 각 행은 부팅 시 마운트하려는 각 디렉토리에 해당합니다.

    . . .
    host_ip:/var/nfs/general    /nfs/general   nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0
    host_ip:/home               /nfs/home      nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0
    

    이러한 옵션에 대해 알아보려면 nfs의 매뉴얼 페이지를 확인하십시오.

    $ man nfs
    

    Ctrl + X를 누르고 메시지가 표시되면 Y를 입력하여 파일을 저장합니다.

    마운트를 확인하려면 서버를 재부팅하십시오.

    $ sudo reboot
    

    클라이언트-서버에 로그인하고 마운트가 있는지 확인합니다.

    $ df -h
    Filesystem                      Size  Used Avail Use% Mounted on
    udev                            448M     0  448M   0% /dev
    tmpfs                            99M  664K   98M   1% /run
    /dev/vda1                        25G  3.2G   21G  14% /
    tmpfs                           491M     0  491M   0% /dev/shm
    tmpfs                           5.0M     0  5.0M   0% /run/lock
    tmpfs                           491M     0  491M   0% /sys/fs/cgroup
    tmpfs                            99M     0   99M   0% /run/user/1000
    123.175.112.87:/var/nfs/general  25G   18G  6.3G  74% /nfs/general
    123.175.112.87:/home             25G   18G  6.3G  74% /nfs/home
    

    8단계 - NFS 공유 마운트 해제

    NFS 마운트가 필요하지 않으면 다음 명령을 사용하여 마운트 해제할 수 있습니다.

    $ sudo umount /nfs/home
    $ sudo umount /nfs/general
    

    일반적인 실수는 실제 명령인 umount 대신 unmount를 사용하는 것입니다.

    제대로 마운트 해제되었는지 확인하십시오.

    $ df -h
    Filesystem                      Size  Used Avail Use% Mounted on
    udev                            448M     0  448M   0% /dev
    tmpfs                            99M  664K   98M   1% /run
    /dev/vda1                        25G  3.2G   21G  14% /
    tmpfs                           491M     0  491M   0% /dev/shm
    tmpfs                           5.0M     0  5.0M   0% /run/lock
    tmpfs                           491M     0  491M   0% /sys/fs/cgroup
    tmpfs                            99M     0   99M   0% /run/user/1000
    

    또한 부팅 시 다시 마운트되지 않도록 /etc/fstab 파일에서 해당 항목을 삭제해야 합니다. 마운트를 다시 재사용해야 하는 경우 앞에 # 문자를 배치하여 해당 항목의 주석을 간단히 제거할 수도 있습니다.

    결론

    이것으로 호스트 머신에서 NFS 마운트를 생성하는 방법과 다른 클라이언트 머신에서 액세스하는 방법을 배운 자습서를 마칩니다. 질문이 있으시면 아래 의견에 문의하십시오.