나의 IT일지
파일 공유 시스템(NFS, Samba) 본문
서버는 네트워크를 통해 정보나 서비스를 제공하는 컴퓨터 프로그램으로, 이러한 서비스를 제공받는 프로그램을 클라이언트라고 한다. 쉽게 말하면, 서비스를 제공하는 프로그램이 설치되어 있는 운영체제는 서버, 서비스를 제공받는 프로그램이 설치되어 있는 운영체제를 클라이언트라고 한다.
- web: apache, IIS(windows에서만 사용)
- mail : sendmail, postfix, qmail
- name : BIND
- FTP: vsftpd, proftp, wu_ftp
- telnet: telnet
- SSH : ssh
- DB : MySQL, MariaDB
- etc : NFS, SAMBA ....
위의 리스트는 서버 프로그램을 기능별로 구분한 것으로, 해당 프로그램을 개별적으로 운영체제에 다운로드해야 하며, 설치하면 클라이언트에게 해당 기능을 제공할 수 있다.
서버 관련 명령어들 |
yum -y install 프로그램 : 프로그램을 설치하는 명령어 systemctl [ start / stop / restart ] [데몬] : 프로그램을 실행, 정지, 재시작하는 명령어 systemctl [ enable / disable] [데몬] : 운영체제를 부팅할 때, 프로그램 활성화, 비활성화 하는 명령어 setenforce [ 0 / 1 ] : SELinux(linux의 자체적으로 가지고 있는 커널기반 방화벽)을 비활성화 / 활성화하는 명령어 |
파일 시스템 공유 서버 프로그램
NFS
NFS(Network File System)는 네트워크를 통해 파일시스템을 공유하게하는 시스템, 프로그램으로, 클라이언트 PC에서 서버PC의 데이터에 접근할 때 사용하는 서비스이다. 해당 서비스는 클라이언트PC에서 서버PC의 IP주소로 접근해 서버의 디렉토리를 마운트하는 형식으로 사용된다.
NFS 프로그램의 데몬, 환경설정파일
- 환경 설정 파일 : /etc/exports
- 서버파일(데몬) : nfs
프로그램 설치
- yum -y install nfs* : nfs프로그램 관련 모든 프로그램을 설치하는 명령어
환경 설정 파일 생성
NFS는 다른 서버와 달리 환경 설정 파일을 직접 만들어야 한다. 환경설정파일의 내용은 다음과 같은 구조가 된다.
[공유 디렉터리] [클라이언트 IP 주소/도메인]([옵션])
위의 구조는 다른 PC와 공유할 디렉터리, 접근가능한 IP주소 제한, 디렉터리 관련 기능 옵션으로 구성되어 있다.
옵션 |
ro : 읽기만 가능 rw : 읽기, 쓰기 가능 sync : 동기화 secure : 포트를 1024미만으로 설정 root_squash : 해당 디렉토리에 클라이언트의 root권한 제거 no_root_squash : 해당 디렉토리에 클라이언트의 root권한 부여 all_squash : 서버의 사용자와 클라이언트의 모든 사용자들이 불일치 no_all_squash : 서버의 사용자와 클라이언트의 모든 사용자들이 일치 |
예시 |
nfs *(sync,rw) : 읽기, 쓰기, 동기화 기능이 있는 nfs디렉토리의 파일/디렉토리를 모든 IP에게 공유 가능 nfs 192.168.10.*(sync,rw) : 읽기, 쓰기, 동기화 기능이 있는 nfs디렉토리의 파일시스템를 192.168.10인 모든 IP에게 공유 허용 |
방화벽 해제
"NFS"로 파일 시스템 공유하기 위해선 서버 운영체제의 방화벽을 해제할 필요가 있는데, 만약 설정 되어있으면, 방화벽에 NFS 포트가 설정되어 있지 않아서 해당 포트로 서버에 접근이 불가능하게 된다.
- systemctl stop firewalld : 방화벽을 정지시키는 명령어
- setenforce 0 : SELinux(linux의 자체적으로 가지고 있는 커널기반 방화벽)을 비활성화하는 명령어
NFS 프로그램 실행
방화벽을 해제했으면, NFS 서버 프로그램을 실행해야 한다. 이때 NFS는 고정 포트가 없이 RPC 요청에 의해 포트를 결정된다. 그래서 우리는 RPC를 활성화 해야한다. 이때, RPC란 동적으로 서비스와 포트를 연결할때 사용하는 프로그램으로 평상시에는 자동 활성화 되어있다.
- systemctl restart rpcbind : RPC를 재시작하는 명령어
- systemctl restart nfs : nfs 서버 프로그램을 재시작하는 명령어
사용할 디렉토리 생성/ 권한부여
NFS는 클라이언트에서 서버에 있는 디렉토리를 마운트하여 사용한다. 그래서 서버에는 공유를 위한 디렉토리를 생성하고 제 3자에 대한 권한을 부여해야 하며, 클라이언트에서는 공유 디렉토리를 마운트할 디렉토리를 생성해야 한다.
- mkdir [디렉토리] : 디렉토리 생성하는 명령어
- chmod 1777 [디렉토리] : 디렉토리 권한을 "rwxrwxrwt"로 부여하는 명령어
이때, 서버에 디렉토리를 생성할 때, 환경 설정 파일에 작성한 공유디렉토리여야 하며, "exportfs -v"를 통해 NFS로 공유하려는 파일 시스템의 이름과 경로 ,기능과 접근가능 IP를 출력해서 확인 할 수 있다.
클라이언트 마운트
- mount -t nfs [서버IP주소]:[서버공유디렉토리] [클라이언트디렉토리] : nfs타입으로 서버IP에 있는 공유디렉토리를 해당 클라이언트의 디렉토리에 마운트한다는 명령어
예시 |
mount -t nfs 192.168.10.133:/nfs /mnt : 192.168.10.133에 있는 nfs디렉토리를 mnt디렉토리에 마운트 |
이때, IP주소는 "ifconfig"명령어로 확인할 수 있다.
이때 nfs시스템이 RPC에게 어떤 포트를 부여 받는지 알 수 있는데, "rpcinfo -p"를 통해 확인 할 수 있다.
NFS : windows클라이언트에서 Linux서버의 파일시스템 공유
NFS는 파일시스템을 공유할 수 있도록 하는 시스템이며, 위에서 설명한 방식은 같은 운영체제일 때, 사용되는 NFS방식이다. 하지만 NFS는 클라이언트와 서버가 서로 다른 운영체제여도 사용이 가능하다.
windows 운영체제에서 Linux 운영체제의 디렉토리를 공유할 때, Linux는 위의 순서에 맞게 공유 디렉토리와 "NFS"서버 프로그램을 실행 시키면 되며, windows는 "NFS"관련 프로토콜을 설치를 해야 한다.
windows의 NFS 프로토콜과 같은 추가 기능은 "메뉴 → 설정 → 앱 및 기능 → 프로그램 및 기능 → windows 기능 켜기/끄기" 에서 설치 받을 수 있다.
설치가 완료 되었으면, "cmd"를 통해 Linux의 공유 디렉토리를 마운트 할 것이다.
- mount [Linux IP 주소]:[공유 디렉토리] * : 해당 IP주소에 있는 공유 디렉토리를 windows의 마지막 드라이브에 마운트하는 명령어
windows에서 마운트를 하면 마지막 드라이브인 Z드라이브에 마운트 하는것을 확인 할 수 있다.
cmd에서 "dir"로 현 위치 폴더에서 파일시스템을 확인 할 수 있으며, "umount [드라이브]"로 마운트를 해제할 수 있다.
Samba
Samba는 NFS와 같은 네트워크를 통해 파일시스템을 공유하게하는 시스템, 프로그램으로, 클라이언트 PC에서 서버PC의 데이터에 접근할 때 사용하는 서비스이다. 해당 서비스는 클라이언트PC에서 서버PC의 IP주소로 접근한 뒤, 본인 인증하는 형식으로 사용되며, Linux서버의 파일시스템을 windows클라이언트로 공유할 때 주로 사용된다.
Samba 프로그램의 데몬, 환경설정파일
- 환경 설정 파일 : /etc/samba/smb.conf
- 서버파일(데몬) : smb
프로그램 설치
- yum -y install samba* : samba관련 프로그램 설치하는 명령어
환경 설정 내용 수정/추가
Samba 프로그램을 사용하기 위해서는 환경 설정 파일을 수정해야 한다. 이때 주의사항이 있는데, "workgroup"은 공유할 운영체제의 workgroup과 같아야 한다. windows에서 workgroup을 확인하는 방법은 "설정 → 시스템 → 정보 → 시스템 정보"로 확인 할 수 있다.
Linux에서 "security"항목을 볼 수 있는데, windows서버에 접속했을 때, 인증방식을 물어보는 것으로, user(사용자 인증), server(서버 인증), share(무인증)인증방법이 있다. 이때 share는 CentOS 7미만에선 사용가능하다.
이제 환경 설정에 디렉토리를 만들고 해당 디렉토리의 속성을 설정할 것이다.
- [samba] : samba시스템을 사용시 samba라는 디렉토리로 출력
- comment : 공유 디렉토리에 대한 간단한 설명을 설정
- path : 공유디렉토리의 경로
- browseable : 디렉토리 내부 확인 가능 여부
- read only : 읽기, 쓰기 여부
방화벽 해제, 프로그램 재실행
"Samba"로 파일 시스템 공유하기 위해선 서버 운영체제의 방화벽을 해제할 필요가 있는데, 만약 설정 되어있으면, 방화벽에 Samba 포트가 설정되어 있지 않아서 해당 포트로 서버에 접근이 불가능하게 된다.
- systemctl stop firewalld : 방화벽을 정지시키는 명령어
- setenforce 0 : SELinux(linux의 자체적으로 가지고 있는 커널기반 방화벽)을 비활성화하는 명령어
위의 명령어로 방화벽을 정지했으면, Samba프로그램을 실행해야 한다.
- systemctl restart smb : Samba 서버 프로그램 재실행시키는 명령어
디렉토리 생성 및 권한 부여
Samba는 클라이언트가 서버에 접속을 하고 인증이 완료되면, 환경설정내용에 따라 디렉토리를 공유한다. 그래서 서버에는 공유를 위한 디렉토리를 생성하고 제 3자에 대한 권한을 부여해야 한다. 이때, 서버에 디렉토리를 생성할 때, 환경 설정 파일에 작성한 경로가 같은 디렉토리여야 한다.
- mkdir [디렉토리] : 디렉토리 생성하는 명령어
- chmod 1777 [디렉토리] : 디렉토리 권한을 "rwxrwxrwt"로 부여하는 명령어
Samba사용자 생성
samba를 사용하기 위해서는 자격 인증에 필요한 사용자가 필요하다. 따라서 서버에서는 samba용 사용자계정을 만들어야 한다. 이때 사용자계정은 홈디렉터리를 만들지 않는 가상 계정으로 만든다.
- useradd -M -s /bin/bash [계정명] : 홈 디렉터리 없이 /bin/bash를 쉘로 하는 계정을 생성하는 명령어
- smbpasswd -a [계정명] : 삼바용 계정의 비번을 설정하는 명령어
파일 공유 서버 접속
windows쪽에서 Linux로 접속할 때, "찾기"창에 "\\[서버IP주소]"를 작성하고 접속을 하게 되면 다음과 같은 창이 나타난다.
네트워크 자격 증명입력에 Samba사용자를 입력 하면 다음과 같은 결과가 나온다.
Samba : Linux 클라이언트에서 windows 서버의 파일시스템 공유
windows에서 Linux의 공유 디렉토리를 공유할 수 있듯이, Linux에서도 windows의 공유 디렉토리를 마운트해서 공유 할 수 있다. Linux는 위의 순서에 맞게 마운트 디렉토리를 생성하면 되며, windows는 파일에 다른 사용자가 사용할 수 있도록 설정 해야 한다.
먼저 windows에 외부 사용자가 접근하기 위해서는 방화벽을 해제할 필요가 있으며, "네트워크 및 인터넷 설정"에서 방화벽을 해제하면 된다.
windows에서 파일을 다른 사용자가 사용할 수 있도록 설정하는 방법은 "폴더 우클릭 → 속성 → 공유 칸에서 공유 → 공유할 사람 칸에서 everyone선택 → 권한을 읽기,쓰기로 변경 → 공유 → 네트워크 및 공유센터"에 들어간다.
네트워크 및 공유센터에 들어가면, 개인, 게스트 또는 공용, 모든 네트워크로 나눠져 있는데, 개인, 게스트 또는 공용에선 네트워크 검색과 파일 및 프린트 공유를 켜야 하며, 모든 네트워크에선 폴더공유는 키고, 암호로 되는 공유는 꺼야 한다.
이렇게 설정하면, windows로 서버 접속이 가능해 진다. 이제 Linux에서 windows의 공유파일을 마운트하면 된다. 이때, windows(NTFS)와 Linux(XFS)의 파일시스템이 다르기 때문에, 파일이 깨질 수 있다. 그래서 옵션으로 cifs(common internet file system)로 변환하는 것이다.
- mount -t cifs //[windows IP주소]/[폴더명] [마운트 디렉토리] : 해당 IP주소에 있는 공유 폴더를 Linux의 디렉토리에 마운트하는 명령어
예시 |
mount -t cifs //192.168.158.131/winnfs /home/mntdir/nfs -o username=samba1 : samba1 계정으로 192.168.158.131에 있는 winnfs디렉토리를 nfs디렉토리에 마운트 |
'운영체제 > Linux - CentOs' 카테고리의 다른 글
동적 IP 할당 서버(DHCP) (0) | 2023.03.27 |
---|---|
파일 전송 시스템(FTP) (0) | 2023.03.26 |
서버의 이해와 원격 접속 시스템(Telnet,SSH) (0) | 2023.03.19 |
소유권과 허가권 (0) | 2023.03.13 |
사용자 계정 관리 (1) | 2023.03.12 |