본문 바로가기
IT/리눅스 이론

리눅스 삼바(samba) 설치 및 설정 - 윈도우와 리눅스 자원 공유

by 꾸꾸웍스 2023. 1. 18.
반응형

리눅스 삼바 설치 및 설정 썸네일
linux samba install

 

 

리눅스 서버의 samba 기능은 리눅스와 윈도우를 SMB 프로토콜을 이용하여 프린터 및 공유폴더를 사용하여 자원을 공유할 수 있는 프로그램입니다. 리눅스 삼바(samba)를 사용하기 위해 설치하는 과정과 삼바를 설치 후 설정하는 방법, 윈도우의 네트워크 드라이버를 연결하기 위해 방화벽을 설정하는 방법에 대해 다루며 리눅스 삼바에 접속이 되지 않을 때 어떠한 것을 점검해야 되는지에 대해 소개해드리겠습니다.

 

 

※ 목차 구성
1) 리눅스 삼바(samba) 설치
2) 리눅스 삼바(samba) 설정
3) 리눅스 삼바(samba) 방화벽 설정
4) 윈도우(windows) 네트워크 드라이버 연결
5) 리눅스 삼바 접속 안될 때

 

 

 

리눅스 삼바(samba) 설치

리눅스 삼바 구성도
리눅스 삼바(samba) 구성도

SAMBA란?

SMB(Server Message Block)란 인텔에서 개발한 네트워크 프로토콜을 이용하여 윈도우와 리눅스 및 유닉스 계열의 운영체제 같은 다른 운영체제에 네트워크로 연결하여 공유 폴더 및 프린터를 사용할 수 있도록 만든 프로그램입니다.

 

흔히 윈도우 서버에서 특정 리눅스 서버로 네트워크 드라이버를 연결하여 사용하는데 이때 윈도우는 클라이언트(SMB Client)가 되고 리눅스는 서버(SMB Server)가 됩니다. 반대로도 구현이 가능하며 SMB 프로토콜이 설치된 시스템에서만 사용이 가능합니다. 즉, SMB 프로토콜을 이용하여 다른 시스템의 프린터와 자원을 공유할 수 있도록 하기 위해 개발된 프로토콜입니다.

 

 

리눅스 삼바 패키지 설치

rpm 명령어로 삼바(samba)가 설치되었는지 확인 후 설치가 되어있지 않다면 리눅스 서버 내 samba 패키지를 설치합니다.

yum install samba

 

▼ samba 패키지 설치

root@server # rpm -qa | grep samba

root@server # yum install samba
...

root@server # rpm -qa | grep samba
samba-client-libs-4.10.16-20.el7_9.x86_64
samba-common-4.10.16-20.el7_9.noarch
samba-common-libs-4.10.16-20.el7_9.x86_64
samba-libs-4.10.16-20.el7_9.x86_64
samba-4.10.16-20.el7_9.x86_64
samba-common-tools-4.10.16-20.el7_9.x86_64
samba-client-4.10.16-20.el7_9.x86_64

 

리눅스 서버 내 samba를 새로 설치 시 samba-client-libs, samba-common, samba-common-tools 등 을 포함하여 약 20개 정도의 의존하는 패키지가 함께 설치됩니다.

 

 

 

반응형

 

 

리눅스 삼바(samba) 설정

리눅스 서버 내 samba 설치를 완료하였다면 /etc 하위 디렉토리에 samba 디렉토리가 생성됩니다. 이후 필수적으로 수행해야 될 리눅스 삼바(samba) 설정에는 samba 디렉토리의 smb.conf 파일에 대한 설정과 samba로 공유할 디렉토리를 만들고 samba로 접속할 계정을 만드는 작업을 완료해야 됩니다.

 

 

공유디렉토리 만들기

mkdir /sambadir
chmod 777 /sambadir

 

우선 윈도우와 리눅스가 SMB 프로토콜을 이용하여 사용할 공유 디렉토리 경로를 만들어줘야 됩니다. 위 예시는 공유 폴더를 사용할 디렉토리를 root 하위에 sambadir이라는 디렉토리를 생성하였고 디렉토리의 권한은 777로 부여를 하였습니다. 디렉토리와 디렉토리 권한은 사용하는 환경에 맞게 원하는 경로와 권한을 생성해도 무방합니다.

 

▼ sambadir 디렉토리 생성 및 777 디렉토리 권한 부여

root@server # mkdir /sambadir

root@server # chmod 777 /sambadir

 

 

삼바(samba) 계정 만들기

smbpasswd -a {사용할 계정명}

 

smbpasswd는 리눅스 계정 passwd 명령어와 비슷하며 옵션에 대한 설명은 예시 아래의 설명을 참고하시면 됩니다. smbpasswd 명령어를 이용하여 samba에 사용할 계정명을 입력하면 패스워드를 입력하라는 메시지가 출력되며 똑같은 패스워드를 두 번 입력하여 삼바(samba) 계정을 만듭니다.

 

▼ smbpasswd 명령어로 testuser 삼바계정 생성

root@server # smbpasswd -a testuser
New SMB password:
Retype new SMB password:
Added user testuser.

root@server # pdbedit -L
testuser:1000:testuser

 

  • smbpasswd -a 옵션
    - 삼바에 사용할 계정을 추가하는 옵션으로 실제 리눅스 시스템에 존재하는 계정으로 생성해야 됩니다.
  • smbpasswd -x 옵션
    - 생성된 계정을 삭제하는 옵션입니다.
  • smbpasswd -d 옵션
    - 생성된 계정 중 특정 유저를 일시적으로 비활성화할 때 사용합니다.
  • smbpasswd -e 옵션
    - 비활성화된 유저를 활성화할 때 사용하는 옵션입니다.
  • smbpasswd -n 옵션
    - 삼바에 로그인할 때 패스워드 없이 로그인되도록 할 때 사용하는 옵션입니다.
      (/etc/samba/smb.conf 파일 내용에 null passwords = yes라고 추가 설정을 해야 됩니다.)

 

 

smb.conf 수정
vim /etc/samba/smb.conf

 

smb.conf 파일을 수정하기 전 cp 명령어로 원본을 우선 백업합니다. 백업 후 smb.conf 파일의 내용을 살펴보면 크게 [global], [homes], [printers], [print$] 총 4개의 section이 있습니다. global은 삼바 전체의 환경설정을 의미하고 homes는 삼바의 각 계정의 사용자가 서버의 홈 디렉토리로 접근할 때 권한을 의미하고 printers는 프린터, print$는 프린터 드라이버를 의미합니다.

 

리눅스 삼바(samba)를 설치하고 보통 공유 폴더를 사용하는 목적이기 때문에 smb.conf 파일 하단에 아래의 예시대로 새로운 section을 추가합니다.

 

[share]
       comment = samba directory
       path = /sambadir
       read only = no
       writable = yes
       guest ok = no
       create mask = 0777
       directory mask = 0777

 

옵션 설명
comment text [share]에 대한 설명
path text 공유 디렉토리 경로
read only [yes | no] 공유 폴더를 읽기전용으로 설정
writable [yes | no] 공유 폴더를 쓰기전용으로 설정
guest ok [yes | no] 사용자 접근 가능 여부
create mask (0700, 0755, 0777, 0400 ...) 생성시 권한 설정
directory mask (0700, 0755, 0777, 0400 ...) 공유 폴더 권한

 

 

 

 

리눅스 삼바(samba) 방화벽 설정

리눅스 삼바(samba) 서비스는 네트워크 프로토콜 프로그램으로 전용 port가 열려있지 않다면 port를 열어 주고 서비스를 기동해야 됩니다. (리눅스 삼바(samba) 서비스 네트워크 프로토콜 port는 UDP 138, 139를 사용)

 

 

삼바(samba) 방화벽 설정

firewall-cmd --permanent --add-service=samba
firewall-cmd --permanent --zone=public --add-port=138/udp
firewall-cmd --permanent --zone=public --add-port=139/udp
firewall-cmd --reload

 

▼ samba 방화벽 udp 138, 139 open

root@server # firewall-cmd --permanent --add-service=samba
success

root@server # firewall-cmd --permanent --zone=public --add-port=138/udp
success

root@server # firewall-cmd --permanent --zone=public --add-port=139/udp
success

root@server # firewall-cmd --reload
success

 

 

삼바(samba) 서비스 기동

systemctl enable smb
systemctl start smb

 

▼ 리눅스 삼바 서비스 start

root@server # systemctl enable smb
Created symlink from /etc/systemd/system/multi-user.target.wants/smb.service to /usr/lib/systemd/system/smb.service.

root@server # systemctl start smb

root@server # systemctl status smb
● smb.service - Samba SMB Daemon
   Loaded: loaded (/usr/lib/systemd/system/smb.service; enabled; vendor preset: disabled)
   Active: active (running) since Mon 2023-01-16 17:49:46 KST; 2s ago
     Docs: man:smbd(8)
           man:samba(7)
           man:smb.conf(5)
 Main PID: 85273 (smbd)
   Status: "smbd: ready to serve connections..."
   CGroup: /system.slice/smb.service
           ├─85273 /usr/sbin/smbd --foreground --no-process-group
           ├─85275 /usr/sbin/smbd --foreground --no-process-group
           ├─85276 /usr/sbin/smbd --foreground --no-process-group
           └─85277 /usr/sbin/smbd --foreground --no-process-group

 

서버가 부팅 후에도 자동으로 smb 서비스가 active가 될 수 있도록 enable을 명령을 수행합니다.

 

 

 

윈도우(windows) 네트워크 드라이버 연결

윈도우 네트워크 드라이브 연결 방법
윈도우 네트워크 드라이브 연결

 

윈도우 탐색기 → 네트워크 드라이브 연결 → \\리눅스서버IP\share → samba계정, 비밀번호 입력

리눅스 서버 내 삼바 설정이 완료되었다면 윈도우 서버로 돌아와 윈도우 탐색기창을 열고 위 사진과 같이 '네트워크 드라이브 연결'을 누릅니다. 이후 원하는 드라이브를 선택 후 폴더 경로에 역슬래쉬 2개와 접속할 리눅스 서버의 IP를 입력하고 역슬래쉬를 다시 입력하여 smb.conf에서 설정했던 share section을 입력합니다.

 

 

윈도우와 리눅스 네트워크 드라이브 연결 완료
윈도우와 리눅스 네트워크 드라이브 연결 완료

 

아이디와 패스워드는 기존에 smbpasswd 명령어로 만들었던 계정 아이디와 비밀번호를 입력하면 성공적으로 윈도우와 리눅스가 공용폴더로 연결이 성공적으로 완료됩니다.

 

 

 

 

리눅스 삼바 접속 안될 때

리눅스 삼바를 설정 후 또는 리눅스 삼바를 사용 중인데 갑자기 리눅스 삼바 접속이 안되면 체크해야 될 상황 몇 가지를 소개해드리겠습니다. 우선적으로 리눅스 삼바를 처음 설치하고 설정 중 윈도우와 리눅스가 연결이 되지 않는다면 방화벽 설정이 제대로 되어 있지 않은 경우가 있으니 위에 소개된 방화벽 설정을 참고하여 방화벽을 오픈해야 됩니다.

 

▼ selinux 값 disabled 확인

root@server # cat /etc/selinux/config | grep -i ^selinux
SELINUX=disabled
SELINUXTYPE=targeted

 

리눅스 삼바 접속이 안 되는 이유 중 위 selinux config 파일에 SELINUX가 disabled가 아닌 enforcing이 되어 있을 수 도 있습니다. selinux는 보안 관련 설정 파일이기 때문에 탐색기에서는 연결된 상태이지만 권한 문제 등으로 실제 접속은 되지 않은 경우가 있습니다.

 

▼ 서비스 및 프로세스 정상 여부 확인

root@server # systemctl status smb | grep Active: | awk '{print $2}'
active

root@server # ps -ef | grep smb
root      73111      1  0 10:10 ?        00:00:00 /usr/sbin/smbd --foreground --no-process-group
root      73114  73111  0 10:10 ?        00:00:00 /usr/sbin/smbd --foreground --no-process-group
root      73115  73111  0 10:10 ?        00:00:00 /usr/sbin/smbd --foreground --no-process-group
root      73116  73111  0 10:10 ?        00:00:00 /usr/sbin/smbd --foreground --no-process-group
root      96688  73111  0 15:38 ?        00:00:00 /usr/sbin/smbd --foreground --no-process-group
root     161817  73111  0 17:02 ?        00:00:00 /usr/sbin/smbd --foreground --no-process-group
root     170123  41478  0 17:13 pts/3    00:00:00 grep --color=auto smb

 

smb를 enable로 설정하지 않을 시 서버가 부팅되거나 서비스가 멈추면 프로그램이 기동 되지 않고 stop이 되는 경우가 있기 때문에 리눅스 삼바 접속이 되지 않은 경우도 있습니다. 따라서 위 명령어처럼 smb 서비스를 주기적으로 체크하여 실제로 active로 프로그램이 돌아가고 있는지 체크여부도 중요합니다. 또한 서비스와 함께 smb 프로세스 체크도 중요합니다.

 

 

 

반응형
그리드형

댓글