✔️ Samba 란 ?
- 삼바(Samba)는 TCP/IP를 이용해 여러 운영체제 간의 파일과 프린트 및 하드웨어 자원을 공유할 수 있도록 한다.
- 주로 리눅스와 윈도우 서버 간의 자원(파일, 프린트 등)의 공유를 위한 용도로 사용된다.
- 삼바는 SMB(Session Message Block)라는 프로토콜을 이용해 이기종 운영체제 간의 자원을 공유할 수 있도록 한다.
- 삼바는 편리하긴 하지만 보안이 중요한 곳에서는 sftp를 이용해 파일을 전송한다.
- 현재 SMB 프로토콜은 유닉스(리눅스)와 윈도우 환경을 동시에 지원하는 CIFS로 확장되었다.
SMB : MS사와 Intel이 윈도우 시스템이 다른 시스템의 디스크나 프린터와 같은 자원을 공유할 수 있도록 하기위해 개발한 프로토콜
CIFS : Common Internet File System, 네트워크를 위한 SMB 파일 공유 프로토콜의 확장 버전, 윈도우와 리눅스(유닉스) 환경을 동시에 지원하는 인터넷의 표준 파일 규약의 프로토콜
✔️ Samba 서버 구축
Windows의 폴더를 공유하고, 리눅스에서 접근해 사용하기
WinClient [Samba 서버 역할]
외부에서 WinClient의 자원을 사용할 사용자를 추가한다.
WinClient의 자원을 외부에서 사용할 수 있도록 공유한다.
Server [Samba 클라이언트 역할]
Samba 클라이언트 패키지 설치한다.
smbclient 명령어로 Winclient가 제공하는 자원을 확인한다.
smbmount 명령어로 Winclient가 제공하는 공유 폴터를 마운트 한다.
네트워크 구성도
1. Windows의 폴더 공유하기
Windows 파일 탐색기에서 C:\smbShare\ 라는 폴더를 만든다. (폴더 이름 상관 X)
만든 폴더를 마우스 오른쪽 버튼으로 클릭해 [속성] → [공유]를 선택하고 <공유> 버튼을 클릭해 Everyone 사용자를 선택한 후 <추가>를 클릭한다.
그리고 [사용 권한 수준] 설정은 [읽기/쓰기]를 선택하고 <공유>를 클릭한 후 <완료>를 클릭한다.
C:\smbShare\에 적당한 파일 몇개를 복사한다.
2. 리눅스에서 접근 허용하기 (리눅스 사용자 추가 및 비밀번호 지정)
net user root 1234 /add # root 사용자를 만들고 암호를 1234로 지정
PowerShell이나 명령 프롬프트를 관리자 모드로 실행 후 다음 명령을 입력한다.
계정이 생성된 것을 확인할 수 있다.
PowerShell이나 명령 프롬프트에서 ipconfig 명령으로 Windows의 IP 주소를 확인한다.
3. WinClient에서 공유한 폴더를 Server에서 사용하기
[root@localhost ~]# yum -y install samba-client
[root@localhost ~]# rpm -qa | grep samba
samba-libs-4.10.16-18.el7_9.x86_64
samba-client-libs-4.10.16-18.el7_9.x86_64
samba-client-4.10.16-18.el7_9.x86_64
samba-common-4.10.16-18.el7_9.noarch
samba-common-libs-4.10.16-18.el7_9.x86_64
Samba 클라이언트 패키지 설치 및 설치 확인
[root@localhost ~]# smbclient -L 211.216.24.136
Enter SAMBA\root's password:
다음 명령을 입력해 Windows에서 공유한 폴더 및 프린터가 보이는지 확인한다.
[root@localhost ~]# mkdir smbTest
[root@localhost ~]# mount -t cifs //211.216.24.136/smbShare /smbTest/
Password for root@//211.216.24.136/smbShare: ****
다음 명령을 이용해 WinClient에서 공유한 폴더(smbShare)에 마운트 할 디렉토리를 만들고 마운트 시킨다.
만약 이런 오류가 뜬다면
이 글을 참고해서 해결한다.
오류가 없다면 마운트에 성공한 것이다.
이제 /smbTest 디렉토리를 사용한다는 것은 WinClient의 C:\smbShare\라는 폴더를 사용한다는 것과 같은 의미가 된다. /smbTest 디렉토리에 파일을 몇개 복사하고 WinClient의 파일 탐색기에서 확인해도 잘 보일 것이다.
더 이상 마운트 할 필요가 없다면 umount/smbTest 명령으로 마운트를 종료한다.
Windows에서 리눅스에 접근하기
Server [Samba 서버]
▶ 외부와 마운트 할 디렉터리를 생성하고, 디렉터리의 허가권을 변경한다.
▶ 외부에서 Server의 자원을 사용할 사용자를 추가한다.
▶ Server의 자원을 외부에서 사용할 수 있도록 공유한다.
WinClient [Samba 클라이언트]
▶ Samba 서버에서 공유한 디렉터리에 접근한다.
▶ 항상 접근 가능하도록 ‘네트워크 드라이브 연결을 한다.
▶ Smbclient 명령어로 WinClient가 제공하는 자원을 확인한다.
구현할 네트워크 구성도
Samba 서버를 설치하면 리눅스 컴퓨터를 Windows 컴퓨터처럼 사용한다는 의미이다.
즉 리눅스 컴퓨터가 Windows의 네트워크 환경에서 Windows 컴퓨터와 동등하게 보인다.
WinClient에서 설정할 것은 별로 없고 주로 Server 쪽에서만 설정한다. 보안을 위해 허가된 사용자만 접속되도록 한다.
1. Samba 패키지 설치
[root@smb-server ~]# yum -y install samba
[root@smb-server ~]# rpm -qa | grep samba
samba-common-libs-4.10.16-18.el7_9.x86_64
samba-common-4.10.16-18.el7_9.noarch
samba-4.10.16-18.el7_9.x86_64
samba-client-4.10.16-18.el7_9.x86_64
samba-libs-4.10.16-18.el7_9.x86_64
samba-common-tools-4.10.16-18.el7_9.x86_64
samba-client-libs-4.10.16-18.el7_9.x86_64
samba 패키지를 설치하고 정상적으로 설치되었는지 확인한다.
2. 디렉토리를 공유하도록 설정하기
[root@smb-server ~]# mkdir /share # 삼바로 공유할 디렉토리(이름은 상관없음)
[root@smb-server ~]# groupadd sambaGroup # Windows에서 접속을 허용할 그룹 생성
[root@smb-server ~]# chgrp sambaGroup /share # 디렉토리의 소유 그룹 변경
[root@smb-server ~]# chmod 770 /share # 디렉토리 허가권 변경
[root@smb-server ~]# usermod -G sambaGroup centos # centos 사용자를 sambaGroup에 포함
[root@smb-server ~]# smbpasswd -a centos # centos 사용자의 삼바 전용 비밀번호를 지정
New SMB password:
Retype new SMB password:
Added user root.
Samba의 사용이 허가된 그룹을 만든다. sambaGroup으로 만들 것이고 디렉토리는 /share로 할 것이다.
기존의 사용자(centos)를 sambaGroup에 포함시킨다.
Samba의 설정 파일은 /etc/samba/smb.conf이다.
✔️ Samba 서버 설정 파일
[global] : 모든 자원의 공유를 위한 설정
- workgroup : Windows의 작업 그룹 이름
- server string : Windows의 네트워크에 보이는 컴퓨터 설명 이름(생략 가능)
- netbios name : Windows의 네트워크에 참가하는 컴퓨터 이름
- hosta allow : 삼바 서버에 접속을 허용할 컴퓨터의 IP 주소 또는 네트워크 주소 또는 컴퓨터 이름
- log file : 삼바 서버에 접속하는 컴퓨터의 접속 기록 파일
- security : user
[공유 이름] : 공유하는 디렉토리 설정
- comment : 공유하는 디렉토리 설명, 생략 가능
- path : 물리적인 디렉토리
- read only : 디렉토리에 쓰기 권한이 있는지 여부, yes는 읽기 전용, no는 읽기/쓰기 허용
- browseable : 공유 리스트를 보여줄지 여부
- guest ok : 다른 사용자도 사용하게 할지 여부
vi 에디터로 직접 smb.conf 파일을 수정할 경우 문법상 오류가 없는지 체크하는 것이 좋다.
터미널에서 testparm 명령을 실행하면 smb.conf 파일의 오류를 검사한다.
[root@smb-server ~]# vi /etc/samba/smb.conf
[global]
workgroup = WORKGROUP # Windows의 기본 그룹명
unix charset = UTF-8 # 문자 인코딩
map to guest = Bad User # 인증 없이 접속 허용
global 부분을 우측과 같이 변경해준다.
참고로 Windows 작업 그룹명은 PC에 따라 다를 수 있으므로 [제어판] → [시스템] 에서 확인할 수 있다.
[Share]
path = /share # 공유할 폴더명
writable = yes # 쓰기 허용
guest ok = yes # 게스트 허용
create mode = 0777 # 파일 전체 접근 허용
directory mode = 0777 # 폴더 전체 접근 허용
# 만약 보안을 강화하고 싶다면 사용
valid users = 0sambaGroup # sambaGroup 소속 사용자만 허용
또 최하단에 [Share] 내용을 추가해준다.
testparm 명령으로 변경한 내용에 오류가 없는지 확인한다.
[root@smb-server ~]# systemctl start smb nmb
[root@smb-server ~]# systemctl enable smb nmb
Created symlink from /etc/systemd/system/multi-user.target.wants/smb.service to /usr/lib/systemd/system/smb.service.
Created symlink from /etc/systemd/system/multi-user.target.wants/nmb.service to /usr/lib/systemd/system/nmb.service.
Samba 서버를 시작/상시 가동시킨다.
[root@smb-server ~]# firewall-cmd --permanent --add-service=samba
[root@smb-server ~]# firewall-cmd --permanent --add-service=samba-client
[root@smb-server ~]# firewall-cmd --reload
[root@smb-server ~]# systemctl restart smb
Samba 서버에서 방화벽을 허용해야 할 서비스는 'samba'와 'samba-client'가 있다.
samba와 관련된 두가지 서비스를 허용시키고 방화벽과 Samba 서비스를 재시작한다.
3. Samba 서버(=server)에서 공유한 디렉토리('/share')에 접근하기
Windows 파일 탐색기를 실행하고 왼쪽에서 [내 PC]를 선택한 후 마우스 오른쪽 버튼을 눌러 [네트워크 드라이브 연결]을 선택한다. [네트워크 드라이브 연결]이 나오면 적당한 드라이브를 선택한 후 [폴더]에 직접 '\\Samba 서버 IP 주소\share'을 입력하고 그 아래 모두를 체크한 다음 <마침>을 클릭한다.
[Windows 보안] 창에는 앞서 지정한 사용자와 삼바 전용 비밀번호를 입력하고 <확인>을 클릭한다.
Windows 파일 탐색기에서 확인하면 Z:드라이브가 연결되어 있다. 테스트용 파일을 하나 생성한다.
/share 디렉토리를 확인해보면 test용 파일이 복사되어 있는 것을 확인할 수 있다.
현재 Samba 서버에 접속한 Windows는 smbstatus 명령으로 확인할 수 있다.
이제 Windows에서도 리눅스의 저장 공간을 자신의 것처럼 사용할 수 있다.
NFS와의 차이점은 NFS는 리눅스 사이에서 저장 공간을 공유하는 것이고 Samba는 이기종 운영체제 사이에서 저장 공간을 공유하는 것이다.
따라서 이기종 운영체제 시스템이라면 NFS, Samba를 모두 구축하는 것을 권장한다.
'Linux' 카테고리의 다른 글
[Linux] PXE, Kickstart (0) | 2022.03.21 |
---|---|
[Linux] Proxy 서버 (0) | 2022.03.21 |
[Linux] NFS(Network File System) (0) | 2022.03.21 |
[Linux] SELinux (Security Enhanced Linux) (0) | 2022.03.20 |
[Linux] ELF(Executable and Linkable Format) 파일 형식 (0) | 2022.03.12 |
영차영차 성장 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!