SMB protocol을 이용하여 파일공유 시스템 구축

강정우·2024년 1월 8일
0

Dev_Ops

목록 보기
7/20

SMB 서버란?

SMB(Server Message Block) 서버는 파일, 프린터, 직렬 포트 및 통신 추상화를 위한 프로토콜을 제공하는 네트워크 파일 공유 프로토콜이다.
SMB는 주로 Windows 환경에서 파일 및 프린터 공유를 위해 사용되는데, Linux와 macOS 시스템에서도 사용할 수 있다.

SMB 서버를 통해 네트워크 상의 다른 컴퓨터는 공유된 자원에 접근할 수 있으며, 이는 네트워크 드라이브로 마운트하거나 파일 공유 접근을 통해 이루어진다. Linux 시스템에서는 Samba라는 소프트웨어를 통해 SMB 프로토콜을 구현할 수 있다. Samba는 Linux 및 유닉스 서버를 Windows 기반 클라이언트가 접근할 수 있는 파일 및 프린터 공유 서비스로 변화시키는 역할을 한다.

SMB 프로토콜 기능

  1. 파일 공유: 사용자는 네트워크를 통해 파일을 저장하고 접근할 수 있으며, 이를 통해 팀워크와 자원의 중앙 집중화를 촉진할 수 있다.
  2. 프린터 공유: 네트워크에 연결된 프린터를 여러 사용자가 공유할 수 있도록 해 준다.
  3. 포트 통신: 직렬 포트와 같은 통신 포트를 네트워크를 통해 공유할 수 있음.
  4. 인터 프로세스 통신(IPC): 네트워크 상의 다른 컴퓨터와 프로세스 간 통신을 가능하게 함.

참고로 보안 문제로 인해 SMBv1은 더 이상 사용되지 않으며, SMBv2와 SMBv3 같은 더 안전한 버전이 권장된다.
SMB 서버를 설정할 때는 항상 최신 버전의 Samba를 사용하고, 적절한 보안 설정을 구성하는 것이 중요하다.

SMB는 클라이언트-서버 모델을 사용하여 작동한다. 클라이언트가 SMB 서버에 연결을 요청하고, 서버는 해당 요청을 승인하여 자원에 대한 접근을 허용한다.
이때, 보안을 위해 사용자 인증 절차를 거치며, 이는 주로 NTLM(NT LAN Manager)이나 Kerberos와 같은 프로토콜을 사용한다.

SMB는 SFTP와 다르게 SSH가 필요하지 않다.

당연하게도 Ubuntu에서 SMB 서버를 구축하는 데 SSH(Secure Shell)는 필수적이지 않다. SMB(Server Message Block)와 SSH는 서로 다른 프로토콜이며, 각각 다른 목적으로 사용되기 때문이다.

SMB는 파일 공유를 위한 프로토콜이며, 원격으로 파일 시스템에 접근하거나 프린터 공유 등을 가능하게 한다.
반면, SSH는 주로 원격 시스템에 안전하게 접속하기 위한 프로토콜로, 명령줄 인터페이스를 통한 서버 관리에 사용된다.

그러나 SSH는 SMB 서버를 원격으로 설정하고 관리할 때 유용하다.
예를 들어, 원격 위치에서 Ubuntu 서버에 접속하여 Samba를 설치하고 설정 파일을 편집하는 등의 작업을 할 때 SSH 접속을 사용할 수 있다.
SSH를 통해 안전하게 서버에 접속하고 필요한 모든 설정 작업을 할 수 있기 때문에, 원격 관리를 위해서는 SSH가 매우 중요하다.

하지만 SSH 없이도 직접 또는 콘솔을 통해 서버에 물리적으로 접근하여 Samba를 설치하고 설정할 수 있다.
이 경우 SSH는 필요하지 않는다. SMB 서비스 자체가 작동하고 네트워크 상에서 파일 공유를 제공하는 데 SSH는 관련이 없다.
그리고 우리는 이 물리적으로 서버실에서 동작해보자.

SMB 프로토콜 동작 과정

1.연결 수립(Connection Establishment)

클라이언트가 서버에 연결을 요청한다. 이때 TCP/IP 프로토콜을 사용하며, 일반적으로 TCP 포트 445 또는 이전 버전에서는 139를 사용한다.
서버가 클라이언트의 요청을 받아들이고, 서로 간에 SMB 프로토콜의 버전을 협상한다.

2. 인증(Authentication)

연결이 수립되면, 서버는 클라이언트의 요청을 받아들이고, 클라이언트는 사용자 이름과 비밀번호 같은 인증 정보를 제공한다. 서버는 이 정보를 검증하여 접근 권한을 부여한다. 이 과정에서는 NTLM(NT LAN Manager)이나 Kerberos 같은 인증 방식이 사용될 수 있다.
클라이언트는 서버 상의 리소스에 대한 접근 권한을 갖게 된다.

3. 세션 설정(Session Setup)

인증 후, 클라이언트와 서버 간에 SMB 세션을 설정한다. 이때, 클라이언트는 서버에게 자신이 접근할 수 있는 리소스나 서비스의 리스트를 요청할 수 있고 파일이나 프린터와 같은 리소스에 대한 요청과 응답이 이루어진다.

4. 요청과 응답(Request and Response)

세션이 설정되면, 클라이언트는 파일 열기, 읽기, 쓰기, 닫기 등의 요청을 서버에 보낼 수 있다.

리소스 요청: 클라이언트는 파일을 열거나 읽기/쓰기 등의 요청을 서버에 보낸다. 이때 해당 요청은 SMB 프로토콜을 사용하여 패킷으로 전송된다.
리소스 응답: 서버는 클라이언트의 요청을 처리하고, 요청된 작업을 실행한다. 그리고 그 결과를 클라이언트에게 다시 SMB 패킷으로 전송한다.

5. 서비스 이용(Resource Access)

클라이언트는 응답받은 데이터를 사용하여 필요한 작업을 수행한다. 예를 들어, 파일을 로컬 시스템에 저장하거나, 문서를 출력하기 위해 프린터 공유에 접근할 수 있다.

6. 세션 종료(Session Termination)

작업이 끝나면, 클라이언트는 서버에게 세션을 종료하겠다는 요청을 보낸다.
서버는 이 요청을 수락하고 세션을 종료하면, 이후 연결이 끊어지며 모든 리소스가 해제된다.

Ubuntu 서버에 SMB 프로토콜을 이용한 파일공유 시스템 구축하기

1. Samba 설치

sudo apt update
sudo apt install samba

2. Samba 설정 파일 백업

설정을 변경하기 전에 기존의 Samba 설정 파일을 백업하는 것이 좋다.

sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.backup

3. Samba 설정 파일 편집

설정 파일을 열어 공유할 디렉토리와 권한을 설정한다.

sudo nano /etc/samba/smb.conf

파일 맨 아래에 공유 설정을 추가한다. 예를 들어, files라는 이름의 공유를 생성하고 싶다면 다음과 같이 추가하면 된다.

[files]
path = <공유할 경로>
read only = no
browsable = yes

4. 공유할 디렉토리 생성 및 권한 설정

설정한 경로에 따라 디렉토리를 생성하고 적절한 권한을 부여해준다.

sudo mkdir -p /srv/samba/myshare
sudo chown nobody:nogroup /srv/samba/myshare
sudo chmod 0775 /srv/samba/myshare

5. Samba 사용자 추가

Samba 사용자는 시스템 사용자와 연동되어 있어야 한다. 먼저 시스템 사용자를 추가하든 기존 사용자를 사용하든 괜찮다.

sudo adduser sambauser

그 다음 비밀번호를 Samba에 등록함으로서 사용자를 추가한다.

sudo smbpasswd -a sambauser

위 명령을 실행하면 비밀번호를 입력하라는 메시지가 나온다. Samba 접속용 비밀번호를 설정해주면 된다.

6. Samba 서비스 재시작

모든 설정을 마친 후 Samba 서비스를 재시작한다.

sudo systemctl restart smbd

7. 방화벽 설정

Samba 서비스가 네트워크를 통해 접근 가능하도록 방화벽을 설정한다.

sudo ufw allow samba

혹은

sudo ufw allow 137/tcp
sudo ufw allow 138/tcp
sudo ufw allow 139/tcp
sudo ufw allow 445/tcp

설정확인 후 방화벽 재시작 후 로그 확인

sudo ufw status
sudo ufw reload
sudo ufw status verbose

8. 시스템 부팅 시 자동 시작 서비스 등록

서비스를 자동으로 시스템 부팅 시 시작하도록 설정하려면 다음 명령어를 사용하면 된다.

sudo systemctl enable smbd

samba 서비스 실행상태 확인하기

1. 서비스 상태 확인

Samba는 smbd 서비스로 실행되기 때문에, 다음 명령어로 상태를 확인할 수 있다.

sudo systemctl status smbd

2. 프로세스 확인

Samba 서비스의 프로세스를 직접 확인하기 위해서는 ps 명령어를 사용할 수 있다.

ps -A | grep smbd

smbd 프로세스가 실행 중이면, 이 명령어의 출력에 프로세스 정보가 표시된다.

3. 포트 확인

Samba가 네트워크 상에서 활성화되어 있는지 확인하기 위해 netstat 또는 ss 명령어를 사용하여 해당 포트가 열려 있는지 확인할 수 있다.

sudo netstat -tulnp | grep smbd

이때 netstat이 없다면 설치하면 되고 또는

sudo ss -tulnp | grep smbd

이 명령어들은 Samba가 사용하는 포트(기본적으로 TCP 139와 445)에 대한 정보를 보여준다.
smbd 서비스가 해당 포트에서 리스닝 중이라면 서비스가 실행 중인 것이다.

외부 시스템에서 SMB 프로토콜로 파일 접속하기

widow

파일 탐색기 상단에 \\your_server_ip\files 를 통하여 접근할 수 있고 혹은 win + r 을 통해 \\your_server_ip\files로 접근할 수 있다.

mac

Finder의 '서버에 연결' 기능을 사용하여 smb://your_server_ip/myshare로 접근할 수 있다.

profile
智(지)! 德(덕)! 體(체)!

0개의 댓글