레이블이 samba인 게시물을 표시합니다. 모든 게시물 표시
레이블이 samba인 게시물을 표시합니다. 모든 게시물 표시

2012-09-11

FreeBSD]FreeBSD와 윈도우의 공존하기-최준호님 강좌.


윈도우와 공존하기

최준호, Korea FreeBSD Users Group <cjh at kr.FreeBSD.org>


--------------------------------------------------------------------------------

이번달에는 FreeBSD와 윈도우를 같은 랜 환경에서 사용할때 일어날 수 있는 여러가지 상황에 대해서 알아보도록 하자. FreeBSD를 혼자 운영하는 경우가 아니라면 어느정도는 윈도우 시스템과 마주칠 일이 많을 것이므로, 윈도우와 연결하는 법에 대해서 알아두는 편이 좋을 것이다.



FreeBSD와 윈도우

인터넷 자체가 서로 다른 시스템을 연동하기 위해 만들어진 규격에 의해 동작하는 네트워크이지만, 작은 사무실 규모의 LAN 환경에서도 여러가지 서로 다른 플랫폼이 혼재하는 경우가 많다. 최근에는 집에서도 PC 여러대를 공유하는 가정도 늘고 있으므로 이러한 이기종간의 데이터 연결에 대한 요구는 상당히 높다고 할 수 있는데, 이런 경우 존재할 수 있는 플랫폼이라고 한다면 대부분 유닉스 계열(*BSD, 리눅스, 다른 유닉스)과 윈도우(윈도우 95, 98, ME, NT, 2000, XP), 매킨토시(Mac OS 9/X)를 들 수 있을 것이다. 이중 FreeBSD와 윈도우 간의 연결에 대해서 알아보기로 하자. FreeBSD는 다른 유닉스 운영체제 이외에도 윈도우, 매킨토시 등 여러 서로 다른 플랫폼간의 연결을 도와줄 수 있는 많은 프로그램을 사용할 수 있다.

대표적으로 다음의 프로그램을 들 수 있다.


samba (SMB/CIFS 프로토콜 서버)
netatalk, cap (AppleTalk 프로토콜 서버)
smbfs, sharity-light (SMB/CIFS 파일시스템 마운트용)

이러한 시스템의 사용에 있어서 주 관심사는 원격 파일 시스템 공유이지만, 사용자 인증이나 프린터 사용등도 제공하고 있다. 이중 대표적으로 사용할 수 있는 몇몇 어플리케이션에 대해서 알아보자.




윈도우에서 FreeBSD에 접근하기

samba (net/samba*)

리눅스나 유닉스를 조금 사용해 본 사용자라면 윈도우와의 연결에 있어서 samba를 가장 먼저 떠올릴 사람이 많을 것이다. samba는 기술적으로는 SMB/CIFS 서버로 부를 수 있는데, 이는 윈도우 네트워크를 연결하는 프로토콜의 이름이다. 파일 공유나 프린터 공유, 그리고 인증에 대한 내용인데, 원래는 SMB(Server Message Block)이라는 이름으로 부르는 것이지만 이를 확장하여 네트워크 표준으로 만들고자 마이크로소프트가 IETF에 제출할 때에는 CIFS(Common Internet File System)으로 바뀌었다. 하지만 내용은 거의 동일하다. 또한 samba는 윈도우와 유닉스의 사용자를 이을 수 있도록 하는 여러가지 인증 메카니즘을 제공할 수 있다.

설치 방법은 보통의 ports 설치를 생각하면 된다. samba 관련 포트는 세가지가 있다.


net/samba  samba 안정 버전. 현재는 samba 2.2.x 버전의 포트

net/samba-devel  samba 개발 버전. 현재는 3.0 베타 버전의 포트

net/samba-tng samba TNG. samba TNG는 2000년 후반에 samba에서 갈라져 나온(code forking) 한 갈래이다.
TNG는 현재 samba에서 제공하지 못하는 주 도메인 콘트롤러 기능을 제공하는 것을 목표로 하고 있다.

http://www.samba-tng.org

japanese/samba, japanese/samba20

samba 2.2와 samba 2.0의 일본어화 버전. 우리가 사용할 일은 거의 없겠지만, 이 버전은 samba 배포본에 일본어 처리 기능을 더 제공하고, 일본어화된 SWAT를 제공하고 있다. 한국에서 이런 프로젝트가 있으면 좋겠다는 생각에서 소개한다. http://www.samba.gr.jp/



samba 설치

어느 버전을 설치할지는 여러분의 자유이지만, 많이 사용하는 것은 net/samba 를 설치하면 큰 무리가 없을 것이다. 설치할 때에는 여러가지 옵션 사항에 대한 것을 물어볼 것인데, 처음에는 아무것도 선택하지 말도록 하자. 나중에 LDAP인증이나 DFS 지원 등을 포함하고 싶다면 다시 컴파일해서 설치하면 된다.

# cd /usr/ports/net/samba
# make install clean

samba를 설치한 후에는 이 서버를 어떻게 띄울지를 정해야 한다. 이 방법에는 두가지가 있는데, smbd/nmbd를 대몬으로 띄우는 방법과 inetd를 통하는 방법이다. 아래 두 방법 중 하나만 사용하기를 바란다.

samba에는 두가지 서비스 대몬을 기본적으로 띄우게 되는데, 하나는 파일 서비스를 담당하는 smbd이며, 브라우징이나 네임 리졸빙을 담당하는 nmbd를 사용한다.


smbd/nmbd를 대몬으로 띄우기

이 방법을 사용하기 위해서는 보통의 포트를 통해 설치하는 대몬 서비스와 같이 /usr/local/etc/rc.d/ 의 기동 스크립트를 사용하도록 한다.


# cd /usr/local/etc/rc.d
# cp samba.sh.sample samba.sh

그리고 설정 파일은 /usr/local/etc/smb.conf에 있으므로 이 파일을 적절히 수정하도록 한다. 수정한 후에 smbd/nmbd를 띄우기 위해서는 다음과 같이 한다. 물론 시스템을 다시 부팅하면 자동으로 실행된다.


# sh /usr/local/etc/rc.d/samba.sh start

정지하기 위해서는 stop 인수를 주면 된다.


inetd를 이용하는 방법

inetd에서 띄우기 위해서는 다음과 같이 한다. 기본적인 samba를 위한 엔트리는 /etc/inetd.conf에 존재하므로 이 부분의 주석을 풀어주면 된다. /etc/inetd.conf의 끝부분을 살펴보도록 하자.





--------------------------------------------------------------------------------
#
# Enable the following two entries to enable samba startup from inetd
# (from the Samba documentation).  Enable the third entry to enable the swat
# samba configuration tool.
#
netbios-ssn stream tcp nowait          root    /usr/local/sbin/smbd    smbd
netbios-ns dgram udp   wait            root    /usr/local/sbin/nmbd    nmbd
#swat   stream  tcp     nowait/400      root    /usr/local/sbin/swat    swat
--------------------------------------------------------------------------------

서비스를 이용하기 위해서는 netbios-ssn과 netbios-ns의 두 서비스 항목의 주석을 위와 같이 풀어 주고 inetd를 재시작하도록 한다. inetd를 띄워놓지 않은 경우라면 inetd도 띄워두도록 해야 하고, 접근 제한을 하기위해서 /etc/hosts.allow에 적당한 접근 제한이 되어 있는지 살펴보도록 하자. swat 항목에 대해서는 아래에 설명하기로 한다.



SWAT

SWAT는 Samba Web Administration Tool의 약자로, samba를 웹에서 관리할 수 있도록 하는 도구이다.

여기에서는 samba 관련 문서도 읽어볼 수 있으므로 관리에 많은 도움이 되지만 영문 버전만 제공되는 것이 약점이라고 할 수 있다. 이 부분에서 한글 정보를 제공하는데 관심이 있는 사용자들은 japanese/samba 에 들어있는 번역 프레임워크를 사용해서 한국어 SWAT를 제공할 수 있도록 해 보면 좋을 것이다.

swat는 기본적으로 사용할 수 없게 되어 있으므로 이를 사용하기 위해서는 inetd를 띄우도록 해야 한다.

/etc/inetd.conf의 예제로 제공되고 있으므로 가장 아랫부분을 살펴보아서 다음과 같은 부분을 찾아 주석을 풀어주면 된다.

swat   stream  tcp     nowait/400      root    /usr/local/sbin/swat    swat


inetd를 재시작하였으면 웹 브라우저를 띄워서 다음 주소로 접속하도록 하자.

http://서버IP:901 또는 http://127.0.0.1:901

외부에서 임의로 접근하는 일을 막기 위해서는 /etc/hosts.allow에서 조절해 주기 바란다. 만약 루프백 인터페이스에서 접속만을 허가하도록 만들고 싶다면 다음과 같이 /etc/hosts.allow에 다음과 같이 적어준다.

swat: 127.0.0.1 : allow
swat: ALL : deny



SWAT 접속 화면

samba 설정

samba의 설정 파일은 /usr/local/etc/smb.conf 에서 설정할 수 있다. 이 파일은 직접 편집해도 되고 SWAT를 이용해도 된다. SWAT는 수동으로 편집한 smb.conf 도 읽어들일 수 있으므로 두 방법 모두 이용할 수 있다. 하지만 SWAT 인터페이스에서는 대부분의 선택 가능한 값을 그대로 텍스트로 적도록 되어 있어서 smb.conf 에 대한 매뉴얼 페이지나 SWAT의 도움말 화면을 잘 읽어보지 않으면 어떤 값을 주어야 하는지 알기가 힘든 경우가 있다.

기본적인 smb.conf의 설정 방법에 대해서 알아보자. 설치 직후에는 파일이 존재하지 않으므로 기본값에서 하나 복사해 온다.


# cd /usr/local/etc
# cp smb.conf.default smb.conf

다음은 smb.conf.default 에서 최소한의 부분과 약간의 예제를 간추려 번역한 부분이다.



-------------------------------------------------------------------------------



# 시스템의 기본 값을 지정한다.
[global]

# 윈도우에서는 "작업 그룹" 또는 "도메인"이라 부르는 값이다.
# 같은 LAN 내의 같은 작업 그룹이 되도록 적어주면 된다.
   workgroup = MYHOME

# 윈도우에서 네트워크 환경의 자세히 보기를 선택하면 여기 나오는 값을
# 볼 수 있다. 보통 서버에 대한 설명을 적어 준다.
   server string = My Home Server

# 접속할 수 있는 외부 IP 목록을 적는다. 127. 은 루프백 인터페이스가
# 속하고, 나머지는 접속이 가능한 LAN 주소나 외부 주소를 적으면 된다.
# 주의할 것은 samba는 TCP를 통한 접속을 허가하므로 인터넷에 연결되어
# 있다면 서브넷 외부에서도 접속할 수 있으므로, 이 부분을 주의해서
# 지정하기 바란다.
   hosts allow = 192.168.1. 192.168.2. 127.

# /etc/printcap에서 프린터 설정을 읽어들이도록 하려면 yes라 지정한다.
   load printers = yes

# samba 접속 로그 파일 이름을 지정한다. %m은 접속한 쪽의 컴퓨터
# 이름이다(정확히는 NetBIOS 이름). 아래 기본 설정으로 해 두면
# /var/log 디렉토리가 지저분해질 수 있으므로 서브디렉토리를 하나
# 만들어(/var/log/samba 와 같은 식으로) 두는 편이 좋을 것이다.
   log file = /var/log/log.%m

# 보안 모드는 user, share, server 등이 있다. 이는 공유에 대한 접근
# 보안 방식을 지정하는데, 조금 복잡하므로 SWAT나
# /usr/local/share/doc/samba/textdocs/security_level.txt 문서를
# 참고하기 바란다. 서브넷에 NT/2000 도메인 콘트롤러가 있다면 그쪽으로
# 인증을 넘길 수 있다(server). 윈도우 95/98 등에서 접근한다면
# 도메인 로그온을 하지 않는 한 share 가 적당할 것이다.
   security = user

# 윈도우 95나 NT 업데이트에 포함되어 있는 암호화된 암호 전송을
# 사용한다. 이 기능은 smbpasswd와 조합해서 사용해야 한다.
# 반대로 윈도우의 레지스트리를 조정해서 평문 암호 전송을 사용하도록
# 하는 경우도 있다. /usr/local/share/doc/samba/Registry 를 보자.
  encrypt passwords = yes

# 속도 향상을 위한 소켓 옵션을 지정할 수 있다.
   socket options = TCP_NODELAY

# 네트워크 카드가 하나 이상 있다면 여기에 사용할 주소만 적어준다.
   interfaces = 192.168.12.2/24 192.168.13.2/24

# 윈도우는 네트워크 환경 목록에 나올 컴퓨터 이름을 수집하기 위해
# 브라우징이라는 과정을 거친다. local master를 yes로 지정하면
# 이 서버를 이 네트워크의 브라우저 마스터로 지정하여 컴퓨터 목록을
# 유지하도록 한다.
   local master = no

# 현재 네트워크 안에 NT 도메인 콘트롤러가 있다면 그 서버의 이름을
# 지정한다.
;   domain controller =


# DNS 프록시는 samba가 DNS 룩업을 통해서 NetBIOS 이름을 해석할지
# 여부를 지정한다. 원래 기본값은 yes였지만 1.9.18 이후 no로 바뀌었다.
   dns proxy = no


# 코드페이지 지정은 한국어의 경우 다음과 같이 한다.
client code page=949

# smb.conf 예제를 보면 아래와 같은 행이 포함되어 있는데 선택하지 않는
# 편이 좋다. 이 부분은 net/cap과 같은 매킨토시 지원의 경우
# 파일시스템에서 한글 코드를 :XX (XX는 16진수 두자리)와 같은 방식으로
# 표현하도록 하는데, cap/netatalk와 공존할 것이 아니라면 유닉스
# 사용자에게 혼란을 주게 되므로 지정하지 않고 그냥 두는 편이 좋다.
; coding system=cap

# 각 공유를 지정하기 위해서는 [공유명] 아래에 들여쓰기로 옵션을
# 지정하도록 한다. SWAT를 통해 만들어진 공유도 동일하다.
# homes는 특수한 공유로, 접속한 윈도우 사용자의 id와 일치하는(별도의
# 맵을 사용하지 않는 한) 로컬 서버의 홈 디렉토리를 네트워크 환경의
# 공유에 나타내도록 한다. 즉 접속하는 사람마다 나타나는 값이 다르게
# 된다.
# 윈도우와 FreeBSD에서 동일한 id를 사용하는 경우에 자신의 홈
# 디렉토리에 접근하기 위해 편리하게 사용할 수 있다. 만약 다른 경우라면
# username map이라는 파일을 만들어서 다른 id로 바꾸어 줄 수 있다.
[homes]
   comment = Home Directories
   browseable = no
   writeable = yes

# printers 공유도 특수한 것으로 프린터를 지정한다. 프린터는 실제
# 파일 공유와 유사하지만 파이프의 형식을 갖고 있다. 다른 공유 이름으로
# 프린터를 만들 수 있는데 이 경우에는 printable = yes 를 지정한다.
# smv.conf.default의 다른 예를 살펴 보자.
# 윈도우에서 프린터 공유를 열게 되면 /etc/printcap에 지정된
# 프린터 이름들이 자동으로 나열된다. 이 방식은 윈도95/98에서 사용하는
# 방식으로, 2000 이후에서 사용하는 또 다른 방식 [print$]가 있다.
# 그 방법을 사용하면 프린터 드라이버의 자동 설치 등이 가능하지만
# 여기에서는 다루지 않겠다.
[printers]
   comment = All Printers
   path = /var/spool/samba
   browseable = no

# 아래 행 대신 public = yes 를 추가하면 익명으로 출력이 가능하다
   guest ok = no
   writeable = no
   printable = yes

# 모두 접근할 수 있는 공유를 만들고 싶다면 아래와 같이 한다. 디렉토리
# 권한을 적절히 수정해 주어야 할 것이다(모두 읽기/쓰기, sticky 등)
[public]
   comment = Temporary file space
   path = /home/public
   read only = no
   public = yes

# 아래의 예는 mary와 fred 사용자만이 사용할 수 있는 공유의 예이다.
# 접근 가능한 사용자를 valid users에 기술하고, public = no 로 지정되어
# 있는 점을 살펴보자.
# create mask는 shell의 umask와 동일한 역할을 한다. 이런 경우 mary가
# 만든 파일을 fred가 지울 수 없도록 디렉토리에 sticky 비트를 추가해
# 주면 좋다.
;[myshare]
;   comment = Marys and Freds stuff
;   path = /usr/somewhere/shared
;   valid users = mary fred
;   public = no
;   writeable = yes
;   printable = no
;   create mask = 0765

--------------------------------------------------------------------------------
smb.conf의 지정이 되었으면 testparm 명령으로 설정이 맞는지 검사해 볼 수 있다. 이후 서버를 띄우고(SWAT의 Status 메뉴를 이용해도 각 서버를 바로 실행할 수 있다) 윈도우에서 접근해 보도록 하자.

여기에서는 nemesis 라는 서버가 FreeBSD samba 서버이다. 클라이언트가 윈도우 98이고 NT 로그온 상태가 아니어서 security = share로 하고 있다. 또한 사용자 로그인을 가능하게 하기 위해 다음 명령을 실행하여 윈도우 사용자를 생성해 주었다.

# smbpasswd -a cjh
New SMB password: 암호
Retype new SMB password: 암호
Added user cjh.

이렇게 하면 encrypted passwords = yes도 가능하다. 또는

/usr/local/share/doc/samba/Registry/Win98_PlainPassword.reg 파일을 윈도우에서 실행하면 평문 로그인이 가능한데, 이 경우 유닉스 사용자 정보를 그대로 이용할 수 있다. smbpasswd 로 작성한 암호는 /usr/local/private/smbpasswd 에 저장이 되는데, 이 파일에는 사용자 암호가 저장되어 있는 관계로(암호화되어 있기는 하지만) /etc/master.passwd와 동일한 수준의 보안을 요하므로 관리에 주의해야 한다.


네트워크 공유로 본 모습

윈도우에서 cjh 라는 사용자로 로그온해 있었다면 nemesis에 접근할 경우 다음과 같이 보인다.


cjh 사용자로 접근한 모습


설정된 프린터 목록도 볼 수 있다. 프린터에서 오른쪽 단추를 눌러서 바로 시스템 프린터 설치도 가능하다.


프린터 공유

임시 디렉토리를 만들었다면 다음과 같이 공유에 접근이 가능하다. 파일을 만들거나 지워 보도록 하자.

public 공유

samba에는 수많은 옵션이 있다. 특히 samba의 뛰어난 기능은 사용자 관리와 각종 성능 조정 옵션, 그리고 2.2에서 추가된 기능 중 눈에 띄는 기능은 국제화 처리의 강화와 ACL, Microsoft DFS, winbindd를 통한 인증 기능의 통합 등인데, 대부분의 기능은 NT/2000 도메인에 관한 신기능이라 할 수 있다.

samba는 현재 NT 도메인에 워크스테이션으로 참여하거나 인증을 PDC(주 도메인 콘트롤러)에 넘길 수 있는 기능이 있지만, 앞서 이야기한 samba-tng는 아예 NT/2000 서버가 한대도 없는 경우에도 PDC로 동작할 수 있는 기능을 목표로 하고 있다. 사무실에 NT/2000 서버가 없어도 NT/2000 도메인 환경을 구성하고 싶다면 samba-tng를 시도해 보는 것도 좋으리라 생각한다.

이렇게 구성한 samba 가 뜬 FreeBSD 서버의 경우 사무실이나 학교 내의 파일 서버나 프린터 서버로 제격이다.



FreeBSD에서 윈도우에 접근하기

이번에는 반대의 경우를 생각해 보자. 즉 FreeBSD에서 윈도우의 공유나 프린터를 이용해야 하는 경우이다.

이 경우에도 여러가지 방법이 있겠지만, 주요 내용은 파일 공유와 프린터를 사용할 수 있는지에 대한 것이다.


samba (net/samba*)

앞서 설명하였던 samba에는 FreeBSD에서 윈도우 쪽의 접근을 도와주기 위한 여러가지 도구가 제공되고 있다. 리눅스의 경우에는 samba 배포본 안에 smbfs라는 커널 파일시스템 형태의 드라이버가 제공되고 있지만, FreeBSD에서는 동작하지 않고 대신 FreeBSD 용의 smbfs 가 따로 있다.

smbclient

smbclient는 가장 기본적인 명령행 도구이다. 공유 접근에 대한 거의 대부분의 기능을 수행할 수 있다.

smbclient는 다음의 문법을 갖는다.

   # smbclient 서비스 암호 [옵션]


옵션을 뒤에 쓰는 좀 특이한 형태이다. 보통 파일 공유에 접근하려면 공유 리소스를 나타내기 위한 윈도우식 이름을 사용하면 된다. 보통 서버공유명으로 나타내는데, 유닉스 쉘에서는 가 특수한 의미를 가지므로 두번 써야 한다.  문자 대신 /을 써도 된다. 가령 garfield 라는 윈도우의 c 라는 공유에 접근하기 위해서는 다음과 같이 사용한다.



  # smbclient garfieldc

    added interface ip=192.168.1.4 bcast=192.168.1.255 nmask=255.255.255.0
    Got a positive name query response from 192.168.1.3 ( 192.168.1.3 )
    Password:

보통은 암호를 물어볼 것인데, 공유에 지정한 암호 또는 사용자 암호를 입력하면 된다. 암호를 지정하지 않았다면 그냥 엔터를 누르면 되며, 이런 경우에는 -N 옵션을 추가하면 암호 입력 없이 접속이 가능하다(위험한 방법이기는 하다).

  smb: >

접속 후 아래와 같은 프롬프트가 나온다. 여기서는 FTP와 유사한 방법으로 사용이 가능하다. 즉 목록을 보려면 ls, 파일을 받으려면 get, 올리려면 put 명령을 이용한다.

smb: > get v3ahn.cfg
getting file v3ahn.cfg of size 7314 as v3ahn.cfg (14.1 kb/s) (average 14.1 kb/s)

smb: > put ENCRYPTION.txt
putting file ENCRYPTION.txt as ENCRYPTION.txt (111.1 kb/s) (average 111.1 kb/s)


이런식으로 파일 공유를 이용하며 된다. 간단하게 사용할 때에는 편리하다. 이 기능을 사용하여 원격 디렉토리를 tar로 묶거나 풀 수 있는 smbtar라는 명령도 제공된다. 마운트하지 않아도 되므로 윈도우 데이터를 FreeBSD 디렉토리에 백업하고자 하는 경우에 유용하다.

smbclient에는 여러가지 옵션이 있는데, -U 사용자ID 로 접속할 계정 ID를 다르게 줄 수 있고, 서버 이름이 DNS와 NetBIOS의 것이 충돌한다면 -I 서버 IP 옵션을 사용하여 실제 접속하는 호스트 IP 주소를 적어준다.



공유 목록만을 얻기 위해서는 다음과 같이 하면 된다. 다음은 nemesis 호스트(이 이름은 DNS 또는 /etc/hosts의 이름이 아니라 윈도 네트워크 상의 이름이다)의 공유 목록을 본 예이다.



% smbclient -N -L nemesis

added interface ip=192.168.1.4 bcast=192.168.1.255 nmask=255.255.255.0

Anonymous login successful

Domain=[MYHOME] OS=[Unix] Server=[Samba 2.2.5]


        Sharename      Type      Comment
        ---------      ----      -------
        public         Disk    
        IPC$           IPC       IPC Service (My Home Server)
        ADMIN$         Disk      IPC Service (My Home Server)
        remote         Printer   local line printer


        Server               Comment
        ---------            -------
        NEMESIS              My Home Server


        Workgroup            Master
        ---------            -------
        MYGROUP              GNOMANIAC
        MYHOME               NEMESIS



smbspool

smbspool는 윈도우 프린터를 사용하고자 하는 경우에 이용할 수 있다. 사전에 프린터 이름을 알고 있어야 하는데 위의 smbclient 명령을 사용하면 얻을 수 있다. 사용법은 다음과 같다.

  # smbspool [DEVICE_URI] job-id user title copies options [file]

DEVICE_URI는 같은 이름의 환경변수를 사용할 수도 있는데, 프린터의 이름을 지정한다. 아래의 예를 참고하기 바란다. test.txt라는 파일을 인쇄하기 위해서는 다음 예와 같이 하는데, 주의할 것은 smbspool과 같은 명령으로 출력하는 경우에는 윈도우의 프린터 드라이버를 거치지 않고 바로 프린터로 출력이 나가게 된다. 즉 이 프린터가 윈도우에서 사용하는 프린터 드라이버가 무엇이든, smbspool을 이용할 때에는 해당 프린터에 맞는 언어로 변환한 다음 내보내기 바란다. 특히 포스트스크립트와 같은 경우에는 ghostscript 등을 사용하여 미리 해당 프린터의 언어(PCL등)로 변환해야 한다.


  # smbspool smb://nemesis/remote 0 cjh test 1 none test.txt

사실 job, user, title, options에 해당하는 값은 거의 의미가 없으므로 아무 값이나 주어도 상관이 없다.

프린터 이름을 나타내는 DEVICE_URI와 파일 명에만 유의하자. 가장 마지막의 파일명을 생략하면 표준 입력에서 받으므로 다음과 같이 파이프를 이용한 출력에도 이용할 수 있다.

  % h2ps test.txt | smbspool smb://nemesis/remote 0 cjh test 1 none

CUPS(Common UNIX Printing System, print/cups)를 사용하면 기존 BSD lpr 이외에 윈도우 프린터에 대한 출력도 지원해 준다.



smbfs

FreeBSD 4.0 버전 이후에는 smbfs라는 커널 파일시스템으로 구현된 SMB 공유 마운트 기능을 사용할 수 있다. 기능적으로는 리눅스의 smbfs와 동일하며, 최근의 4.x 버전에는 시스템에 포함되어 있고 그 이전 버전이라면 포트(net/smbfs)를 통해 설치할 수 있다. 사용하는데에는 모듈을 로딩하면 되므로 굳이 커널을 다시 컴파일할 필요는 없지만, 커널에 다음 옵션을 주어 빌드할 수 있다.


--------------------------------------------------------------------------------

# SMB/CIFS 리퀘스터
# NETSMB는 SMB 프로토콜 지원을 사용할 수 있게 하며, LIBMCHAIN과
# LIBICONV 옵션이 필요하다.
# NETSMBCRYPTO는 암호화된 암호 전송을 지원한다.

options         NETSMB                  #SMB/CIFS requester
options         NETSMBCRYPTO            #encrypted password support for SMB

#mchain 라이브러리. KLD로 로딩하거나 커널에 포함할 수 있다.

options         LIBMCHAIN               #mbuf management library

# 커널측 iconv 라이브러리

options         LIBICONV


--------------------------------------------------------------------------------



또는 4.x의 경우 /modules/smbfs.ko 를 로딩해 두면 된다. 만약 /modules/smbfs.ko가 없다면 포트에서 net/smbfs를 설치하기 바란다. smbfs 관련 유틸리티로는 두가지가 있는데, 파일 공유를 마운트하기 위한 mount_smbfs와 smbutil이라는 간단한 유틸리티이다. 이들 프로그램은 모두 samba가 없어도 동작한다.

mount_smbfs

윈도우 파일 공유를 마운트하는 방법에 대해서 알아보자. garfieldc 를 /share에 마운트하고 싶다면 다음과 같이 한다.

아래 공유는 암호가 지정되어 있지 않은 경우이다.

  # mount_smbfs -N

마운트된 상황은 다음과 같다.

  # df -k
  ...


암호가 있는 경우라면 -N 옵션을 제외하고, 사용자 id를 같이 주어야 할 수도 있다.

  # mount_smbfs

  Password:


암호를 주어야 하거나 작업 그룹 이름을 지정해야 하는 경우라면 설정 파일에 그러한 정보를 기록해 둘 수 있다. 설정 파일에는 두가지가 있는데, 일반 사용자를 위한 ~/.nsmbrc 또는 전역 설정을 위한 /usr/local/etc/nsmb.conf 이다. 이 파일의 예제는 /usr/share/examples/smbfs/dot.nsmbrc 에서 찾을 수 있다.



--------------------------------------------------------------------------------

# 기본값 영역이다. 작업 그룹을 지정하고 있다.

[default]

workgroup=MYHOME


# NEMESIS는 윈도우 서버 이름이다.
# charsets는 [윈도우쪽 문자셋]:[FreeBSD쪽 문자셋]의 변환 규칙을 지정할
# 수 있고(iconv의 기능을 이용한다), addr는 실제 TCP/IP상의 주소를
# 나타낸다.

[NEMESIS]
charsets=euc-kr:euc-kr
addr=fserv.coolcorp.com

# NEMESIS의 CJH 사용자에 대한 설정을 나타낸다.
[NEMESIS:CJH]

# CJH 사용자의 암호를 지정한다. 여기 지정하면 mount_smbfs 시에 암호
# 입력을 생략할 수 있다. 여기 적은 암호는 smbutil crypt 명령으로
# 생성할 수 있다. smbutil에 대한 설명은 아래에서 하고 있다.

password=$$28974DECD

--------------------------------------------------------------------------------


암호를 지정해 두면 mount_smbfs 시에 암호 입력을 생략할 수 있다. 항상 마운트하고 싶다면 /etc/fstab에 다음과 같이 기록한다. 물론 사전에 nsmb.conf 등에 암호를 적어 두어야 한다.


  # smbfs


이렇게 하면 부팅시에 바로 마운트가 될 것이다.


smbutil

smbutil은 smbfs의 보조 역할을 하는 유틸리티로 몇가지 편리한 기능을 갖고 있다. 사용법은 다음과 같다.

  # smbutil 명령 [인수]

명령에는 다음과 같은 종류가 있다.

  crypt [암호]: crypt를 사용하면 nsmbrc용의 암호를 생성할 수 있다.

  # smbutil crypt mypassword
  $$16144562c293a0314e6e1

암호 "mypassword"의 암호화된 값이 출력되므로 이 값을 .nsmbrc의 password에 적어주면 된다.

물론 해당 파일은 다른 사용자가 읽거나 쓸 수 없도록 반드시 권한을 변경하기 바란다.


lc 현재 활성화되어 있는 연결을 출력해 준다.

  # smbutil lc

  SMB connections:
  VC: NEMESISCJH
  (root:wheel) 711
    Share:    PUBLIC(root:wheel) 711


현재 NEMESISCJH 공유를 root:wheel 사용자:그룹으로 접근하고 있다는 의미이다.

  login

  logout

이 명령을 통해 해당 서버 또는 공유에 로그인/로그아웃할 수 있다. 한번 로그인해 두면 로그아웃될 때까지 해당 공유/서버에 대한 명령을 암호 없이 수행할 수 있다. 프린터 접근 등에 유용하다.

lookup [-w NetBIOS 네임서버] 호스트명

호스트명에 대한 IP 주소를 돌려준다. SMB는 DNS와는 다른 네임 리졸빙 체계를 갖추고 있다고 하면 이 명령에 대한 이해가 쉬울 것이다.


  # smbutil lookup nemesis

  Got response from 192.168.1.1
  IP address of nemesis: 192.168.1.1

samba에는 동일한 일을 할 수 있는 nmblookup 이라는 명령이 있다. nmblookup의 좋은 점이라면 리버스 룩업도 가능하다는 점이다.


print

samba의 smbspool과 동일한 역할을 한다. 파일명이 -이면 표준입력에서 받는다. 암호를 지정해야 하는 경우에는 smbutil login 명령으로 미리 로그인할 수 있다. 앞서 smbspool과 동일한 예는 다음과 같이 쓸 수 있다.


  # smbutil print

view

해당 서버의 공유 목록을 보여준다. smbclient의 -L 옵션과 동일한 역할이다.

  # smbutil view

  Password:

  Share        Type       Comment
  -------------------------------
  E            disk      
  C            disk      
  IPC$         pipe       원격 프로세스간 통신

3 shares listed from 3 available


고급 주제

이번 기사에서 다루지 않은 내용 중 더 배워 볼 만한 주제는 다음과 같다. SMB와 NT 도메인 콘트롤러를 다루는 것은 생각만큼 쉽지 않다는 사실을 꼭 기억하기 바란다.


samba를 사용한 NT 도메인 관련 제어와 연동
samba에 다른 인증 시스템 사용해 보기(LDAP 등)
다른 윈도우 관련 프로그램 사용해 보기
매킨토시 등 다른 플랫폼과도 연동해 보기


끝으로

아쉽게도 이번 FreeBSD 연재를 여기서 마치게 되었다. 아직 써볼만 한 내용은 많이 남아 있지만 일단 다음 기회를 기약하는 것이 좋겠다는 생각이 든다.

진행에 힘써주신 프로그램세계 여러분들에게 감사드리며, 지금까지 연재된 기사는 필자의 홈페이지에서 언제라도 읽어볼 수 있으므로 혹시 놓친 부분이 있다면 웹에서 읽어보기 바란다.



      http://www.kr.FreeBSD.org/~cjh/freetime/os/freebsd/