[Centos 7] NFS (Network File System)

2022. 11. 28. 14:42리눅스(Linux)

NFS (Network File System)

   - 일반적인 네트워크 환경을 이용하여 자신의 File System을 공유하는 서비스

   - 가장 대표적인 NAS 환경을 구축할 수 있는 서비스

   - 역할 : NFS Server(File System 공유) / NFS Client (공유 된 File System을 사용)

   - 공유 된 File System에 접근하기 위해서는 반드시 Portmapper의 도움을 받아야 한다. (rpc-bind 패키지)

 

NAS(Network Area Storage)

   - 네트워크를 이용하여 스토리지를 연결하는 방식, NFS, 일반 스위치

 

SAN(Storage Area Network)

   - 광케이블 연결, SAN 스위치

 

$ NFS 계정 Mapping Option : 실질적인 권한부여 옵션

   - 모든 공유 디렉터리에는 root Mapping 옵션과 그 외 사용자를 위한 Mapping 옵션 2가지가 반드시 설정된다.

   - 옵션을 지정하지 않을 경우 기본값(*)으로 자동설정 (* = default값)

      root_squash(*) : Client에서 root로 접근 시 Server의 nfsnobody 계정으로 Mapping

      no_root_squash : Client에서 root로 접근 시 Server의 root 계정으로 Mapping

      all_squash : Client의 모든 계정 접근 시 Server의 nfsnobody 계정으로 Mapping

      no_all_squash(*) : Client의 모든 계정 접근 시 Server의 동일 계정으로 Mapping(동일계정 x : nfsnobody)

 

   - squash 옵션은 보안이랑 근접한 관계라 사용시 주의

   - no_root_squash : 절대로 사용하면 안되는 옵션

   - // * : 어디서든 접속할 수 있는 명령어, 사용안하는게 좋음

 

$ NFS 설치 및 운용

# yum -y install nfs*
# yum -y install rpc-bind
# firewall-cmd --permanent --add-service=nfs
# firewall-cmd --permanent --add-service=rpc-bind
# firewall-cmd --reload

# vi /etc/exports
 [Share Dir]   [Allow Host/Network][(Option)]
/nfs_server1    192.168.1.150(rw,no_root_squash,sync)
/nfs_server2    192.168.1.0/24(rw,sync,no_wdelay)
/nfs_server3    *(rw,all_squash,anonuid=1005,anongid=1005,sync)
/nfs_server4    192.168.1.150(rw,no_root_squash,sync)

#systemctl start nfs-server
#systemctl start rpcbind
#systemctl enable nfs-server
#systemctl enable rpcbind
#rpcinfo -P 
Service (portmapper) 
   - 활성화된 상태
Service (nlockmgr) 
   - 락이 걸려있는 상태 
   - 파일 시스템을 공유한 상태로 내부로 들어있는 데이터를 동시다발적으로 사용하는 환경이 만들어졌을 때 동시다발적으로 쓰기 작업이 절대로 허용하면 안된다.(무결성이 깨져버리기 때문) EX.데이터 베이스

# exportfs -ra 
   - 서비스를 재시작하지 않아도 변경사항을 해당프로세스에 적용
   - /etc/exports를 편집할 상황이 생겼을때 적용하면 restart해야 하지만 
   누군가가 데이터를 전송 사용 중일 때 데이터 손실을 막기위해 사용
   
# exportfs -v
/nfs_server1    192.168.1.150(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,no_root_squash,no_all_squash)
/nfs_server4    192.168.1.158(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,no_root_squash,no_all_squash)
/nfs_server2    192.168.1.0/24(sync,no_wdelay,hide,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash)
/nfs_server3    *(sync,wdelay,hide,no_subtree_check,anonuid=1005,anongid=1005,sec=sys,rw,secure,root_squash,all_squash)
   - nfs 공유 정보 확인
   - nfs_server1~4까지 모두 공유가 잘 된 상태

 

$ 옵션값 정의 

옵션 설명
sync  동기식 작업, 실시간 스트리밍 형식으로 데이터가 저장

실시간 데이터 작업

다중쓰기작업일 경우엔 쓰기지연이 많이 발생
async  비동기식 작업, 하나의 블록단위가 만들어지고 한 덩어리씩 데이터가 저장되는 형식

캐시메모리에 버퍼 공간을 만들고 버퍼에 저장된 데이터가 단위형태로 실제 nfs서버에 저장되는 작업

다중사용자가 다중쓰기작업이 필요할 경우 사용
wdelay  sync와 세트 (async – no_wdelay)
 hide  다중 클라이언트 일 때 사용(단일 호스트 일때는 no host를 사용한다고 명시), 보통 hide사용
no_subtree  하위트리를 보여주지 않는다.
sec=sys  시스템 자체로 인증을 하겠다.

어떠한 형태로 인증을 할건지 명시(sec= )
rw  읽고쓰는 권한을 주겠다.
secure  1024보다 낮은 port번호의 범위 (default)
 insecure 1024보다 높은 port범위를 명시
anonuid=1005,anongid=1005 접근시 사용자 uid(1005) , gid(1005) 권한 부여 


   - squash옵션은 두개 사용해야한다, (모든 공유 디렉터리 옵션, 그외사용자를 위한 옵션)

   -  /nfs_server3옵션이  가장 이상적인 옵션
      일반사용자를 위한 매핑
      root계정으로 로그인하면 root가 되는게 아니라 nfs_nobody계정으로 접근된다.

      nfs_nobody : 어떠한 권한도 없는 일반 사용자
   - no_root_squash
      client root, server root를 매핑하겠다.
      허가되지 않은 사용자(해커)가 내 root를 만들어서 server의 root에 접근하면 안되기 때문에 사용하면 안되는 옵션

 

$ client 설정

# systemctl start rpcbind
# systemctl enable rpcbind
# rpcinfo -p
# mkdir /nfs_client1
# mkdir /nfs_client2
# mkdir /nfs_client3
# mkdir /nfs_client4

# mount -t nfs 192.168.1.100:/nfs_server1 /nfs_client1
# mount -t nfs 192.168.1.100:/nfs_server2 /nfs_client2
# mount -t nfs 192.168.1.100:/nfs_server3 /nfs_client3
# mount -t nfs 192.168.1.100:/nfs_server4 /nfs_client4
   - 마운트해서 사용
   
#vi /etc/fstab
192.168.1.100:/nfs_server1      /nfs_client1    nfs     defaults,_netdev        0 0
192.168.1.100:/nfs_server2      /nfs_client2    nfs     defaults,_netdev        0 0
192.168.1.100:/nfs_server3      /nfs_client3    nfs     defaults,_netdev        0 0
192.168.1.100:/nfs_server4      /nfs_client4    nfs     defaults,_netdev        0 0
   - 오토마운트 사용가능
   
합계 0
-rw-r--r-- 1 nfsnobody nfsnobody 0  6월 15 13:06 B
   - root 계정으로 접근해도 소유권이 nfsnobody 설정

$ autofs

   - 자동 마운트 데몬의 작동을 제어하는 프로그램

   - 자동 마운트 데몬은 자동으로 파일시스템을 마운트하며 파일시스템이 사용되지 않고 일정 시간이 흐르면 자동으로 언마운트 된다.

   - 네트워크 파일시스템(NFS), CD-ROM 등을 자동 마운트 하는데 사용함

   - auto.master(마스터맵을 정의하고있는 설정 파일명)에서 마운터 포인터를 저장하고 있을 작업 디렉토리를 정의

 

# yum -y install autofs-*

# vi /etc/autofs.conf
8 master_map_name = auto.master 
   - 주석풀기, 마스터맵을 정의하는 파일.
15 timeout = 30 
   - 30초 동안 아무작업 안할 시 연결이 끊김
51 browse_mode = yes  
   - 마스터맵을 사용하기 위해 yes로 설정 

# vi /etc/auto.master
7 /misc  /etc/auto.misc 
8 /nfs    /etc/auto.nfs 
   - 새로 위치 지정, 마운트 연결 정보를 설정한 디렉토리 하위에 저장

# mkdir /nfs
# vi /etc/auto.nfs
nfs_c1          -rw,hard,intr           192.168.1.100:/nfs_server1
nfs_c2          -rw,hard,intr           192.168.1.100:/nfs_server2
nfs_c3          -rw,hard,intr           192.168.1.100:/nfs_server3
nfs_c4          -rw,hard,intr           192.168.1.100:/nfs_server4

# vi /etc/fstab 
   - 중복이 일어나기에 fstab 정보 지우기

# systemctl restart autofs
# systemctl enable autofs

# cd /nfs
# ll
합계 0
dr-xr-xr-x 2 root root 0  6월 15 14:01 nfs_c1
dr-xr-xr-x 2 root root 0  6월 15 14:01 nfs_c2
dr-xr-xr-x 2 root root 0  6월 15 14:01 nfs_c3
dr-xr-xr-x 2 root root 0  6월 15 14:01 nfs_c4

# cat /etc/auto.nfs
nfs_c1          -rw,hard,intr           192.168.1.100:/nfs_server1
nfs_c2          -rw,hard,intr           192.168.1.100:/nfs_server2
nfs_c3          -rw,hard,intr           192.168.1.100:/nfs_server3
nfs_c4          -rw,hard,intr           192.168.1.100:/nfs_server4

# cd /nfs/nfs_c1 
# cd /nfs/nfs_c2      
# cd /nfs/nfs_c3
# cd /nfs/nfs_c4
   - 디렉터리로 들어가야 마운트정보 표시
   - 들어가는 행위가 사용하는것 자체가 됨
   
# df -h
Filesystem                  Size  Used Avail Use% Mounted on
devtmpfs                    470M     0  470M   0% /dev
tmpfs                       487M     0  487M   0% /dev/shm
tmpfs                       487M  8.2M  479M   2% /run
tmpfs                       487M     0  487M   0% /sys/fs/cgroup
/dev/mapper/centos-root      17G  4.7G   13G  28% /
/dev/sda1                  1014M  171M  844M  17% /boot
tmpfs                        98M   12K   98M   1% /run/user/42
tmpfs                        98M     0   98M   0% /run/user/0
192.168.1.100:/nfs_server4  270M   14M  256M   6% /nfs/nfs_c4
192.168.1.100:/nfs_server1  247M   13M  234M   6% /nfs/nfs_c1
192.168.1.100:/nfs_server2  247M   13M  234M   6% /nfs/nfs_c2
192.168.1.100:/nfs_server3  247M   13M  234M   6% /nfs/nfs_c3