본문 바로가기
Work/개발 노트

[Setting] 삼바 서버 활용하기

by ★용호★ 2011. 4. 6.

samba 활용하기: 환경 설정하기

Daniel Robbins
CEO, Gentoo Technologies, Inc
2000년 7 월

이전 글에서 필자는 Samba를 세팅하는 과정을 설명하였다. 이제 원하는 모든 것을 할 수 있도록 Samba를 설정하는 방법을 알아보자.

목차:

공유 추가하기

재미있는 공유 보기

여러 홈 디렉토리 공유하기

공유 매개 변수

smb.conf 의 여러 옵션들

Samba의 프린트

Samba의 프린트 작동방법

Samba print globals

결론

필자소개

기사에 대한 평가

다음은 지금까지 작업한 smb.conf 파일 리스트이다.:




[global]
	
	# set YOURWORKGROUP to the name of your workgroup

	workgroup = YOURWORKGROUP
	security = user
	encrypt passwords = yes
	guest account = guest

	# enable *one* of the following two lines
	# enable the first line if you want to use an existing
	# WINS server on your subnet, otherwise, enable the
	# second.
 
#	wins server = IP address of WINS server
#	wins support = yes

	local master = yes
	os level = 99
	domain master = yes
	preferred master = yes

	# optional security options.  Customize for your site.

#	hosts allow = 192.168.1. 127.
#	interfaces = eth1

[tmp]
	path=/tmp
	writeable=yes

공유 추가하기
이 smb.conf 파일의 설정으로 잘 작동하긴 하지만, 단지 "tmp"라는 공유를 생성하여 Windows와 /tmp 디렉토리를 공유하는 것 뿐이어서 그리 흥미롭지는 않다. 보다 유용한 공유를 생성해 보도록 한다. 사용자의 smb.conf 파일에 다음 행들을 추가하고 Samba를 재시동한다.




[ftp]
	path=/path/to/ftp/root
	writeable=no

사용자가 ftp 사이트 또는 Samba 서버에 어떤 종류의 파일 아카이브(archive)를 가지고 있다면, 사용자는 네트워크를 통해 데이터를 공유하기 위해 이것을 사용할 수 있다. "writeable=no" 매개변수는 Samba가 어떤 사용자에게도 공유 파일의 생성 또는 수정을 허락하지 못하게 한다. 유효한 Samba 계정을 가진 사람은 이 공유에 접근할 수 있다.

재미있는 공유 보기
사용자가 무엇을 생각하는 지 추측할 수 있다. 지금까지는 아무 흥미를 느끼지 못했을 것이다. 홈 디렉토리를 어떻게 공유할 것인가? 여기 방법이 있다.:




[drobbins]
        comment=Home directory for drobbins
        path = /home/drobbins
        force user = drobbins
        read only = no
	valid users = drobbins administrator

이것을 smb.conf 파일에 추가함으로 사용자가 홈 디렉토리를 공유할 수 있다. "drobbins"공유가 생성되었다. 이것으로 네트워크에 걸쳐 /home/drobbins 홈 디렉토리의 내용을 공유한다. 다행스럽게도, "valid user" 행 때문에 공유에 접속할 수 있는 사용자가 제한되어 있다. 이 행으로 인하여 "drobbins" 또는 "administrator"의 계정만 이 공유에 접속할 수 있다. Windows NT 사용자는 종종 administrator로서 로그인 할 수 있다. 이러한 상황에서도 "drobbins" 공유에 접속할 수 있어서 좋다. 이러한 유효한 사용자 행이 있기 때문이다.

"read only" 매개 변수의 사용에 주목하라. "read only"는 "writeable" 매개변수의 반대라는 것을 예상할 수 있다. 이 행은 "writeable=yes"로 쉽게 해당할 수 있다. 이것으로 Samba는 적합한 허용을 가지고 있는 한, 이 개별 공유에 쓰기를 허용할 것이다. Samba의 "drobbins" 사용자는 바로 UNIX의 "drobbins" 사용자에 배치되고 drobbins는 /home/drobbins 디렉토리와 그 내용의 소유자이기 때문에, 파일을 작성하고 수정하는 것이 허용된다.

루트로서 홈 디렉토리에 파일을 생성하고, 쓰기 권한이 없는 일반 사용자로 로그인하여 그 파일을 수정하려고 시도해 본 적이 있는가? 언제나 발생할 수 있는 문제이다. 문제를 처리하기 위하여, "su", "chown drobbins.drobbins filename" 하고서 루트로부터 "exit"해야 한다. 드디어 파일을 수정할 수 있게 되었다!

이 얘기를 꺼낸 이유는, 홈 디렉토리를 공유하고 다른 Samba 사용자로 그것에 접근하려 할 때 발생하는 유사한 문제이기 때문이다. 관리자로서 공유에 접근하여 파일을 생성했다고 생각해 보자. 보통 이 파일은 관리자의 소유이고, drobbins 사용자에 의하여 수정될 수 없을 것이다. drobbins가 그 파일을 수정하려고 한다면, 접속이 거절될 것이다. 다행스럽게도, Samba는 이 상황에 작용하는 "force user" 옵션을 가지고 있다. "force user" 옵션으로 파일에(개별 Samba SMB/CIFS의 공유) 수행되는 전체 작동은, 단일 UNIX계정으로서 수행된다. "drobbins" 공유에서 관리자의 생성 파일은 실제로 drobbins의 소유이므로 모든 소유권 논란을 방지할 수 있다. "drobbins" 공유는 나의 홈 디렉토리의 내용을 포함하기 때문에, drobbins 계정이 소유하는 전체 내용을 내부에 보관할 것이다.

다음 내용으로 이동하기 전에 "comment" 매개변수를 검토한다. 이 매개변수로 공유에 Windows에 보이는 기술적 주석(descriptive comment)을 보충할 수 있다.

여러 홈 디렉토리 공유하기
지금까지 1개의 홈 디렉토리의 공유 방법을 다루었다. 하지만 수백 명의 사용자가 있는 서버를 관리하고 전체 사용자가 Windows에서 그들의 홈디렉토리에 접속하기 원한다면, 어떻게 대처할 것인가? 다행히 이것에 적합한 특별한 공유가 Samba에 있다. "homes" 공유가 바로 그 실행 방법이다.:




[homes]
        comment=Home directory for %S
        path=/home/%u
        valid users = %u administrator
        force user=%u
        writeable = yes
        browseable = no

이것은 "special" 공유이다. 이는 기존의 공유와는 다르다. Samba는 특별한 식별자 "[homes]"를 알아보고 이 공유를 다르게 취급한다.

이 공유에서 처음 발견되는 것 중 하나가 "browseable=no" 매개변수 이다. 이 별개의 옵션으로 네트워크 환경에서 공유가 보이지 않게 된다. 따라서 볼 수 있는 공유들을 탐색하는 사용자들이 그 공유를 보지 못하도록 단념시킨다. 하지만 여기에서 왜 이 옵션을 사용하는가?

대답은 약간 난해하다. "homes" 공유는 "homes"를 생성한다. 그러나 이 공유는 아무 쓸모가 없다. 아무것도 실행하지 않기 때문에, 숨기려고 한다. "homes" 공유가 주는 영향은 매우 크다. 이 공유는 Samba가 각각의 사용자를 위한 홈 디렉토리를 아무도 모르게 자동으로 생성하도록 한다. 예를 들어, "drobbins" 공유가 smb.conf 파일에 정의되지 않았고, NT 사용자 "drobbins"로 네트워크 컴퓨터를 검색했다고 해보자. "drobbins"라는 공유를 발견할 것인데, 이것은 본래의 "drobbins" 공유와 동일하게 작동한다. NT 사용자 "jimmy"로 Samba에 액세스할 경우, 완전하게 설정된 "jimmy" 공유를 발견할 것이다. 이것이 바로 homes의 매력이다. 하나의 특별한 공유를 추가함으로 모든 홈 공유가 생성된다.

그것은 어떻게 실행될까? "homes" 공유가 준비되면, Samba는 어느 NT 사용자가 Samba에 접속하고 있는지 추적할 것이다. 그리고 Samba는 이 개별 사용자를 위하여 마련되는 홈 공유를 생성한다. 이 공유는 네트워크 컴퓨터에 마치 정상적이고 비활동적인 공유인 것처럼 보인다. NT 사용자는 이 별개의 공유가 남몰래 생성되었다고 생각하지 않을 것이다. 각각의 옵션이 무엇을 하는지 보자:

주석(comment) 매개변수는 와일드카드 %S를 사용하는데, 실제 공유명에 확장된다. "drobbins" 공유는 "Home directory for drobbins" 주석을, "jimmy" 공유는 "Home directory for jimmy" 주석을 가지게 된다. 경로(path) 매개변수 또한 와일드 카드 %u를 포함한다. %u는 공유에 접속하는 사용자명에 확장된다. 위의 공유의 경우 %u는 %S와 같으므로, path=/home/%S를 대신 사용할 수 있다. 이 옵션으로 Samba는 활동적으로 공유를 디스크의 정확한 위치에 배치한다.

다시, "valid user=" 행에 매크로를 사용하여 공유 소유자와 관리자만 접속이 허용된다. "force user" 또한 매크로를 사용함으로 모든 파일 접속이 단일 계정에 의하여 수행될 것이다. 그리고 물론 인증된 사용자에 대하여 그 공유에 쓰기가 가능하도록 한다. "browseable=no" 매개변수를 사용하는 동안 활동적으로 생성된 공유는 생성되었을 때 탐색이 가능하다. 이 옵션은 비활동적인 "homes" 공유를 다시 숨긴다.

공유 매개 변수
공유를 생성할 때 사용하는 편리한 기법 두 개를 보았다. 이 섹션에서는 공유 단위로 Samba의 기능을 커스터마이징(customizing)할 수 있는 몇 가지 인기 있는 옵션들을 다룬다. 공유와 관련된 모든 옵션들은 또한 모든 공유들에 대한 디폴트 값으로 세팅하기 위하여 [globals] 섹션에 사용할 수 있다.

comment=

comment= 매개변수는 Samba가 Windows에서 보다 전문적인 것처럼 표현하기에 매우 유용한 옵션이다. 이 매개변수로 특정 공유에 해당하는 주석을 지정할 수 있는데, 그 공유의 내용을 기술할 수 있다. 주석을 지정할 때 (특히 "homes"를 사용할 때), 공유명으로 확장되는 %S 매크로를 자주 사용한다.

path=

path= 는 가장 기본적인 Samba 공유 매개변수 중의 하나이다. 이것으로 익스포트(export) 되는 디렉토리의 경로를 지정한다. 디폴트로 이 디렉토리 트리에 어떤 심볼릭 링크가 뒤따를 수 있으니 주의하라. 사용자가 디렉토리 트리를 "jump out"하는 것이 가능하기 때문이다. 심링크(symlinks)라는 어떠한 표시도 Windows 측에 나타나지 않는다. 단지 일반 파일이나 디렉토리로 나타날 것이다. Samba를 보다 안전하게 하기 위하여 변경할 수 있는 몇 개의 매개변수를 살펴본다.

force user=

force user= 는 선호하는 매개변수 중 하나다. 모든 파일 수정이 단일 사용자 계정에 의하여 수행되도록 한다. 종종 이것과 더불어 valid users= 옵션을 사용하여, 접속을 선택된 사용자에게 한정하고 싶을 것이다. 모든 파일 조작은 단일 사용자 계정으로 실행되므로, force users= 의 부작용 중의 하나는 누가 무엇을 했는지 알기 위하여 UNIX 파일 권한을 살펴볼 수 없다는 것이다. 그러므로 쓰기가 가능한 공유에서 force users= 옵션은 적합한 보안 디폴트를 수반해야 한다. 이 옵션이 없다면, 모든 파일 조작이 공유에 접속중인 Samba 사용자에 의하여 수행될 것이다.

force user 예제


        force user=drobbins

browseable=

사용자의 보안 향상을 위한 한가지 간단한 방법은 특정 공유를 숨기는 것이다. 공유는 디폴트로 '네트워크 환경'에서 찾아볼 수 있다. 공유가 나타나지 않으면, 원치 않는 해킹 시도를 막을 수 있다. 그러나 보안의 수단으로만 사용되어서는 안 된다. 공유가 검색 리스트에 없다고 해서 Windows에서 접속이 방지되는 것은 아니다. 이 방법은 악의적인 사용자에게 제공하고 있을지도 모를 정보의 양을 감소시킬 뿐이다. 숨겨진 공유에 접속하려면 그 공유의 UNC(Universal Naming Convention) 이름을 Run… 대화상자에 입력한다. 예를 들어, 'test'라는 myserver에 숨겨진 공유는 Windows에서 \\myserver\test를 입력하여 접속할 수 있다.

browseable 예제


        browseable=no

available=

디폴트가 'yes'인 available= 옵션은 공유에 주석을 달거나 smb.conf 파일에서 공유를 완전히 삭제하지 않고도 공유를 불가능하게 하는 아주 편리한 방법이다. available=no 는 Samba의 재시동 후 비활성적인 공유를 생성한다.

available 예제


	available=no

valid users=

어떤 공유의 접속을 제한하기 위하여 valid users= 옵션을 확실히 이용한다. 디폴트에 의하여, 인증된 사용자는 Samba 공유 접속이 허용될 것이다. 사용자는 그룹의 이름에 "@"를 더하여 유효한 NIS(Network Info System)그룹 또는 UNIX 그룹을 참조할 수 있다.

valid users 예제

drobbins와 wheel 그룹의 회원에게 공유의 접속을 허용한다: 
valid users = drobbins @wheel

dont descend=

dont descend= 는 공유에서 Samba가 액세스하지 못하게 할 디렉토리를 지정한다. 이 옵션은 Samba가 재귀적인 심볼릭 링크를 포함하는 디렉토리에 접근하는 것을 방지하거나, /proc 와 /dev 같은 관련 없는 디렉토리에 접근하는 것을 제한하는데 도움이 될 수 있다. 사용자의 dont descend 세팅이 실행되고 있는지 확인하기 위하여 확실히 시험해보라. 예를 들어, "dont descend= /dev"를 "dont descend= ./dev"로 전환할 필요가 있다.

follow symlinks=

follow symlinks= 옵션은 보통 디폴트로 'yes'이며, Samba가 익스포트된 디렉토리나 파일로 재지향(redirection)될 지라도 무조건 심볼릭 링크를 따르도록 한다. follow symlinks 를 'no'로 하면, 이 기능은 꺼지고 심볼릭 링크를 따르는 것이 방지된다. follow symlinks를 끄는 것은 잠재적인 보안구멍(security hole)을 제거하며, 심볼릭 링크가 불필요하거나 요구되지 않을 때에는 항상 이 기능을 꺼야 한다.

follow symlinks 예제


        follow symlinks=no

volume=

volume= 옵션은 Samba가 특정 공유의 "volume name"을 연결시키도록 한다. 이 옵션은 CD-ROM의 내용을 익스포트하기 위하여 Samba 공유를 사용할 때 특히 유용하다. 많은 설치 프로그램은 volume name이 없으면 실행되지 않으므로 CD에서 정확한 volume name을 원할 것이다.

volume 예제


        volume=My Favorite CD

create mask=

Samba는 새로이 생성된 파일에 적합한 권한 설정을 위하여 create mask를 사용한다. create mask는 새로이 생성된 파일이 수용할 권한을 정의한다. 제공된 8진수는 이진 "and" 연산을 사용하여 원하는 권한을 만든다. 마스크에 있지 않은 권한은 새로운 파일 권한에서 누락된다.

create mask 예제


        create mask= 0755

directory mask=

directory mask= 옵션은 create mask= 옵션과 비슷하다. 새로운 디렉토리에 허용되는 권한을 정의하는 8진수를 사용한다.

smb.conf 의 여러 옵션들
이 섹션에서는 유용하고 안전한 Samba 시스템 설정에 있어 가장 필수적인 smb.conf 옵션들만 다룬다. Samba는 그 자체에 사용자가 유익함을 느낄 수 있는 여러 부가적인 설정 옵션들을 가지고 있다. 이러한 옵션들이 상세하게 설명된 smb.conf 파일의 메인 페이지를 참고하라.(참고자료 참조)

Samba의 프린트
Samba의 프린터 공유는 편리하고 잘 실행된다. Samba는 사용자가 현재의 lpd 기반의 프린터를 익스포트하여, Windows 클라이언트가 연결하여 프린트할 수 있도록 해준다. 여기에서 놀라운 점은 모든 프린터 고유의 코드가 Windows 측에서 생성된다는 것이다. 즉 사용자의 UNIX 시스템이 개별 프린터에 대하여 지원하지 않아도 되는 것을 의미한다. 사용자의 UNIX 시스템이 원상태 그대로의 데이터를 프린터에 덤프할 수 있는 한, 아무 문제없이 작동할 것이다. 사용자는 UNIX 환경에서 기능을 발휘하지 못하는 Adobe PrintGear 기본 NEC SuperScript 870 같은 프린터를 공유할 수 있다.

Samba의 프린트 작동방법
프린트가 실행되려면, 먼저 lpd 실행이 필요하다. pd 설정에 관한 것은 이 글의 범위를 벗어나지만, 그다지 어렵지 않으며 linuxdoc.org에서 볼 수 있는 Printing FAQ에 자세히 설명되어 있다. (참고자료 참조). 사용자의 프린터가 "raw" 모드에 설정되었는지 확인하기 위하여 쉽게 lpd를 테스트할 수 있다. Windows 측에서는, FILE: 에 프린트할 수 있는 개별 프린터를 위한 프린터 드라이버를 설치한다. 사용자가 선호하는 Windows 워드프로세서로부터 한 페이지를 프린트하고 그것을 파일에 저장한다. 그리고 UNIX 머신에 그 파일을 복사하고 lpr 을 사용하여 프린트한다. 정확한 프린트를 얻었다면, 프린터를 자동으로 사용하도록 Samba의 설정이 완료된 것이다.

Samba print globals
Samba가 Linux 시스템에서 프린트를 정확히 수행하기 위하여, 사용자는 다음의 매개변수를 [global] 섹션에 추가한다. :




       printcap name=/etc/printcap
       printing=bsd

사용자의 printcap 파일이 다른 곳에 있다면, printcap name= 매개변수를 그에 따라 조정하라. 표준 BSD lpd 가 아닌 다른 프린트 시스템을 사용한다면, smb.conf 파일의 메인 페이지로 가서 printing= 옵션으로 정보를 검토한다.

이제 프린터 공유를 시도해 보자. 저자의 smb.conf 파일에서 프린터에 관한 내용을 모델로 사용하겠다.:




[nec]
        #my NEC SuperScript 870
        path=/var/spool/smb
        print command=/usr/bin/lpr %s
        lprm command=/usr/bin/lprm -P%p %j
        printer=lp
        public=yes
        printable=yes

먼저 경로(path)의 매개변수를 이해하는 것이 중요하다. Samba가 Windows에서 프린트 작업을 받으면, Samba는 lpr 을 사용하여 그 작업을 제출하기 전에 디스크에 저장할 필요가 있다. path= 매개변수에 의하여 참조되는 디렉토리는 모든 사용자가 작성할 수 있도록 UNIX 권한 1777을 제공받아야 한다. print command= 와 lprm command= 행은 항상 필요한 것은 아니다. 사용자의 프린트 명령에 정확한 경로를 지정하거나 어떤 command-line 매개변수를 lpr에 넘겨주어야 할 필요가 있다면, 이 행들을 포함시킨다. 위의 매크로를 예로서 사용하라. %s 는 임시 파일명에, %p 는 프린터 명에, 그리고 %j 는 작업번호에 각각 확장된다.

printer= 옵션은 추측하듯이 Samba가 어느 UNIX 프린터에서 인쇄해야 하는지 알려준다. 이 프린터가 'raw' 모드로 설정되었는지 반드시 확인하라. public=yes는 패스워드가 없는 사용자라도 이 프린터에 연결을 허용한다. 보안을 철저히 하려면 후에 이 옵션을 제거한다(현실에 맞는 철저한 보안을 위해 사용자는 이 옵션 대신 valid user= 옵션을 사용할 것이다). printable=yes는 이 공유가 프린터공유로서 설정되어 있고 프린트 작업을 위한 접근을 허락한다는 의미를 가진다.

Samba를 재시동한 후, 사용자는 Windows에서 새로운 프린터를 볼 수 있어야 한다. 이 시점에서 사용자는 이 프린터를 Windows 쪽에 설치하여, 사용자의 새로운 공유 리소스에 테스트 페이지를 인쇄해본다. (Windows는 사용자가 NULL 프린터에 드라이버를 설치하려 한다는 메시지를 보여 줄 것이다. 걱정할 필요 없다. 리스트에서 맞는 프린터 드라이버를 선택하면 된다.) 어떤 이유로 프린트가 실행되지 않는다면, /var/log/log.smb 파일의 에러메시지를 반드시 검사한다. 지금까지 주로 사용되는 것들만 다루었는데, 모든 옵션들에 익숙해지려면 smb.conf 파일의 메인 페이지를 반드시 확인해 보라.

결론
이 글에서 저자는 홈 디렉토리와 프린트의 공유를 포함하여 Samba 기능의 핵심적인 요소들을 언급하였다. 또한 몇 가지 보안 관련 매개변수에 초점을 맞추었지만 이것은 Samba의 일부분이다. Samba는 매우 강력할 뿐만 아니라 다양한 구성까지 가능하다. Samba는 네트워크 관리자인 사용자가 어떻게 그리고 어느 범위까지 사용할 지를 결정할 수 있도록 설계되었다. sbm.conf 파일 구성의 대부분이 Samba 설정과 관련되지만, 사용자가 원하는 방식대로 모든 것이 실행되므로 그 결과는 그만한 가치가 충분히 있다.

Samba는 여기서 다루지 않은 추가 기능을 가지고 있는데, 예를 들어 전체 Windows NT 영역의 부분이 되거나 통제까지 할 수 있는 능력 등이 그것이다. 이 막강한 도구의 잠재톏tmon.html">KNetmon : Printing FAQ 참조

필자소개
Daniel Robbins는 Gentoo Technologies, Inc.의 회장/CEO이고, Gentoo Project의 핵심 설계자이며, Caldera OpenLinux Unleashed, SuSE Linux Unleashed, Samba Unleashed의 저자이다

댓글