본문으로 바로가기

Day-37 Samba & NFS

category Linux 2017. 1. 31. 18:38

Day-36 이어서 설정하자.


공유 디렉토리 인증 설정

 

Server-A

 

(1) groupadd smbgroup
 지정한 그룹을 명령어 groupadd로 생성
 
(2) mkdir -p /samba/sec_share
 공유로 사용할 디렉토리를 명령어 mkdir로 생성
 
(3) chgrp smbgroup /samba/sec_share/
생성한 디렉토리의 그룹 소유권자를 smbgroup 생성한 그룹으로 변경

 

(4) chmod 770 /samba/sec_share/
권한을 부여하는데, 이렇게 770으로 권한을 변경하게 되면 그룹 사용자들은 이 디렉토리에 대해 모든 권한들 부여받는다.

 

(5) useradd samba-user1

 

(6) passwd samba-user1
          pw : password1!

 

(7) smbpasswd -a samba-user1
          pw : samba
 Samba 서버에 접근 가능한 사용자를 명령어 smbpasswd로 생성하는데, 이 사용자는 시스템의 /etc/passwd에 등록된 사용자여야 한다.
 
 a (add user)옵션을 이용해 사용자의 패스워드를 변경함으로써 smbpasswd 파일에 저장하라는 의미가 된다.
 
 이 패스워드 파일은 Samba 설정 파일의 passdb backend=tdbsam에 의해 DB파일이 /var/lib/samba/private/passdb.tab라는 이름으로 저장되어 있다.
  
(8) pdbedit -L
Samba 사용자 데이터 베이스를 관리 하는 명령어 pdbedit에 옵션 L(list)을 사용하면 앞에서 생성한 사용자의 정보가 ID와 함께 나타난다.

 

(9) usermod -G smbgroup samba-user1
samba-user1 사용자가 디렉토리에 접근할 수 있게 허용하기 위해 명령어 usermod를 이용해 그룹 smbgroup에 추가한다.

 

(10) service smb restart

 

(11) service nmb restart  

 

Client-Linux 접속 테스트


(1) cd /etc/

 

(2) smbclient -L Server-A
 smbclient 명령어를 이용하여 새로 추가한 Security 섹션이 공유 목록에 추가된 것을 확인

 

 

 

(3) smbclient //SERVER-A/Security -U samba-user1
 smbclient 명령어에 -U 옵션을 이용하여 사용자 계정으로 공유 디렉토리 Security에 접속한다.
 passwd는 smbpasswd(samba)로 생성한 패스워드이다.

 

(4) smb: /> mkdir test1
 디렉토리 생성 테스트

 

(5) smb: /> ls
 생성확인

 

(6) smb: /> put passwd
 파일 업로드 테스트(현재 경로 /etc)

 

 

 

Server-A

 

(7) smbstatus Server-A
 Samba 서버에서 smbstatus 명령어를 이용하여 접속한 클라이언트의 IP주소와 접근한 공유 디렉토리 및 시간 등의 정보를 확인할수 있다.

 

 

 

Client-Window 접속 테스트

 

실행창에
\\100.100.100.110\

Security 폴더 열기

id : samba-user1
pw : samba

 

 


사용자 홈 디렉토리 접근 설정

 

Server-A Samba 서버 설정

 

(1) vim /etc/samba/smb.conf

 

[homes]
        comment = Home Directories
        browseable = no             // 해당 옵션은 클라이언트에서 공유 디렉토리를 찾는 경우 기본적으로 공유 목록에 보이지 않게 하기 위한 옵션이다.
        writable = yes
        valid users = %S            // 사용자들의 홈디렉토리에 접근 가능한 사용자를 정의하는데 %S는 Samba서버에 등록된 사용자를 의미한다.
        guest ok = no                 // guest 사용자는 접근할 수 없다.
        create mask = 0770
        directory mask = 0770

 

(2) useradd samba-user2

 

(3) passwd samba-user2
      passwd : password1!
 
(4) smbpasswd -a samba-user2 
     passwd : samba
 
(5) service smb restart


(6) service nmb restart

 

(7) touch /home/samba-user2/file-A

     touch /home/samba-user2/file-B

     

Client-Linux

 

(1) smbclient -L Server-A
         Client-Linux Samba 클라이언트에서 smbclient -L 을 이용하여 Samba 서버의 공유 디렉토리 목록을 확인해도
         homes 섹션은 출력되지 않는다.(browseable = no 옵션 적용)

 

 

 

(2) smbclient //Server-A/samba-user2 -U samba-user2

     pw : samba

 

(3) smb: /> ls

 

(4) smb: /> rm file-B

 

Client-Window

 

실행창

 

\\Server-A\samba-user2

 

id : samba-user2
pw : samba

 

 

 

파일 생성 테스트를 하면 실시간으로 내용이 반영된다.

 

Server-A

 

touch /home/samba-user2/file-B
touch /home/samba-user2/file-C
touch /home/samba-user2/file-D

 

 

 

NFS (Network File System)

 

RPC를 이용하여 리모트 호스트 사용자가 원격지 컴퓨터에 있는 파일을 마치
로컬 파일에 엑세스 하듯이 사용 할 수 있도록 하는 클라이언트/서버형 파일시스템 공유 프로토콜

 

 

 

 

RPC(Remote Procedure Call)
원격 프로시저 절차 호출
네트웍 상의 다른 컴퓨터에 위치하고 있는 프로그래멩 서비스를 요청하는데 사용되는 프로토콜

 

리눅스와 리눅스, 리눅스와 유닉스간에 파일 공유 서브스를 제공하는 프로토콜 이였으나 현재는 이러한 구분없이
NFS 서버에서 설정한 파일 공유 서비스를 리눅스 시스템은 물론 윈도우 시스템에서도 사용할 수 있다.

 

NFS서버 -------------------> NFS클라이언트

 

대형 서비스 환경 구축 시 공유 파일서버를 사용하여 데이터의 일관성을 유지하기 위해 사용

 

NFS서버 설정에서 사용되는 파일

 

/etc/exports
NFS 서버 설정 파일이며, NFS 서버에서 파일 공유를 위해 사용되는 모든 파이로가 디렉토리를 정의하기 위해 사용된다.

 

/etc/fstab
NFS 서버에서 설정한 공유 디렉토리를 NFS 클라이언트에서 사용하기 위해 사용되는 파일이며,
설정 후 부팅하면 자동으로 클라이언트 시스템에 마운트 된다.

 

/etc/sysconfig/nfs
NFS 서버에서 제공하는 NFS 서비스를 위해 사용되는 모든 포트에 대한 정보를 설정하는 파일이다.

 

NFS패키지 설치와 공유 디렉토리 설정

 

Server-A

 

(1) yum install nfs-utils

 

(2) rpm -qa | grep nfs

 

(3) mkdir /var/server_share
 NFS 서버에서 클라이언트에게 공유를 허용할 디렉토리를 server_share라는 이름으로 생성한다.
 
(4) chmod -R 777 /var/server_share
 클라이언트가 이 디렉토리에 접속해서 파일을 읽기 및 쓰기 권한을 사용하도록 권한을 777로 설정한다.
  
(5) vim /etc/exports
 초기에 아무런 설정 내용이 없는 NFS 서버 설정 파일을 명령어 vim으로 열어서 공유 디렉토리 및 옵션을 정의해 설정한다.

 

/var/server_share/ 100.100.100.0/24(rw,sync,no_root_squash,no_all_squash)

 

- /var/server_share : 클라이언트에게 공유를 허용할 디렉토리 이름을 의미한다.

 

- 100.100.100.0/24 : 공유된 디렉토리에 접근 가능한 클라이언트 IP 범위이며 여기엔 *.google.com처럼 도메인 설정도 가능하다.

- rw : 공유 디렉토리에 대한 읽기 및 쓰기 권한을 허용하는 옵션이다.

 

- sync : 파일 시스템 변경 시 즉시 이 변경 사항을 동기화하라는 의미이다.

 

- no_root_squash : 클라이언트에서 사용자 root로 공유 디렉토리에 접근 시 NFS 서버 시스템에서도 사용자 root로 인식하고

                              권한을 부여함을 의미한다.
                              보안을 고려한다면 root_squash로 설정을 권장하는데, 이 경우 클라이언트의 사용자 root는

   서버에서 nfsnobody로 매핑되어 인식하게 된다.

 

- no_all_squash : 각 사용자의 권한을 공유 디렉토리에서도 허용함을 의미 

 

(6) exportfs -r
 /etc/exports 파일에 설정한 공유 디렉토리 목록을 리플래쉬(Re-export)하라는 명령어다.
 
(7) vim /etc/idmapd.conf
 NFS의 ID와 이름을 일치시키기 위해 사용되는데, 클라이언트와 서버들이 함께 사용할 도메인 이름을 정의한다.

[General]

Domain = taehoon.com


exportfs명령어는 nfs서버를 다시 시작하지 않고도 공유목록을 수정할 수 있다.

 

-a : /etc/exports파일을 읽어들인다.

 

-r : /etc/exports파일을 다시 읽어들인다.

 

-u [ip] :/[디렉토리]
입력한 디렉토리를 공유목록에서 제외한다.

 

-v : 현재의 공유목록을 확인한다.


NFS 서버 시작

 

(1) service iptables stop

 

(2) chkconfig nfs on

 

(3) chkconfig rpcbind on


(4) service rpcbind start
     service nfs start
동적으로 서비스와 포트를 연결할 때 사용하는 RPC 서비스를 관리하기 위한 rpcbind 서비스와 nfs-server 서비스를 활성화 시킨다.
 
(5) lsof -i tcp:111
rpcbind 서비스가 사용하고 있는 포트 111번이 열려 있는지 명령어 lsof를 통해 확인한다.
 
(6) ps -ef | grep rpc
 

(7) exportfs -v

 

 


(8) rpcinfo -p
 rpcinfo 명령어는 rpc프로토콜을 사용하는 서비스를 출력한다.
 호스트를 지정 하지 않을 경우 로컬 호스트가 기본값이 된다.

 

RPC는 일부 서비스의 포트를 동적(유동)으로 사용하여 NFS서비스 사용 시 포트를 확인 할 필요가 있다.

 

rpc.portmapper (111)
rpc를 사용하는 프로글매을 지정된 포트에 맵핑시킨다. 즉, 클라이언트에 서버의 서비스 포트 번호를 전달하여 RPC 통신이 이루어지게 된다.

 

rpc.mountd (유동)
NFS 클라이언트가 마운트를 요청하면 /etc/exports 파일에서 설정된 내용에 따라 마운트 요청을 처리한다.

 

rpc.rquotad (유동)
NFS 파일 시스템을 마운트한 로컬 사용자에 대해 quota를 처리한다.

 

rpc.nfsd(2094)
rpc.mountd 데몬에 의해 마운트가 이루어지면 마운트된 공유 디렉토리에 읽고 쓰는 등의 작업을 수행하게 해준다,

 

rpc.lockd(유동)
파일 잠금을 통해 여러 사용자가 동시에 한 파일을 수정하는 것을 방지한다.

 

rpc.statd (유동)
rpc.lockd와 함께 작동하면서 NFS서버가 비정상적으로 종료되었거나 리부팅 했을 경우 복구하는 역활을 한다.


(9) vim /etc/sysconfig/nfs
 STATD_PORT=4000
 LOCKD_TCPPORT=4001
 LOCKD_UDPPORT=4001
 MOUNTD-PORT=4002
 RQUOTAD_PROT=4003

 

방화벽 정책 등록

 

iptables -A INPUT -s 100.100.100.0/24 -m state --state NEW -p udp --dport 111 -j ACCEPT
iptables -A INPUT -s 100.100.100.0/24 -m state --state NEW -p tcp --dport 111 -j ACCEPT
iptables -A INPUT -s 100.100.100.0/24 -m state --state NEW -p tcp --dport 2049 -j ACCEPT
iptables -A INPUT -s 100.100.100.0/24 -m state --state NEW -p tcp --dport 4002 -j ACCEPT

 

rpcbind가 사용하는 포트 111번과 NFS가 사용하는 2049번, mountd가 사용하는 4002번에 대해 방화변에 추가한다.


Client-Linux

 

(1) yum -y install nfs-utils

 

(2) vim /etc/idmapd.conf
Domain = taehoon.com
서버처럼 동일한 도메인을 설정하기 위해 /etc/idmapd.conf파일을 vim으로 열어서 도메인을 지정한다.

 

(3) service rpcbind start
     service nfs start
     서비스 재시작하기
 
(4) mkdir /mnt/client_share
 NFS서버에서 제공하고 있는 공유 디렉토리를 클라이언트에서 마운트하기 위해 한 개의 디렉토리를 생성한다.

 

(5) showmount -e 100.100.100.110
 NFS 서버가 어떤 공유 디렉토리를 제공하고 있는지 알기 위해 명령어 showmount와 옵션 e(export)를 사용하면
 현재 /var/server_share디렉토리가 제공되고 있음을 확인 할 수 있다.

 

(6) mount 100.100.100.110:/var/server_share/ /mnt/client_share/
 명령어 mount에 파일 시스템 타입 (t:type)을 지정하고 서버의 IP주소와 디렉토리
 이름을 지정한 후 이 디렉토리를 클라이언트의 /mnt/client_share에 마운트한다고 지정한다

 

 

 

(7) mount | grep server
 mount와 키워드 server를 명령어 grep으로 추출해보면 여러 옵션과 함께 서버의 디렉토리가 클라이언트의

 디렉토리로 마운트 되어 있음을 확인할 수 있다.

 

 

 

(8) mkdir /mnt/client_share/test
 테스트를 위해 마운트된 디렉토리에 명령어 mkdir을 사용해 test 디렉토리를 생성했다. 이 테스트를 통해 NFS 서버가
 제공하는 디렉토리를 클라이언트 시스템에서 마운트해 성공적으로 사용할 수 있다는 것이 증명되었다

 

(9) ls -l /mnt/client_share

 

(10) umount /mnt/client_share
현재의 마운트된 디렉토리를 해제할 경우 명령어 umount를 사용할 수 있는데,
단 이 디렉토리가 어던 사용자에 의해서든 사용되지 않는 경우여야 한다.

 

Server-A

 

(11) netstat -a | grep nfs
NFS 서버인 Server-A 에서 명령어 netstat를 통해 연결을 확인해보면 서버인
master의 nfs와 클라이언트의 node1의 임의의 포트가 연결이되어 있음을 확인 할 수 있다.

 

 

 

Client-Linux

 

(1) vim /etc/fstab
100.100.100.110:/var/server_share/ /mnt/client_share/ nfs defaults 0 0
파일 시스템 정보가 저장된 파일 /etc/fstab을 명령어 vim으로 열어서 NFS 서버의 IP주소, 공유 디렉토리 이름과 로컬의 디렉토리 이름
파일 시스템 타입(nfs)와 기본 옵션을 지정한다

 

(2) reboot
 업데이트된 파일 시스템 정보가 적용되도록 하기 위해 시스템을 다시 부팅한다

 

(3) mount
 시스템 부팅 이후에 명령어로 mount로 확인해보면 서버의 디렉토리가 자동으로 로컬의
 /mnt/client_share 디렉토리로 마운트되어 있음을 알수 있다.

 

 

 

 

Test

 

Server-A                                                              Client-Linux

 

df -h                                                                       df -h

cd /var/server_share/                                           cd /mnt/client_share/

ls                                                                            ls

touch test1                                                             ls

ls                                                                            touch test2

ls

 

 

 

 

 

'Linux' 카테고리의 다른 글

Day-41 iptables  (0) 2017.02.09
Day-38 PXE & Kickstart (미완)  (0) 2017.02.02
Day-36 FTPS & Samba(미완)  (0) 2017.01.31
Day-35 VSFTP (미완)  (0) 2017.01.30
Day-34 FTP  (0) 2017.01.27