[Linux]Part1) 원격 파일시스템을 마운팅하기(NFS)

NFS(Network File System), sshfs 그리고 CIFS(Common Internet File System)는 모두 다른 방식으로 원격 파일 시스템을 마운트하여 로컬 시스템에서 원격 파일에 접근하는 기술입니다. 아래에서 각각의 기술을 비교 설명하겠습니다.

  1. NFS(Network File System):
    • 기술: NFS는 클라이언트와 서버 간의 파일 공유를 위한 프로토콜입니다. 공유 디렉터리를 마운트하여 원격 파일에 접근할 수 있습니다.
    • 보안: 기본적으로 암호화되지 않은 통신을 사용하므로, 추가적인 보안 설정이 필요합니다.
    • 설정: 서버와 클라이언트 간의 설정 및 마운트 포인트 설정이 필요합니다.
    • 운영체제 지원: 다양한 운영체제에서 지원되며 주로 UNIX 및 Linux 시스템에서 사용됩니다.
  2. SSHFS(SSH File System):
    • 기술: SSHFS는 SSH 프로토콜을 기반으로한 파일 시스템 마운트 기술입니다. 로컬 시스템과 원격 호스트 사이의 암호화된 연결을 통해 파일을 전송하고 접근합니다.
    • 보안: 데이터 전송이 SSH 암호화를 통해 이루어지므로 보안적으로 안전합니다.
    • 설정: SSH 키 기반의 접속을 위해 개인 키와 공개 키가 필요하며, 원격 호스트의 공개 키를 ~/.ssh/known_hosts에 등록해야 합니다.
    • 운영체제 지원: 주로 Linux 및 Unix 기반 시스템에서 사용됩니다.
  3. CIFS(Common Internet File System):
    • 기술: CIFS는 Windows 파일 공유 프로토콜로, 로컬 및 원격 파일 시스템 간의 연결을 위해 사용됩니다.
    • 보안: Windows 기반의 프로토콜이지만, 암호화 옵션을 통해 데이터 보안을 향상시킬 수 있습니다.
    • 설정: 로그인 및 권한 설정 등 Windows 파일 공유에 관련된 설정이 필요합니다.
    • 운영체제 지원: Windows 및 다른 운영체제에서도 사용 가능하지만, 주로 Windows에서 사용됩니다.

이러한 원격 파일 시스템 기술들은 각각의 장단점과 용도에 따라 선택되어야 합니다. 보안, 편의성, 운영체제 지원 등을 고려하여 적합한 기술을 선택하실 수 있습니다. 순서대로 설정 방법 및 사용법에 대해 알아보겠습니다.

1. NFS(Network File System): Linux Server – Linux Client
2. NFS(Network File System): NAS Server – Linux Client
3. SSHFS(SSH File System)
4. CIFS(Common Internet File System): Linux Server – Windows Client
5. CIFS(Common Internet File System): Windows Server – Linux Client

1. NFS(Network File System): Linux Server – Linux Client

nfs

NFS(Network File System): Linux Server – Linux Client


▣ NFS Server 설정

  1. NFS Server 패키지 설치 및 서비스 확인
    – NFS Server 환경 설정을 위해서는 rpcbind, nfs-utils 패키지를 설치해야 합니다.
    – 설치 이후 등록된 서비스를 확인해 봅니다.
    [root@centos8 ~]# yum -y install rpcbind nfs-utils
    [root@centos8 ~]# rpm -ql rpcbind nfs-utils | grep service
    /usr/lib/systemd/system/rpcbind.service
    /usr/lib/systemd/system/auth-rpcgss-module.service
    /usr/lib/systemd/system/nfs-blkmap.service
    /usr/lib/systemd/system/nfs-convert.service
    /usr/lib/systemd/system/nfs-idmapd.service
    /usr/lib/systemd/system/nfs-mountd.service
    /usr/lib/systemd/system/nfs-server.service
    /usr/lib/systemd/system/nfs-utils.service
    /usr/lib/systemd/system/nfsdcld.service
    /usr/lib/systemd/system/rpc-gssd.service
    /usr/lib/systemd/system/rpc-statd-notify.service
    /usr/lib/systemd/system/rpc-statd.service
    
  2. 공유 디렉토리 생성 및 NFS Server 환경설정 파일 구성
    – /shared 디렉토리를 192.168.219.0/24 네트워크 대역이 있는 Client에서 NFS 마운팅 가능 – NFS 마운팅을 위한 다양한 옵션이 있으나, 여기서는 주로 사용하는 옵션을 소개합니다.
    [root@centos8 ~]# hostname -i
    192.168.219.101
    [root@centos8 ~]# mkdir -m 1777 /shared
    [root@centos8 ~]# vi /etc/exports
    /shared 192.168.219.0/24(rw,no_root_squash,sync,no_subtree_check)
    
    [옵션]
    rw: 읽기/쓰기 허용
    ro: 읽기만 허용
    sync: 기본값, client가 쓰기 작업을 하면 바로 반영
    async: client가 쓰기 작업을 하면 바로 반영하지 않음
    root_squash: NFS클라이언트의 root 사용자만 nobody권한으로 매핑, 일반 사용자 권한은 그대로 인정
    no_root_squash: NFS클라이언트의 root계정이 서버에서도 root 권한 사용
    all_squash: NFS클라이언트에서 접근하는 모든 사용자의 권한을 nobody로 매핑
    no_all_squash: NFS클라이언트에서 일반 사용자가 접근 시 서버측 동일 사용자의 이름으로 접속
    no_subtree_check: 하위 디렉토리 검사 금지, 공유 디렉토리는 하위 디렉토리를 가질 수 있음
    anonuid: anonymous의 uid를 명시적으로 설정
    anongid: anonymous의 gid를 명시적으로 설정
    
  3. 서비스 시작 및 방화벽 등록
    – rpcbind.service와 nfs-server.service를 실행시킵니다
    – OS 방화벽을 사용 중이라면 방화벽에 nfs, mountd, rpc-bind 서비스를 등록해 줘야 합니다.
    [root@centos8 ~]# systemctl enable --now rpcbind.service
    [root@centos8 ~]# systemctl enable --now nfs-server.service
    
    [root@centos8 ~]# firewall-cmd --permanent --add-service=nfs --add-service=mountd --add-service=rpc-bind
    success
    [root@centos8 ~]# firewall-cmd --reload
    success
    
  4. NFS서버에서 export된 설정 확인
    – /etc/exports 파일에 변경 사항이 발생하면 `exportfs -ra` 명령을 실행하여 반영합니다.
    [root@centos8 ~]# exportfs -v
    /shared         192.168.219.0/24(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,no_root_squash,no_all_squash)
    

▣ NFS Client 설정

  1. NFS Client 설정을 위한 패키지 설치 및 rpcbind 서비스 시작
    [root@rocky9 ~]# yum -y install rpcbind nfs-utils libnfsidmap
    [root@rocky9 ~]# systemctl enable --now rpcbind.service
    
  2. 연결하고자 하는 NFS Server(192.168.219.101)에서 export한 디렉토리 확인
    [root@rocky9 ~]# showmount -e 192.168.219.101
    Export list for 192.168.219.101:
    /shared 192.168.219.0/24
    
  3. NFS 마운팅를 위한 디렉토리 생성 및 마운팅 실시
    [root@rocky9 ~]# mkdir /mnt/nfs
    [root@rocky9 ~]# mount -t nfs 192.168.219.101:/shared /mnt/nfs
    [root@rocky9 ~]# df -hT
    Filesystem              Type      Size  Used Avail Use% Mounted on
    devtmpfs                devtmpfs  4.0M     0  4.0M   0% /dev
    tmpfs                   tmpfs     890M     0  890M   0% /dev/shm
    tmpfs                   tmpfs     356M  9.8M  346M   3% /run
    /dev/mapper/rl-root     xfs        27G  4.5G   23G  17% /
    /dev/sda1               xfs      1014M  292M  723M  29% /boot
    tmpfs                   tmpfs     178M  120K  178M   1% /run/user/1000
    /dev/sr0                iso9660   8.9G  8.9G     0 100% /mnt/cdrom
    192.168.219.101:/shared nfs4       26G  5.4G   21G  21% /mnt/nfs
    
  4. 재부팅 시에도 마운팅을 유지하려면 아래 명령줄을 실행합니다.
    [root@rocky9 ~]# tail -1 /etc/mstab >> /etc/fstab
    

▣ NFS 마운팅 테스트

  1. NFS Client에서 파일 및 디렉토리 생성
    [root@rocky9 ~]# cd /mnt/nfs
    [root@rocky9 nfs]# touch file1.txt
    [root@rocky9 nfs]# mkdir testdir
    
  2. NFS Server에서 파일 및 디렉토리 확인
    – NFS Client에서 생성한 파일 및 디렉토리를 확인할 수 있습니다.
    – NFS Client에서 마운팅한 정보는 “/proc/fs/nfsd/clients/” 디렉토리에서 확인할 수 있습니다.
    [root@centos8 ~]# ll /shared
    total 0
    -rw-r--r--. 1 root root 0 Aug 15 04:12 file1.txt
    drwxr-xr-x. 2 root root 6 Aug 15 04:12 testdir
    
    [root@centos8 ~]# tree /proc/fs/nfsd/clients/
    /proc/fs/nfsd/clients/
    └── 3
        ├── ctl
        ├── info
        └── states
    
    1 directory, 3 files
    [root@centos8 ~]# cat /proc/fs/nfsd/clients/3/info
    clientid: 0x6a682fe664da774b
    address: "192.168.219.102:846"
    status: confirmed
    name: "Linux NFSv4.2 rocky9"
    minor version: 2
    Implementation domain: "kernel.org"
    Implementation name: "Linux 5.14.0-284.11.1.el9_2.x86_64 #1 SMP PREEMPT_DYNAMIC Tue May 9 17:09:15 UTC 2023 x86_64"
    Implementation time: [0, 0]
    callback state: UP
    callback address: 192.168.219.102:0
    

You may also like...

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다