[Linux]Part1) 원격 파일시스템을 마운팅하기(NFS)
NFS(Network File System)
, sshfs
그리고 CIFS(Common Internet File System)
는 모두 다른 방식으로 원격 파일 시스템을 마운트하여 로컬 시스템에서 원격 파일에 접근하는 기술입니다. 아래에서 각각의 기술을 비교 설명하겠습니다.
- NFS(Network File System):
- 기술: NFS는 클라이언트와 서버 간의 파일 공유를 위한 프로토콜입니다. 공유 디렉터리를 마운트하여 원격 파일에 접근할 수 있습니다.
- 보안: 기본적으로 암호화되지 않은 통신을 사용하므로, 추가적인 보안 설정이 필요합니다.
- 설정: 서버와 클라이언트 간의 설정 및 마운트 포인트 설정이 필요합니다.
- 운영체제 지원: 다양한 운영체제에서 지원되며 주로 UNIX 및 Linux 시스템에서 사용됩니다.
- SSHFS(SSH File System):
- 기술: SSHFS는 SSH 프로토콜을 기반으로한 파일 시스템 마운트 기술입니다. 로컬 시스템과 원격 호스트 사이의 암호화된 연결을 통해 파일을 전송하고 접근합니다.
- 보안: 데이터 전송이 SSH 암호화를 통해 이루어지므로 보안적으로 안전합니다.
- 설정: SSH 키 기반의 접속을 위해 개인 키와 공개 키가 필요하며, 원격 호스트의 공개 키를 ~/.ssh/known_hosts에 등록해야 합니다.
- 운영체제 지원: 주로 Linux 및 Unix 기반 시스템에서 사용됩니다.
- 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(Network File System): Linux Server – Linux Client
▣ NFS Server 설정
- 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
- 공유 디렉토리 생성 및 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를 명시적으로 설정
- 서비스 시작 및 방화벽 등록
– 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
- 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 설정
- NFS Client 설정을 위한 패키지 설치 및 rpcbind 서비스 시작
[root@rocky9 ~]# yum -y install rpcbind nfs-utils libnfsidmap [root@rocky9 ~]# systemctl enable --now rpcbind.service
- 연결하고자 하는 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
- 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
- 재부팅 시에도 마운팅을 유지하려면 아래 명령줄을 실행합니다.
[root@rocky9 ~]# tail -1 /etc/mstab >> /etc/fstab
▣ NFS 마운팅 테스트
- NFS Client에서 파일 및 디렉토리 생성
[root@rocky9 ~]# cd /mnt/nfs [root@rocky9 nfs]# touch file1.txt [root@rocky9 nfs]# mkdir testdir
- 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