2000-11-03 改定

Sambaサーバの紹介


 ・WindowsNTは標準機能として、Windowsファイル共有とプリンタ共有機能を搭載しています。この機能を使うことでクライアントマシンはネットワーク越しにWindowsNTに接続されたプリンタを利用したり、NT上のディスクを利用することが簡単に行えるようになっています。
この機能は素晴らしい(ネットワークを身近なものにしたという意味で..)ものだと思いますが利用するには、WindowsNT Serverでは接続されるクライアントマシン分のライセンスが必要です。またWindowsNT Warkstationではクライアントのライセンスは不要ですが、最大で10台のマシンしか接続できません。

Sambaは、UNIX上にこのWindowsファイル共有とプリンタ共有の機能を実現するためのソフトです。ソフトウェアはGPLによるフリーソフトなので、このソフトを利用するために特別なライセンスは必要ありません。つまり、LinuxやFreeBSD上でSambaを動かせば完全にフリーなライセンスでこれらの機能が利用可能になります。
1.Sambaの入手先
2.Bindのコンパイル
2-a.パッケージのインストール
3.Sambaの設定
4.関連情報

1.Sambaの入手先

Sambaは一般的なLinuxやFreeBSDではパッケージされていますが、最新のものを使いたい場合やセキュリティに問題あるバージョンしかパッケージにない場合には最新のSambaを以下のサイトから求めることが可能です。

ソースファイル
 ・ Samba公式サイト : http://www.samba.org/
 ・ 日本Sambaユーザ会 : http://www.samba.gr.jp/ (日本語対応Samba)
ただし、FreeBSDではパッチを当てないとコンパイル時にエラーになるようなので、portsパッケージの利用をお勧めします。また、「日本Sambaユーザ会」からは日本語対応Sambaの入手が可能ですので、日本語環境で利用するならこちらを利用すると良いでしょう。
パッケージ
対応OS 説  明
FreeBSD FreeBSDの日本語サイトのportsパッケージ の中にあります。例えばsamba-2.0.7はja-samba-2.0.7.xxとして登録されています。またここ以外の色々なミラーサイトにも登録されているので最寄のところから入手すると良いでしょう。
TurboLinux TurboLinuxの公式サイトにあります。日本語ページはこちら。(日本語対応)
RedHat Linux RedHatの公式サイトにあります。日本語ページはこちら。(日本語対応)


ソースファイルからコンパイルする場合には、入手したソースを解凍後、sourceディレクトリに移動して、
# ./configure --sysconfdir=/etc/samba --libdir=/etc/samba --with-fhs --with-privatedir=/etc/samba --with-lockdir=/var/cache/samba --with-piddir=/var/run --with-swatdir=/usr/share/swat --with-codepagedir=/usr/share/samba/codepages --with-automount --with-smbmount --with-pam --with-pam_smbpass --with-quotas --without-smbwrapper --with-msdfs --with-utmp --with-i18n-swat
# make; make install

を実行。
この後、/etc/pam.d/sambaというファイルを以下の内容で作成。
auth required /lib/security/pam_pwdb.so nullok
account required /lib/security/pam_pwdb.so
session required /lib/security/pam_pwdb.so
password required /lib/security/pam_pwdb.so # shadow md5 nullok audit

更に、起動スクリプトとしてLinuxの場合には、/etc/rc.d/iinit.d/smbを以下の内容で作成。

#!/bin/sh
#
# chkconfig: 345 91 35
# description: Starts and stops the Samba smbd and nmbd daemons \
#              used to provide SMB network services.
#
# pidfile: /var/run/smbd.pid
# pidfile: /var/run/nmbd.pid
# config:  /etc/samba/smb.conf


# Source function library.
if [ -f /etc/init.d/functions ] ; then
  . /etc/init.d/functions
elif [ -f /etc/rc.d/init.d/functions ] ; then
  . /etc/rc.d/init.d/functions
else
  exit 0
fi

# Avoid using root's TMPDIR
unset TMPDIR

# Source networking configuration.
. /etc/sysconfig/network

if [ -f /etc/sysconfig/samba ]; then
   . /etc/sysconfig/samba
fi

# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0

# Check that smb.conf exists.
[ -f /etc/samba/smb.conf ] || exit 0

RETVAL=0


start() {
        KIND="SMB"
        echo -n $"Starting $KIND services: "
        daemon smbd $SMBDOPTIONS
        RETVAL=$?
        echo
        KIND="NMB"
        echo -n $"Starting $KIND services: "
        daemon nmbd $NMBDOPTIONS
        RETVAL2=$?
        echo
        [ $RETVAL -eq 0 -a $RETVAL2 -eq 0 ] && touch /var/lock/subsys/smb || \
           RETVAL=1
        return $RETVAL
}

stop() {
        KIND="SMB"
        echo -n $"Shutting down $KIND services: "
        killproc smbd
        RETVAL=$?
        echo
        KIND="NMB"
        echo -n $"Shutting down $KIND services: "
        killproc nmbd
        RETVAL2=$?
        [ $RETVAL -eq 0 -a $RETVAL2 -eq 0 ] && rm -f /var/lock/subsys/smb
        echo ""
        return $RETVAL
}

restart() {
        stop
        start
}

reload() {
        echo -n $"Reloading smb.conf file: "
        killproc smbd -HUP
        RETVAL=$?
        echo
        return $RETVAL
}

rhstatus() {
        status smbd
        status nmbd
}

case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  restart)
        restart
        ;;
  reload)
        reload
        ;;
  status)
        rhstatus
        ;;
  condrestart)
        [ -f /var/lock/subsys/smb ] && restart || :
        ;;
  *)
        echo $"Usage: $0 {start|stop|restart|reload|status|condrestart}"
        exit 1
esac

exit $?

またswatが利用できるようにするため/etc/xinetd.d/swatを以下の内容で作成する。

# default: off
# description: The Swat.samba GUI tool.
service swat
{
        disable = no
        socket_type             = stream
        wait                    = no
        user                    = root
        server                  = /usr/local/samba/bin/swat
        only_from       = 127.0.0.1 192.168.1.0/24
}
上記のうち、only_fromの部分は自分の環境に合わせて設定してください。

/etc/rc.d/init.d/xinetd restart
を実行する。

環境設定ファイルののテンプレートとして、
# cp packaging/SambaJP/smb.conf /etc/samba

2.Sambaのコンパイル(必要に応じて)


 #
make install
で所定の場所にコンパイルした内容がインストールされます。なお、このようにコンパイルしてインストールを行った場合、プログラム本体や設定ファイルの格納ディレクトリはパッケージで格納される場所と違う場合がありますので注意してください。

2-a.パッケージのインストール

PortsやRPMのパッケージを入手した場合にはこれらをインストールするには以下の手順になります。また、日本語化されたパッケージをインストールすれば、SWATを使ったGUIでのSambaの設定が可能になります。
(FreeBSDの場合)
# pkg_add ja-samba-2.0.7.xx
# cp /usr/local/etc/smb.conf.default /usr/local/etc/smb.conf
# /usr/local/etc/rc.d/samba.sh.sample /usr/local/etc/rc.d/samba.sh

/etc/servicesファイルを開き、以下の行を追加します。
swat 901/tcp

/etc/inetd.confファイルを開き、以下の行を追加します。
swat stream tcp nowait.400 root /usr/local/sbin/swat swat

パスワードファイルを使ってsmbpasswdファイルを作成します。
# /usr/local/bin/make_smbpasswd < /etc/passwd > \
/usr/local/private/smbpasswd

# chmod 0600 /usr/local/private/smbpasswd

これでリブートするか「inetd」を再起動すればSWATが起動するようになります。「inetd」を再起動する場合は、"ps ax | grep inetd"でinetdのプロセス番号を調べて、"kill -HUP プロセス番号" とすることで再起動します。

3.Sambaの設定

3-1.関連ファイルの場所

ファイル名 FreeBSD TurboLinux
dmb.conf /usr/local/etc/
(smb.conf.defaultをコピー)
/etc
mksmbpasswd.sh
(make_smbpasswd)
/usr/local/bin /usr/bin
smbd, nmbd, swat /usr/local/sbin /usr/bin


4.関連情報(Link)