웹사이트 검색

Rocky Linux 8에서 NFS 마운트를 설정하는 방법


이 페이지에서

  1. 전제 조건
  2. 1단계 - 호스트 및 클라이언트에 NFS 설치\n
  3. 2단계 - 호스트에 공유 디렉토리 생성\n
    1. 범용 마운트 작업
    2. 홈 디렉토리 작업\n

    1. 범용 공유 테스트
    2. 홈 디렉토리 공유 테스트\n

    네트워크 파일 시스템 또는 NFS는 원격 호스트가 네트워크를 통해 파일 시스템을 마운트하고 로컬로 마운트된 것처럼 파일 작업을 수행할 수 있도록 하는 분산 파일 시스템 프로토콜입니다. 이는 여러 클라이언트를 통해 한 서버의 리소스를 공유하거나 여러 클라이언트가 단일 스토리지 공간에 쓸 수 있도록 허용하려는 경우에 특히 유용합니다.

    이 튜토리얼에서는 Rocky Linux 8을 기반으로 NFS 서버 및 NFS 클라이언트를 설치하고 구성하는 방법을 배웁니다. 이를 위해 호스트 또는 서버를 설정하여 파일을 공유하고 클라이언트가 NFS 마운트를 사용하여 호스트 파일에 액세스하도록 설정합니다. .

    전제 조건

    • 2대의 Rocky Linux 8 서버. 이들 각각은 sudo 권한을 가진 루트가 아닌 사용자를 가져야 합니다.\n
    • 호스트와 클라이언트 모두 고정 IP 주소를 가져야 합니다. 개인 네트워크를 통해 둘 다 설정할 수도 있습니다. 자습서에서는 host_ip를 사용하여 호스트 IP 주소를 나타내고 client_ip를 사용하여 클라이언트 IP 주소를 나타냅니다.\n

    1단계 - 호스트 및 클라이언트에 NFS 설치

    주최자

    NFS 패키지를 설치하려면 nfs-utils 패키지를 설치해야 합니다. NFS 서버 및 관련 도구에 대한 데몬을 제공합니다.

    패키지를 설치합니다.

    $ sudo dnf install nfs-utils
    

    nfs-server 서비스를 활성화하고 시작합니다. nfsd, nfs-idmapd, rpcbind, rpc.mountd, lockd, rpc.statd, rpc.quotadrpc.idmapd가 함께 자동으로 시작됩니다.

    $ sudo systemctl enable nfs-server --now
    

    NFS 설치 버전을 확인하십시오.

    $ sudo cat /proc/fs/nfsd/versions
    -2 +3 +4 +4.1 +4.2
    

    NFS 버전 3 및 4는 기본적으로 활성화되어 있고 버전 2는 비활성화되어 있습니다. NFSv2는 꽤 오래되고 구식이므로 그 앞에 -ve 기호가 있는 것을 볼 수 있습니다.

    NFS는 구성을 /etc/nfsmount.conf/etc/nfs.conf 파일에 저장합니다. /etc/nfsmount.conf는 NFS 마운트를 구성하는 반면 /etc/nfs.conf는 NFS 데몬 및 관련 도구를 구성합니다. 기본 설정은 튜토리얼에 충분하며 변경할 필요가 없습니다.

    고객

    클라이언트에서 nfs-utilsnfs4-acl-tools 패키지를 설치합니다.

    $ sudo dnf install nfs-utils nfs4-acl-tools
    

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

    구성 설정이 다른 두 가지 예를 사용합니다. 하나는 범용 마운트이고 다른 하나는 호스트 홈 디렉토리를 공유합니다.

    NFS 마운트 디렉토리는 클라이언트의 일부가 아닙니다. 따라서 NFS는 수퍼유저 권한이 필요한 작업을 수행할 수 없습니다. 이는 클라이언트가 소유권을 변경하거나 루트 사용자로 기록하거나 높은 수준의 작업을 수행할 수 없음을 의미합니다. 그러나 클라이언트의 신뢰할 수 있는 사용자가 호스트에 대한 수퍼유저 액세스 없이 이러한 작업을 수행해야 하는 경우가 있습니다. 이를 허용하도록 NFS 서버를 구성할 수 있지만 클라이언트가 호스트에 액세스할 수 있는 위험이 있습니다.

    범용 마운트 작업

    첫 번째 경우에는 클라이언트가 수퍼유저 권한이 필요한 작업을 수행할 수 없음을 의미하는 기본 NFS 동작을 사용하는 간단한 마운트를 생성합니다.

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

    host:$ sudo mkdir /var/nfs/share -p
    

    호스트 루트 사용자는 sudo를 사용하여 이 디렉토리를 생성했기 때문에 이 디렉토리를 소유하게 됩니다.

    host:$ ls -l /var/nfs
    total 0
    drwxr-xr-x. 2 root root 6 Dec 13 07:30 share
    

    NFS는 보안상의 이유로 클라이언트 측의 모든 루트 작업을 nobody:nobody 자격 증명으로 변환합니다. 따라서 호스트 측에서 일치시켜야 합니다.

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

    홈 디렉토리 작업

    두 번째 경우에는 클라이언트가 사용할 수 있는 호스트의 홈 디렉토리를 만들 것입니다. 이미 존재하므로 만들 필요가 없습니다. 호스트 시스템의 사용자에게 영향을 미치므로 권한을 변경할 필요가 없습니다.

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

    편집을 위해 호스트 컴퓨터에서 /etc/exports 파일을 엽니다.

    host:$ sudo nano /etc/exports
    

    파일에 다음 코드를 붙여넣습니다.

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

    각 디렉터리와 해당 구성은 별도의 줄에 있어야 합니다. client_ip 값을 클라이언트 시스템의 실제 IP 주소로 바꿉니다.

    NFS 내보내기에 대한 모든 옵션을 살펴보겠습니다.

    • rw - 클라이언트 시스템에 NFS 볼륨에 대한 읽기 및 쓰기 액세스 권한을 부여합니다.\n
    • 동기화 - 이 옵션은 NFS가 회신하기 전에 변경 사항을 디스크에 기록하도록 합니다. 이 옵션은 더 안정적인 것으로 간주됩니다. 그러나 파일 작업 속도도 저하됩니다.\n
    • no_subtree_check - 이 옵션은 호스트가 모든 요청에 대한 권한과 함께 파일이 사용 가능한지 확인해야 하는 프로세스인 하위 트리 확인을 방지합니다. 또한 클라이언트에서 파일이 열려 있는 동안 호스트에서 파일 이름이 바뀌는 경우에도 문제가 발생할 수 있습니다. 비활성화하면 NFS의 안정성이 향상됩니다.\n
    • no_root_squash - 기본적으로 NFS는 클라이언트에 있는 루트 사용자의 요청을 호스트에 있는 권한이 없는 사용자로 변환합니다. 이 옵션은 해당 동작을 비활성화하며 클라이언트가 호스트에 액세스할 수 있도록 신중하게 사용해야 합니다.\n

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

    공유를 내보내려면 다음 명령을 실행하십시오.

    host:$ sudo exportfs -arv
    exporting client_ip:/home
    exporting client_ip:/var/nfs/share
    

    • -a - 이 옵션을 사용하면 모든 디렉토리를 내보냅니다.\n
    • -r - 이 옵션은 /var/lib/nfs/etab 디렉토리에 새 목록을 구성하여 모든 디렉토리를 내보냅니다. 이 옵션은 /etc/exports에 대한 변경 사항으로 내보내기 목록을 새로 고치는 데 사용됩니다.\n
    • -v - 상세 출력을 활성화합니다.\n

    내보낸 모든 디렉터리를 나열하려면 다음 명령을 실행합니다. /etc/exports 파일에 지정되지 않은 기본 옵션을 포함하여 모든 옵션이 표시됩니다.

    host:$ sudo exportfs -s
    /var/nfs/share  client_ip(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash)
    /home  client_ip(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,no_root_squash,no_all_squash)
    

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

    Rocky Linux는 Firewalld Firewall을 사용합니다. 방화벽 상태를 확인하십시오.

    host:$ sudo firewall-cmd --state
    running
    

    이것은 성공적으로 실행되고 있음을 나타냅니다.

    방화벽은 다른 영역에서 작동하며 공개 영역은 우리가 사용할 기본 영역입니다. 방화벽에서 활성화된 모든 서비스와 포트를 나열합니다.

    host:$ sudo firewall-cmd --permanent --list-services
    

    다음 출력이 표시되어야 합니다.

    cockpit dhcpv6-client ssh
    

    다음으로 필요한 NFS 서비스인 mountd, nfsrpc-bind에 대한 트래픽을 허용해야 합니다. . 또한 클라이언트 IP에서 액세스를 허용해야 합니다. 클라이언트와 호스트 서버가 동일한 서브넷에 있는 경우 클라이언트 IP 주소를 추가할 필요가 없습니다.

    host:$ sudo firewall-cmd --permanent --add-service=nfs
    host:$ sudo firewall-cmd --permanent --add-service=rpc-bind
    host:$ sudo firewall-cmd --permanent --add-service=mountd
    host:$ sudo firewall-cmd --permanent --add-source=client_IP 
    

    변경 사항을 적용하려면 방화벽을 다시 로드하십시오.

    host:$ sudo firewall-cmd --reload
    

    5단계 - 클라이언트에서 마운트 지점 및 디렉토리 생성

    이제 NFS 서버/호스트가 구성되었으므로 다음 단계는 클라이언트에서 마운트 지점과 디렉토리를 설정하는 것입니다. 클라이언트에서 showmount 명령을 실행하여 호스트에서 내보낸 파일 시스템 목록을 확인할 수 있습니다.

    client:$ showmount -e host_ip
    Export list for host_ip:
    /home          host_ip
    /var/nfs/share host_ip
    

    항상 클라이언트의 마운트 지점으로 새 디렉토리를 생성하거나 기존의 빈 디렉토리를 사용하십시오. 마운트한 디렉토리에 파일이 있으면 숨겨집니다.

    Mount 디렉토리를 생성합니다.

    client:$ sudo mkdir -p /nfs/share
    client:$ sudo mkdir -p /nfs/home
    

    호스트의 IP 주소를 사용하여 공유를 마운트합니다.

    client:$ sudo mount host_ip:/var/nfs/share /nfs/share
    client:$ sudo mount host_ip:/home /nfs/home
    

    마운트가 성공했는지 확인하십시오.

    client:$ df -h
    Filesystem                 Size  Used Avail Use% Mounted on
    devtmpfs                   370M     0  370M   0% /dev
    tmpfs                      405M     0  405M   0% /dev/shm
    tmpfs                      405M   16M  389M   4% /run
    tmpfs                      405M     0  405M   0% /sys/fs/cgroup
    /dev/vda1                   25G  2.4G   23G  10% /
    tmpfs                       81M     0   81M   0% /run/user/1000
    host_ip:/var/nfs/share      25G  2.4G   23G  10% /nfs/share
    host_ip:/home               25G  2.4G   23G  10% /nfs/home
    

    두 공유는 동일한 파일 시스템에서 마운트됩니다. 따라서 동일한 디스크 사용량을 보여줍니다.

    mount 명령을 사용하여 확인할 수도 있습니다.

    client:$ mount | grep nfs
    rpc_pipefs on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw,relatime)
    host_ip:/var/nfs/share on /nfs/share type nfs4 (rw,relatime,vers=4.2,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=client_ip,local_lock=none,addr=host_ip)
    host_ip:/home on /nfs/home type nfs4 (rw,relatime,vers=4.2,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=client_ip,local_lock=none,addr=host_ip)
    

    6단계 - NFS 액세스 테스트

    범용 공유 테스트

    테스트 파일을 /var/nfs/share 공유에 씁니다.

    client:$ sudo touch /nfs/share/test.txt
    

    소유권을 확인하십시오.

    client:$ ls -l /nfs/share/test.txt
    -rw-r--r--. 1 nobody nobody 0 Dec 13 08:08 /nfs/share/test.txt
    

    기본 NFS 설정을 사용하여 이 볼륨을 마운트하고 sudo를 사용하여 클라이언트에 파일을 만들었으므로 파일 소유권은 기본적으로 nobody:nobody입니다. 클라이언트 수퍼유저는 공유에서 관리 작업을 수행할 수 없습니다.

    홈 디렉토리 공유 테스트

    테스트 파일을 /nfs/home 공유에 씁니다.

    client:$ sudo touch /nfs/home/home.txt
    

    소유권을 확인하십시오.

    client:$ ls -l /nfs/home/home.txt
    -rw-r--r--. 1 root root 0 Dec 13 08:09 /nfs/home/home.txt
    

    no_root_squash 옵션을 사용했기 때문에 클라이언트 루트 사용자가 공유 자체에서 루트 역할을 할 수 있었습니다.

    7단계 - 마운트 지점을 영구적으로 만들기

    기본적으로 NFS 공유는 임시이며 부팅 시 마운트해야 합니다. 클라이언트에서 /etc/fstab 파일을 편집하여 영구적으로 만들 수 있습니다.

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

    client:$ sudo nano /etc/fstab
    

    파일 맨 아래에 다음 줄을 붙여넣습니다.

    . . .
    host_ip:/var/nfs/share      /nfs/share     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
    

    다음 명령을 실행하여 위에 나열된 옵션에 대해 자세히 알아볼 수 있습니다.

    client:$ man nfs
    client:$ man mount
    

    온라인에서 읽으려면 Google에서 man nfsman mount라는 문구를 검색하여 이러한 옵션에 대해 자세히 알아볼 수 있습니다.

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

    더 이상 시스템에서 원격 마운트를 원하지 않는 경우 umount 명령을 사용하여 마운트를 해제할 수 있습니다. 이 명령은 일반적인 실수인 마운트 해제가 아니라 umount라고 합니다.

    공유 마운트 밖으로 이동하여 마운트 해제합니다.

    client:$ cd ~
    client:$ sudo umount /nfs/share
    client:$ sudo umount /nfs/home
    

    재부팅 시 공유를 다시 마운트할 필요가 없으면 #/etc/fstab 파일의 해당 항목을 주석 처리해야 합니다. > 그들 앞에서 서명하십시오.

    결론

    이 자습서에서는 NFS 호스트 서버를 생성하고 이를 사용하여 NFS 클라이언트와 공유하는 디렉터리를 마운트하는 방법을 배웠습니다. 사설 네트워크에서 구현하는 경우 문제가 없지만 프로덕션에서 사용하는 경우 프로토콜이 암호화되지 않았으며 데이터를 보호하기 위해 일부 인증을 구현해야 합니다.

    질문이 있으시면 아래 의견에 게시하십시오.