SLOW but STEADY
NFS(Network File System) 본문
NFS이란??
- NFS는 Unix & Linux System 간 File System을 공유하는 서비스입니다.
- NFS Server에서 File System을 공유하고 NFS Client에서 공유된 File System을 마운트 합니다.
- *Portmapper가 반드시 동작해야 사용이 가능합니다. (Portmapper가 동작하는지는 rpcbind를 통해 확인 가능합니다. 이 rpcbind 같은 경우 CentOS에서는 기본적으로 동작중입니다.)
- File System을 공유하는 것이기 때문에 파티션을 공유하는 것과 같은 말입니다.
*Portmapper란?
서버와 클라이언트 사이에서 각각의 포트로 매핑해주는 것입니다.
NFS 설치하기
** NFS란 파일 시스템을 공유하는 서비스이므로 Server컴퓨터와 Client컴퓨터 두 대가 필요합니다.
두 컴퓨터에 모두 설치작업을 해줍니다.
yum -y install nfs*
패키지를 설치합니다.
rpm -qa | grep nfs
nfs패키지 5개가 설치되었는지 확인합니다.
systemctl start rpcbind
데몬 프로세스를 시작합니다.
systemctl enable rpcbind
데몬 프로세스를 활성화시킵니다.
firewall-cmd --permanent --add-service=rpc-bind
방화벽에 서비스를 등록합니다.
firewall-cmd --reload
rpcinfo -p
rpcbind서비스가 활성화돼있는지 확인합니다.
* 여기서부터는 Client컴퓨터에서만 해주면 되는 작업입니다.
yum -y install autofs-*
autofs패키지를 설치해줍니다. autofs패키지는 NFS서버와 오토 마운트를 걸어주는 패키지입니다.
즉, Client를 재시동시켜도 NFS서버와 연결이 끊어지지 않게 해주는 것입니다.
rpm -qa | grep autofs
패키지 1개가 설치되었는지 확인합니다.
NFS 구축하기
* Server컴퓨터
실습하기 전에 1GB SCSI HDD 1개를 추가시켜주겠습니다.
추가한 다음, Primary Partition: 200M, 200M, 200M - 3개
Extended Partition: 나머지 용량 - 1개
Logical Partition: 200M, 나머지 용량 - 2개를 생성해 줍니다.
파티션을 만든 다음,
/nfs_server1, /nfs_server2, /nfs_server3, /nfs_server4, /nfs_server5 디렉터리들을 생성해 줍니다.
디렉터리를 만든 다음,
/dev/sdb1 -> /nfs_server1
/dev/sdb2 -> /nfs_server2
/dev/sdb3 -> /nfs_server3
/dev/sdb5 -> /nfs_server4
/dev/sdb6 -> /nfs_server5
와 마운트 시켜줍니다.
vi /etc/fstab파일에서 AutoMount까지 시켜줍니다.
vi /etc/exports
NFS설정 파일입니다.
# [Share Dir] [Allow Host/Network][Option] 형식으로 내용을 씁니다.
/nfs_server1 [Client ip주소](rw, no_root_squash, sync)
/nfs_server2 [Client ip대역폭/Netmask](rw, root_squash, async, no_wdelay)
/nfs_server3 *(rw, all_squash, sync)
/nfs_server4 *(rw,all_squash,anonuid=1005,anongid=1005,sync)
/nfs_server5 [Client ip주소](rw,no_root_squash,sync)
위의 내용을 추가해줍니다.
첫 번째 방식은 ip형식으로 적어준 것이고 두 번째 방식은 대역폭 형식으로 적어준 것이고 세 번째 방식은 전체를 말하는 것입니다. 하지만 ip형식으로 지정해 주는 것이 보안적으로 좋은 형식입니다.
위에서 써준 NFS Option의 종류와 의미입니다. 빨간색 박스로 표시해놓은 것들은 중요한 것들입니다.
systemctl start nfs-server
systemctl enable nfs-server
firewall-cmd --permanent --add-service=nfs
firewall-cmd --reload
rpcinfo -p
사용/서비스 중인 포트 목록을 볼 수 있습니다.
exportfs -v
설정해놓은 NFS설정을 확인할 수 있습니다.
*exportfs -ra
이 명령어는 데몬 프로세스를 재시작해주지 않아도 설정 파일의 변경사항을 실시간으로 적용시키는 명령어입니다.
예를 들어, 클라이언트 측에서 파일을 서버로 전송하고 있는데 데몬 프로세스를 재시작해버리면 서비스가 끊기기 때문에 이 명령어를 사용합니다.
groupadd -g 1005 nfs_froup
nfs_group이라는 그룹을 생성해주겠습니다.
useradd -u 1005 -g nfs_group nfs_user
UID를 1005로 가지고 GID를 nfs_group으로 가지는 nfs_user라는 사용자를 만들겠습니다.
id nfs_user
nfs_user사용자의 정보를 확인합니다.
이렇게 해주면, 서버 구성 작업은 끝이 났습니다.
이제는 클라이언트 측으로 넘어가 보겠습니다.
* Client 컴퓨터
vi /etc/autofs.conf
8번째 줄 #master_map_name = auto.master의 주석을 풀어줍니다.
원래는 /misc라는 디렉터리에 마운트 포인터들이 만들어지는데 이 위치를 바꾸고 싶을 때 auto.master라는 설정 파일을 사용합니다.
저희는 이 파일을 사용할 것이므로 주석을 풀어줍니다.
15번째 줄 timeout=300은 30초 동안 별다른 작업이 일어나지 않을 때는 연결을 끊어놓겠다는 설정입니다.
네트워크적인 소모를 줄이기 위해 설정해 주는 것입니다.
51번째 줄 browse_mode=no를 yes로 바꿔줍니다.
클라이언트 측에서 생기는 마운트 포인터들을 자동으로 탐색해서 연결을 할 거냐 하는 설정입니다.
vi /etc/auto.master
7번째 줄 /misc /etc/auto.misc밑에
/NFS /etc/auto.custom이라고 추가합니다.
저희는 /NFS라는 상위 디렉터리에 마운트 포인터들을 만들 것입니다.
mkdir /NFS
vi /etc/auto.custom
nfs_client1 -rw,hard,intr [Server ip주소]:/nfs_server1
nfs_client2 -rw,hard,intr [Server ip주소]:/nfs_server2
nfs_client3 -rw,hard,intr [Server ip주소]:/nfs_server3
nfs_client4 -rw,hard,intr [Server ip주소]:/nfs_server4
nfs_client5 -rw,hard,intr [Server ip주소]:/nfs_server5
위의 내용을 추가시켜 줍니다.
nfs_client1이라는 디렉터리를 Server에 있는 nfs_server1이라는 디렉터리와
읽고 쓸 수 있는 형태로 연결시키겠다는 뜻입니다.
systemctl start autofs
systemctl enable autofs
ls -l /NFS
자동으로 마운트 포인터들이 생긴 것을 확인 가능합니다.
cd /NFS/nfs_client1
이제 공유 디렉터리에 들어가서 NFS를 사용해 보도록 합시다.
touch A
A라는 파일을 만들어 보겠습니다.
ls -l
A파일이 만들어진 것을 확인 가능합니다.
서버로 넘어가서 확인해 보겠습니다.
* Server 컴퓨터
ls -l /nfs_server1
A파일이 공유된 것을 확인하실 수 있습니다.
이제 다시 클라이언트로 넘어가서 모든 폴더에 파일을 생성해 보도록 하겠습니다.
* Client 컴퓨터
cd /NFS/nfs_client2
touch B
허가 거부 됩니다.
cd /NFS/nfs_client3
touch C
허가 거부됩니다.
cd /NFS/nfs_client4
touch D
허가 거부됩니다.
cd /NFS/nfs_client5
touch E
파일이 생성됩니다.
저희가 설정을 할 때 no_root_squash라는 설정을 넣어준 것들은
파일을 생성할 때 다 허가 거부되었습니다.
Client 측에서 root계정으로 접속해서 쓰기를 하면 Server 측에서는 권한이 nfsnobody가 되기 때문에
허가권과 소유권에 따라 파일이 생성이 되지 않는 것입니다.
그렇다면 해결방법은 이렇습니다.
no_root_squash로 설정해준 서버 측 디렉터리들의 허가권의 other영역을 7로 만들어 주거나
허가권의 group영역을 7로 만들고 소유권의 GID를 그 그룹으로 지정해준 다음
클라이언트 사용자를 그룹에 속하게 하면 됩니다.
첫 번째 방법으로 /nfs_server2의 허가권을 바꿔보도록 하겠습니다.
* Server 컴퓨터
chmod 757 /nfs_server2
* Client 컴퓨터
cd /NFS/nfs_client2
touch B
파일이 잘 생성됩니다.
* Server 컴퓨터
ls -l /nfs_server2
확인하면 B파일이 있는 것 확인 가능하고 소유권이 nfsnobody인 것을 확인하실 수 있습니다.
/nfs_server3의 허가권도 바꿔준 다음, C파일을 생성해보세요!
두 번째 방법도 해보겠습니다.
chown .nfs_group /nfs_server4
chmod 775 /nfs_server4
* Client 컴퓨터
cd /NFS/nfs_client4
touch D
생성이 됩니다.
* Server 컴퓨터
ls -l /nfs_server4
D를 확인해보면 UID = nfs_user GID = nfs_group인 것을 확인하실 수 있습니다.
이런 식으로 E파일도 생성해 봅니다!
* Client 컴퓨터
df -h
마운트 정보를 확인해보면 저절로 연결되어 있는 것을 보실 수 있습니다.
'2020 AWS기반 아키텍처 설계 전문가 양성 과정 > 리눅스' 카테고리의 다른 글
리눅스 - SCP (SSH + CP) (0) | 2020.03.20 |
---|---|
리눅스 원격접속 서비스(2) - SSH (0) | 2020.03.20 |
리눅스 원격접속 서비스(1) - Telnet (0) | 2020.03.06 |
리눅스 grub편집기(복구모드) 접근 계정 제한하기 (0) | 2020.03.04 |
리눅스 파일시스템 적용, 마운트(mount) (0) | 2020.03.04 |