Ubuntu 20.04에 NFS 클라이언트 및 서버를 설치하는 방법
이 튜토리얼은 다음 OS 버전에 대해 존재합니다.
- Ubuntu 10.04(Lucid Lynx)
이 페이지에서
- 전제 조건
- 1단계 - 서버 및 클라이언트에 NFS 설치
- 호스트\n
- 클라이언트
- 첫 번째 방법
- 두 번째 방법
네트워크 파일 시스템 또는 짧은 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 마운트를 생성하는 방법과 다른 클라이언트 머신에서 액세스하는 방법을 배운 자습서를 마칩니다. 질문이 있으시면 아래 의견에 문의하십시오.