CS 지식/리눅스

[Linux] NFS 개념 및 구현과정 정리

쑨토리 2023. 3. 24. 19:59

NFS (Network File System)



네트워크 파일 시스템(Network File System, NFS)은 1984년에 썬 마이크로시스템즈(Oracle 인수)가 개발한 프로토콜이다. TCP/IP  네트워크상에서 다른 컴퓨터의 파일 시스템을 마운트하고 공유하여 상대방의 파일 시스템 일부를 마치 자기 자신의 디렉터리인 것처럼 사용할 수 있게 해준다. NFS는 NIS(사용자 인증 정보등을 가지고 있는 시스템)와 더불어 RPC(Remote Procedure Call) 기반으로 작동되므로, 해당 서비스를 해주는 rpbind 데몬을 먼저 실행시켜야 한다. 

또한 NFS는 사용이 편리한 대신에 보안에 상당히 미약하기 때문에 주의해서 사용해야 한다. (IP를 통한 접근 제어는 가능하나 계정을 통한 접근제어는 안되며, 별도의 자격인증을 하지 않기 때문에 보안에 취약하다.)

 

 





설치 전, key 설정해주기


세션 - SSH - 10.0.0.129 / root / advanced - use private key - ok // web02

mobax에서 키를 가져오기 위해 키 설정을 미리 해주고 가기!



 

 

 


# sestatus // disable뜸

 

- selinux가 disabled임을 확인해줘야함!!

- 만약 sestatus를 했을때 enforcing 이라고 뜨면 꼭 disable로 바꿔주자.

 

- 바꾸는 법은  # vi /etc/selinux/config 입력 후 vi 편집기를 이용해 config 파일을 열어 SELINUX 를 disable 로 변경 해주자.

 vi 편집기 사용법 =  i 눌러서 해당 내용 수정해주고, :wq! 눌러서 저장해주고 나오기!

Selinux  끄는 이유는 서버 초기 세팅을 원활하고 효율적으로 하기 위함이라고 생각하면 된다. 

당신이 리눅스에 자신이 없다면 SELinux를 끄도록 하자.

보안향상에는 도움이 되지만 잘 알지 못한다면 툴들을 이용하는데 애먹을 수 있다.

 

 

#  setenforce 0

 

해당 명령어를 통해 우리는 굳이 reboot을 하지 않아도 변경을 적용해줄 수 있다.

 

 

NFS 관련 주요 RPM패키지 설치하기



# yum install -y nfs-utils

NFS 패키지 설치해주기

 


패키지 설명

 yum install rpbind
 yum install nfs-utils

rpbind 
- RPC 기반 연결을 위해 필요한 패키지로 rpcbind, rpcinfo등을 포함하고 있다.

 

nfs-utils 

-NFS 서버 관련 패키지로 관련 데몬 및 명령어를 포함하고 있다.

 



# mkdir /share && cd $_

-mkdir명령을 이용해서 공유할 디렉토리 생성 + 해당 디렉토리에 파일 생성

&& : 폴더 만들자마자 폴더에 들어가는 명령어

 

 

# echo "Hello" > test.txt

-> "Hello" 라는 문구를 생성된 share에 입력하기

 

# cat /share/test.txt 

내용 확인 가능

 

 

 

 

 

공유 대상이 되는 서버에서 해야할 작업


 

# vi /etc/exports

 

 

 

# vi /etc/exports

- vi에디터로 NFS 서버의 환경 및 접근 제어를 설정. 여기서 특정 디렉터리에 rw 옵션을 지정하는 경우에는 리눅스의 디렉터리 퍼미션에도 rw 권한이 있는지 반드시 확인해야 한다. 

 

/<원하는 공유할 디렉토리> <공유 대상 장치(아이피)>/(옵션1,옵션2) ​

* 옵션1에는 ro(read-only), rw(read-write), sync(write 쓰기 발생시 디스크 동기화) 등이 있음.

* 옵션1에는 no_root_squash가 혹은 더많이 있음.

* 옵션1만 줘도 무방.

 

모든 IP를 접근하게 해주고 싶으면

# /share * (rw,sync)로 입력

IP대역을 접근하게 해주고 싶으면

# /share 10.10.10. *(rw,sync)

ex) /usr/local 192.168.0.1(ro) 192.168.0.2(ro)

/usr/local 192.168.1.0/24(rw)

 

 


/share 10.0.0.0/24(rw,sync)

해당 줄을 추가하여 10.0.0.0~255 에 권한부여 ( rw : read write)

 

 

# cd ~
# chmod 707 /share

공유하려는 디렉토리의 권한을 변경

777 : 모든 사람이 읽고 쓰고 수정가능

707 : 

chmod 707 <디렉토리>

 

 

 

 

chmod의 권한 설정

일반적으로 권한은 rwx 로 이루어져 있고, r은 읽기, w는 쓰기, x는 실행권한. 

이것들을 숫자로 간단하게 표현을 할 수 있고, 각 숫자의 의미는 다음과 같다.

 

1 - 실행 (x)

2 - 쓰기 (w)

4 - 읽기 (r)

 

1, 2, 4 세 가지의 숫자를 가지고 1~7까지의 숫자를 고유하게 만들어 낼 수 있다.

이제 이 숫자를 통해서 권한을 간단하게 설정이 가능한데 숫자로 권한을 설정하는 것을 절대 모드라고 합니다.

권한은 3자리 숫자로 이루어져 있습니다. 그리고 각 자리의 숫자는 개별적인 의미가 있습니다.

세 자리중에 첫번째 자리는 소유자의 권한, 두번째 자리는 소유자가 속한 그룹의 권한, 마지막 자리는 다른 사용자(모든 사용자)에 대한 권한입니다.

 

예를 들어 777 권한이면,

7의 의미는 1 + 2 + 4  = 7 해서 1, 2, 4 권한을 모두 가지고 있습니다. 즉, 실행, 읽기, 쓰기 모두 가능합니다. 따라서 777권한은 소유자도 실행, 읽기, 쓰기를 할 수 있고 소유자가 속한 그룹의 모든 사용자 역시 같은 권한을 갖습니다. 또한 마지막 자리도 7이기 때문에 모든 사용자에 대해서 권한 역시 모든 권한을 가지고 있습니다.

 

또 만약 755 라고 하면,

소유자만 모든 권한을 가지고 있고, 그룹내 사용자와 다른 사용자들은 1 + 4 = 5 해서 쓰기는 불가능한 실행과 읽기의 권한만 가능합니다.

 

707이라고 하면, 

소유자와 사용자는 모든 권한을 가지고 있고, 소유자가 속한 그룹은 권한을 아예가지지 않는 것.

 



# systemctl status nfs-server.service
# systemctl enable --now nfs-server

# systemctl status nfs-server

active 확인해주기!


# exportfs -v 

설정되어있는 기능은 볼 수 있음 (현재 내 nf에 어떤 권한이 주어졌는지 확인하는 법)

 

 

(nfs를 사용하기 위한 3가지의 서비스를 오픈해주기)


# firewall-cmd --permanent --add-service=nfs (# tcp 2049)
# firewall-cmd --permanent --add-service=rpc-bind (# tcp 111)
# firewall-cmd --permanent --add-service=mountd (# udp 111)

# firewall-cmd --reload

 

 


# firewall-cmd --list-all

리스트를 확인해보면 위에서 설정한 방화벽이 들어가있는 것을 볼 수 있다.

 

 

 


[ 클라이언트 (서버를 구축할때도 nfs-utils 설치가 필요) ]



# rpm -qa | grep nfs-utils

- nfs-utils가 설치 되었는지 확인하는 명령어. 아무것도 안뜨면 설치 안된거니 꼭 설치해주기

설치가 되어있으면, 아래 파일이 뜨지만 안뜨면 설치된거 X


# yum install -y nfs-utils

- 설치. nfs서버 뿐만 아니라 접근할 서버도 설치해야함

유틸이 없다면, 첫줄 명령어에 아무것도 나오지 않음


# showmount -e 10.31.0.101

showmount -e [서버 IP]

- NFS 서버에 공유된 디렉토리를 확인하기.

마운트 가능 여부 확인 (이때 예시의 10.0.0.101은 nfs가 들어있는 web2주소 )

 

 

 

# systemctl status nfs-server.service

 


# mkdir my-nfs

 

- nfs 서버를 연결할 (=공유된 nfs서버의 디렉토리를 연결할) 로컬 디렉토리 생성

 


# mount -t nfs 10.31.0.101:/share my-nfs 

- 마운트 해주기

nfs 서버와 클라이언트 디렉터리와 연동.

자동으로 수행을 안해두면, 리붓이 되면 마운드 커맨드가 사라져서 다시 수행해야한다.

 

# mount -t nfs <(nfs호스트)서버 IP>:/<디렉토리> < 마운트할 로컬 디렉토리 주소 >

ex) mount -t nfs 192.168.0.1:/usr/local /localmount

 

 

 

# vi /etc/fstab 

 

일시적으로 등록한 마운트가 자동 등록될 수 있도록 해주는 커맨드

이 과정이 없으면 마운트 등록한 것이 부팅시에 다 날아간다.


10.0.0.101:/share /root/share nfs defaults 0 0

부팅해도 자동 마운트 web02가 nfs서버가 된 것이기 때문에 해당 과정은 클라이언트 서버에서 진행해주는 것임!! 

 

 

 

# df -h 

df 명령을 통해 마운트를 확인! 현재 저장공간에 추가됨

df -h 결과

지금 주소가 10.0.0.133으로 되어있는 이유는 실습을 여러번 진행하다보니 주소가 바뀌어서 그런거니 이해좀...;;

주소는 10.0.0.101로 원래 첫 호스트 주소로 되면 성공!

 



# ls my-nfs

 

my-nfs디렉토리 안을 보면, 앞서 생성한 test.txt 있음


# cat my-nfs/test.txt 

내용도 정상적으로 있음

 

 

무슨 설정이 바뀌면 반드시 restart 해주기!!!!!!!!!!!!

#systemctl restart nfs