본문 바로가기
서버구축 (WEB,DB)

삼바(samba) 설치 및 환경 설정

by 날으는물고기 2009. 4. 16.

삼바(samba) 설치 및 환경 설정

삼바(Samba)란?

삼바란 리눅스에서 동작하면서 윈도우의 랜 매니저 기능을 흉내내는 소프트웨어입니다. 윈도우쪽에서 리눅스 서버의 하드디스크와 네트웍 프린터 자원을 공유하도록 환경을 설정할 수 있고, 삼바를 통해 리눅스 쪽에서 윈도우쪽 파일시스템과 프린터로도 접근할 수 있습니다. 이러한 것은 모두 삼바서버가 SMB(Server Message Block)/CIFS(Common Internet File System) 프로토콜을 흉내냄으로써 가능해집니다.

 

SMB 란?

SMB(Server Message Block)는 마이크로소프트사와 인텔이 윈도우 시스템이 다른 시스템의 디스크나 프린터와 같은 자원을 공유할 있도록하기 위해 개발되었습니다. SMB는 OS/2, NT, WIN9x를 사용하는 컴퓨터끼리 파일 공유등의 서비스를 구현하는데 사용되는 프로토콜입니다. TCP/IP 기반하의 NetBIOS 프로토콜을 이용하기 때문에 이 프로토콜은 NFS, NIS, lpd 와 같은 유닉스의 분산인증구조와 유사합니다. 따라서, 윈도우 중심의 네트워크 환경에서는 필수적이라고 하겠습니다.

 

CIFS 란?

CIFS(Common Internet File System) 는 인터넷을 위한 SMB 파일 공유 프로토콜의 확장된 버전입니다. SMB 프로토콜 위에 DNS(Domain Name Service)를 이용한 확장성, 느린 전화 접속 네트워킹을 위한 최적화, 유니코드를 따르는 파일 이름 지원을 덧붙여, 윈도우와 유닉스 환경을 동시에 지원하는 인터넷의 표준 파일 규약입니다. 한 가지 중요한 사실은 이전의 폐쇄적인 SMB 프로토콜과는 달리 CIFS 규약 정의에 여러 유닉스 업체들이 참여했다는 점입니다. 삼바도 버전이 올라감에 따라(삼바 2.2 계열) CIFS 규약을 준수하고 있습니다.

 

삼바를 쓰는 이유는?

네트워크 환경에 윈도우 NT 서버가 있음에도 불구하고 삼바를 사용하는 이유는 무엇일까요? 단지 공짜라는 이유로 이를 설명하기에는 무리가 따릅니다. 다음과 같은 이유를 생각해 보도록 하겠습니다.

  • 삼바는 기존 네트워크 환경에 물려있는 이종 운영체제를 하나로 통합해서 관리하며 사용할 수 있도록 허용한다. 윈도우 NT, 윈도우 98만이 사무실이나 연구실에서 사용하는 운영체제의 전부가 아니다. 매킨토시, 윈도우 98, 윈도우 ME, 솔라리스, 리눅스, FreeBSD, HP-UX와 같은 운영체제가 혼재할 경우 삼바가 유일한 대안이다.
  • 삼바는 파일서버 뿐 아니라 인쇄 서버로서 중요한 구실을 맡는다. 오라일리에서 나온 "Network Printing"을 살펴보면 유닉스(리눅스) 서버에 프린터를 물려 놓고, 중앙 집중식으로 관리하는 방법을 소개하는데, 여기서 윈도우 기계와 통신을 삼바로 처리한다.
  • 삼바는 주 도메인 관리기로 동작할 수 있다. 삼바를 사용하면 윈도우 98/ME나 윈도우 NT 워크스테이션 그룹을 묶기 위해 더 이상 윈도우 NT 서버가 필요 없다.
  • 삼바를 사용하면 여러 윈도우 NT 서버를 두는 대신 강력한 유닉스 기계 하나로 대체할 수 있다.

삼바 기능이 그야말로 화려하지 않습니까?

 

삼바로 무엇을 할 수 있을까?

이제 삼바를 사용하여 어떤 일을 할 수 있는지 몇 가지 시나리오를 제시하겠습니다. 여러분 상황에 맞다면 바로 삼바를 사용해 보기 바랍니다.

  • 유닉스 머신에 남아도는 하드디스크를 윈도우 사용자들에게 제공하고 싶을 경우, 삼바를 설치하고 각 개인별로 공간을 제공한다.
  • 유닉스 머신에서 윈도우 머신에 물린 프린터로 인쇄를 하고 싶을 경우, smbclient 패키지를 사용한다.
  • 윈도우 머신에서 유닉스 머신에 달린 백업 장치에 접근하고 싶을 경우, 삼바를 사용한다.

물론, 이상에서 소개한 기능이 삼바의 전부가 아닙니다.
단지 여러분의 상상력이 삼바 사용을 제한할 따름입니다.

 

삼바의 설치

삼바는 리눅스 설치시 대부분 자동으로 설치가 됩니다.
삼바가 시스템에 설치되어 있는지 아래와 같이 확인합니다.

    # rpm -qa | grep samba

설치가 되어 있지 않았다면, 배포판 CD에서 위에 나온 samba 패키지를 설치합니다.

* 윈도 NT 나 2000 과 같은 네트워크에 있다면 2.2.x 버전대의 삼바를 사용하기 바랍니다.

 

삼바의 설정

삼버 서버를 구동하기 위해서는 먼저 네트워크 환경에 맞게 설정을 해야 합니다.
삼바의 설정파일은 /etc/samba 디렉토리 아래에 있으며, smb.conf 가 설정파일입니다.

삼바의 설정은 매우 복잡하며 환경에 따라서 다양한 설정 방법등이 존재하므로 처음부터 모든 것을 설정하기 보다는 가장 기본적인 것부터 설정해 나가는 것이 효율적입니다. 먼저, 필자가 작성한 가장 쉬운 smb.conf 를 보며 설명하겠습니다.

먼저, 기본 smb.conf 를 백업한 후 작성 합니다.
기본 smb.conf 는 나중에 좋은 참고서가 됩니다. 이글을 보신 후 꼭 살펴보시기 바랍니다.

# cd /etc/samba

# mv smb.conf smb.conf.orig

# vi smb.conf

[필자의 smb.conf]

 

[global]
workgroup = 컴퓨터수리정보
server string = 리눅스 삼바 서버
log file = /var/log/samba/%m.log
security = SHARE

guest account = guest
;encrypt passwords = yes
;smb passwd file = /etc/samba/smbpasswd
unix charset = cp949
dos charset = cp949
display charset = cp949
client code page = 949
directory mask = 775
force create mode = 0664

socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192

[homes]
comment = 홈디렉토리
browseable = no
writable = yes

[public]
comment = 공유디렉토리
path = /home/public

browseable = yes
public = yes
writable = yes

위 설정 파일에 대해 설명을 하도록 하겠습니다.

[global]
workgroup = 컴퓨터수리정보
# 윈도우에서 작업 그룹과 같습니다. 공유하고자 하는 작업 그룹 이름을 적습니다.

server string = 리눅스 삼바 서버
# 컴퓨터 설명 필드와 같습니다.

log file = /var/log/samba/%m.log
# 삼바에 접속하는 호스트 별로 개별적인 로그 파일을 만들도록 합니다.

security = SHAREㅤ
# 사용자 인증을 거치지 않고 공유 자원(폴더)에 접근할 수 있게 합니다.

encrypt passwords = yes
smb passwd file = /etc/samba/smbpasswd
# 윈도우의 기본 패드워드 모드는 encrypted 모드입니다. 삼바의 암호 모드가 윈도우와 호환되도록 설정합니다.

client code page = 949
# 한국어를 보기 위해 코드 페이지를 949로 설정한다.

socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
# 대부분의 경우 위 옵션을 주면 성능 향샹 효과를 볼 수 있습니다.

[homes]

# 공유 자원을 찾을 수 없을 때 사용자 데이터베이스를 찾아서 해당 사용자에 대한 공유 자원을 만들어주는 기본 섹션입니다.

comment = 홈디렉토리
# 공유 자원에 대한 설명 필드와 같습니다.

browseable = no
# 윈도우 네트워크 브라이저에서 디렉토리를 보일 것인지를 결정합니다.

writable = yes
# 사용자에게 쓰기권한을 줍니다.

[public]
# 윈도우에서 보이는 공유 자원(폴더) 이름입니다.

comment = 공유디렉토리
# 공유자원에 대한 설명 필드와 같습니다.

path = /home/public
# 삼바 서버로 공유할 실제 공유 자원(폴더) 입니다.

public = yes
# 손님사용자에게 접근을 허용합니다.

writable = yes
# 사용자에게 쓰기권한을 줍니다.

 

삼바 서버 시작

삼바 서버는 /etc/init.d/smb 스크립트에 의해 구동됩니다.

시작은 아래와 같이합니다.

    # /etc/init.d/smb start

만약 서버를 멈추고 싶다면,

    # /etc/init.d/smb stop

와 같이 하면 됩니다.

 

윈도우에서 리눅스 공유 폴더 사용하기

보통의 유저들은 윈도우98을 사용하고 있을 것입니다.
바탕화면의 네트워크 환경 아이콘에서 오른쪽 마우스 버튼을 클릭하여 컴퓨터 찾기를 실행합니다. 거기에서 삼바 서버가 설치된 리눅스 머신의 호스트네임을 입력하고 찾기 버튼을 누르면 리눅스 삼바 서비스를 수행하고 있는 머신이 보일 것입니다. 보인다면, 그 다음 과정은 윈도우 머신과 같습니다.

 

아래 화면에서 설명필드는 smb.conf 에서 comment 와 같으며, public 폴더는 [public] 섹션과 같습니다.

 

아래 화면은 리눅스 삼바 공유 폴더에서 파일을 윈도우 머신으로 복사해 오는 화면입니다.

 

 

리눅스에서 윈도우 공유 폴더 사용하기

 

공유 폴더 정보 알아내기

리눅스에서 윈도우 공유 폴더에 접근하려면 먼저 해당 컴퓨터의 공유 폴더에 어떤 것들이 있는지 알아야 합니다. 이러한 공유자원을 알아보는 명령이 smbclient 입니다.

* smbclient
smbclient -L 컴퓨터이름

* smbclient 외부 네트워크에 있는 컴퓨터일 경우
smbclient -L 컴퓨터이름 -I 컴퓨터의 IP주소

* 예제
smbclient -L cmis -I 100.200.100.200

 

[공유 폴더가 있는 정보 화면]

 

아래 화면이 공유 폴더가 있는 화면입니다.
Type 이 Disk인 것이 공유 폴더이고, Sharename은 공유 이름입니다.
Comment 는 자원에 대한 설명입니다.

[공유 폴더 접근하기]

 

앞에서 윈도우 컴퓨터의 공유 정보를 알아보았습니다.
공유 폴더에 접근 하기 위해서는 smbclient 명령을 사용하면 됩니다. smbclient 를 사용하여 공유 폴더에 접근되면 사용방법은 ftp 를 사용하는 것과 같은 방법입니다. 공유 폴더의 접근을 종료할려면 exit 명령을 입력하면 됩니다.

* smbclient
smbclient //컴퓨터이름/공유이름

* smbclient 외부 네트워크에 있는 컴퓨터일 경우
smbclient //컴퓨터이름/공유이름 -I 컴퓨터의 IP주소

* 예제
smbclient //cmis/이종준 -I 100.200.100.200

 

 

공유 폴더를 리눅스 디렉토리 처럼 사용하기

삼바 서버를 통해 윈도우 공유 폴더를 마운트하여 리눅스 디렉토리처럼 사용할 수 있습니다.
윈도우의 네트워크 드라이브 연결과 같다고 생각하면 되겠습니다.
smbmount 를 사용하여 할 수도 있고, mount 명령에서 삼바 파일시스템 형식을 지정하여 할 수도 있습니다.

* smbmount
smbmount  //컴퓨터이름/공유이름   마운트할디렉토리

* mount
mount  -t  smbfs  //컴퓨터이름/공유이름   마운트할디렉토리

* 예제
mount  -t  smbfs   //cmis/이종준   /mnt/samba

 

 

리눅스에서 윈도우XP 공유폴더 마운트

 

1. 탐색기-도구-폴더옵션-보기 에서 '모든 사용자에게 동일한 폴더 공유 권한을 지정(권장)' 항목의 체크 해제.
                 

2. 제어판-관리도구-컴퓨터관리-시스템 도구-로컬 사용자 및 그룹-사용자 에서 우클릭->새사용자 추가.

   '다음 로그온할 때 반드시 암호 변경'항목 체크 해제 '암호 사용 기간 제한 없음' 체크.

   생성된 '사용자 이름'(ID)과 '암호'(Password) 메모할 것.

 

3. 탐색기에서 C 또는 D 드라이브에서 우클릭-공유및보안선택-이 폴더를 공유함-새 공유 선택.
   공유 이름(메모), 허용인원 지정 -> '사용권한' 클릭, Everyone 제거 -> 추가 -> 생성한 ID 추가 후 '모든권한' 부여.

4. 리눅스에서 삼바 클라이언트 패키지가 설치 확인

 

5. 공유폴더 마운트하기

# mkdir /mountpoint(임의의 이름)
# smbmount '\\호스트IP주소(or Domain name)\공유이름'
/mountpoint
-o username=xxx,password=xxx
라고 하면 /mountpoint 디렉토리에 하드 전체가 마운트 된다.
                   
# smbmount '\\172.16.1.26\main' /mountpoint -o username=wangsam,password=1234

 

6. 이렇게 하여 윈도우 시스템 파일및 데이터 파일을 정기적으로 백업할 수 있다.^^(crond 등으로)

 

 

사용자별로 공유자원 할당하기

지금까지 간단히 삼바서버를 사용하는 법을 익혔습니다.
이제는 약간 고난이도(?)로 특정 사용자만 쓸 수 있는 공유 자원(폴더)를 설정하는 방법을 배워보도록 하겠습니다.
먼저 smb.conf 에 다음과 같이 추가하고 삼바 서버를 재시작 합니다.

[juni_room]
comment = 주니를 위한 삼바 창고
path = /home/junilove
valid users = junilove
public = no
writable = yes

위와 같은 설정은 junilove 라는 사용자에게만 juni_room 이라는 공유자원(폴더) 사용을 허용하는(실제의 공유자원은 리눅스 서버의 /home/junilove/ 가 됩니다.) 설정입니다.

여기에서 한가지 더 알아보자면 [juni_room] 공유자원을 junilove 와 wowlinux 두 사용자에게 할당하려고 한다면 'vaild users' 값을 'valid users = junilove wowlinux' 와 같이 하면 됩니다. 반대로 junilove 와 wowlinux 사용자만 제외하고 나머지 사용자들에게 공유자원 접근을 허용하려고 한다면 'invalid users = junilove wowlinux' 와 같이 하면 됩니다.

사용자별로 공유 자원을 할당하기 위해서는 사용자가 특정 공유자원을 요청하면 삼바는 해당 공유 자원을 소유하는 사용자 권한으로 동작하기 때문에, 어떤 경우에 있어서도 유닉스 머신에 사용자 계정이 있어야 합니다.

이제 그 작업을 해보도록 하겠습니다.
만약 junilove 와 wowlinux 라는 사용자가 서버에 없다면, adduser 를 이용하여 계정을 만듭니다.

# cd /etc

# cat passwd | mksmbpasswd.sh > /etc/samba/smbpasswd

# smbpasswd junilove

 

[smbpasswd 파일 생성 화면]

 

이 글에서 설명되지 않은 다른 조건의 환경을 만들고 싶다면, 항상 백업해 둔 기본 smb.conf 파일을 참고로 하십시오. 한가지 더 기억할 것은 윈도우 98, NT, 2000 등이 하지 못하는 것을(윈도우에 없는 기능) 삼바로 할 수 있다고 생각하지는 마시라는 것입니다. 삼바는 MS의 윈도우 프로토콜을 흉내내는 소프트웨어임을 기억하십시오.

삼바설정화일의 구문을 체크하여 에러를 표시해 주는 유틸리티가 있습니다. testparm 으로 실행하면, 아래와 같이 삼바 서버 설정을 체크하여 화면을 보여줍니다.

 

참고자료

제 5회 리눅스 공동체 세미나 강의록, B-6 네트워크서비스 3 (Samba), 강사 박재호님

이젠 나도 리눅서, 한빛미디어, 최지호, 송인준님 지음


samba에서 wins와 domain master 설정 시 유의 사항


MC/ServiceGuard HA 프레임워크에서 Samba를 구현할 때는 다음과 같은 사항을 주의해야 합니다.

  • 클라이언트 응용 프로그램

    HA HP CIFS Server에서는 HP CIFS Server 공유에 파일을 열어 놓은 클라이언트 응용 프로그램 또는 HP CIFS Server 공유에서 시작된 응용 프로그램이 전환 시 항상 투명하게 복구되는 것은 아닙니다. 이 경우, 전환 과정은 HP CIFS Server의 논리적인 종료 및 재시작 과정이기 때문에 응용 프로그램을 다시 시작하고 파일을 다시 열어야 할 수도 있습니다.

  • 파일 잠금

    장애 조치 시간 동안 파일 잠금이 유지되지 않습니다. 파일 잠금은 손실되며 응용 프로그램에 이러한 사실이 통보되지 않습니다.

  • 인쇄 작업

    인쇄 작업이 진행 중일 때 장애 조치가 발생하면 장애 조치 발생 시의 작업 상태에 따라 작업이 두 번 인쇄되거나 전혀 인쇄되지 않을 수도 있습니다.

  • 도메인 인증

    Samba 서버에 도메인 수준 인증을 사용하고 있는 경우, /var/opt/samba/private에 인증을 정상적으로 수행하기 위한 매우 중요한 파일이 들어 있습니다. 이 경우 /var/opt/samba/private 디렉토리를 공유된 논리적 볼륨의 일부로 설정하는 것이 좋습니다.

  • 심볼릭 링크

    Samba 서버에서 follow symlinks 매개 변수를 기본값인 yes로 설정하고 wide links 매개 변수를 역시 기본값인 yes로 설정한 경우에는 매우 주의해야 합니다.

    공유된 디렉토리 트리의 심볼릭 링크가 공유 디렉토리 외부에 있는 파일을 가리킬 수도 있습니다. 심볼릭 링크가 논리적 공유 볼륨 외부의 파일을 가리키고 있는 경우 장애 조치가 발생하면 심볼릭 링크가 잘못된 파일을 가리키거나 가리키는 파일이 없을 수도 있습니다. 이런 상황에서 모든 공유된 심볼릭 링크의 대상을 모든 MC/ServiceGuard 노드와 항상 동기화하는 것은 어려울 수도 있습니다.

    이 문제는 wide linksno로 설정하거나 논리적 공유 볼륨에 있는 파일 또는 디렉토리만 가리키도록 설정하면 손쉽게 해결할 수 있습니다.

  • 암호화된 암호

    encrypt passwordsyes로 설정하여 Samba 서버를 구성한 경우에는 smbpasswd 파일을 사용해야 합니다. 기본적으로 이 파일은 /var/opt/samba/private에 있지만 smb passwd file 매개 변수를 사용하면 다른 경로를 지정할 수 있습니다.

    smbpasswd 파일을 사용할 경우 이 파일은 논리적 공유 볼륨에 저장하는 것이 좋습니다. 이렇게 하려면 smb passwd file을 논리적 공유 볼륨 내의 경로로 설정하거나 /var/opt/samba/private을 논리적 공유 볼륨의 일부로 설정하면 됩니다.

  • WINS 서버로서의 Samba

    wins support 매개 변수를 yes로 설정하여 Samba 서버를 WINS 서버로 구성한 경우, WINS 데이터베이스는 /var/opt/samba/locks/WINS.DAT 파일로 저장됩니다.

    이 파일이 논리적 공유 볼륨에 있지 않으면, 장애 조치 발생 시 모든 WINS 클라이언트가 Samba WINS 서버에 자신의 주소를 업데이트하므로 약간의 시간이 소요됩니다. 그러나 WINS 데이터베이스 복원에 필요한 이 짧은 시간조차 허용되지 않는다면 전체 WINS 서비스를 복원하는 시간을 줄이면 됩니다.

    이렇게 하려면 /var/opt/samba/locks/WINS.DAT을 논리적 공유 볼륨의 WINS.DAT 파일을 가리키는 심볼릭 링크로 구성하십시오. 장애 조치 후 잠금 데이터가 제대로 해석되지 않을 수 있으므로 전체 /var/opt/samba/locks 디렉토리는 논리적 공유 볼륨에 두지 않는 것이 좋습니다.

  • 마스터 브라우저로서의 Samba

    domain master를 yes로 설정하여 Samba 서버를 도메인 마스터 브라우저로 구성하면 검색 데이터베이스는 /var/opt/samba/locks/BROWSE.DAT 파일에 저장됩니다. HA 구성에서 이 작업은 피하는 것이 좋습니다.

    이 작업이 필요하면 /var/opt/samba/locks/BROWSE.DAT을 논리적 공유 볼륨에 있는 BROWSE.DAT 파일을 가리키는 심볼릭 링크로 구성하십시오. 장애 조치 후 잠금 데이터가 제대로 해석되지 않을 수 있으므로 전체 /var/opt/samba/locks 디렉토리는 논리적 공유 볼륨에 두지 않는 것이 좋습니다.

  • 자동 프린터 공유

    Samba 서버에서 [printers] 공유가 HP-UX 시스템의 모든 프린터를 자동으로 공유하도록 구성한 경우, 모든 MC/ServiceGuard 노드에 동일한 HP-UX 프린터를 정의해야 합니다. 그렇지 않으면, 장애 조치 발생 시 Samba 서버에 공유된 프린터 목록이 변경되어 이 프린터를 사용하는 클라이언트에 문제가 발생합니다.

  • LMHOSTS 파일

    LMHOSTS 파일을 사용하여 특정 NetBios 이름에 대한 정적 주소를 저장할 경우, LMHOSTS 파일은 논리적 공유 볼륨에 저장하는 것이 좋습니다.

    기본적으로 LMHOSTS 파일은 이미 논리적 공유 볼륨에 위치해 있는 /etc/opt/samba 디렉토리에 들어 있으므로 모든 MC/ServiceGuard 노드에서 smb.conf 파일을 공유하고 있습니다. nmbd를 호출할 때 -H 옵션을 사용하여 LMHOSTS 파일에 다른 경로를 지정할 경우, LMHOSTS 파일을 논리적 공유 볼륨에 저장하여 모든 노드가 이 파일을 공유할 수 있도록 하는 것이 좋습니다.

728x90

댓글