Sambaで始めるWindowsファイルサーバー入門

びぎねっと入門シリーズ制作委員会 staff@Begi.net

目次 Sambaとは何か？ 準備 SWATを使ってみよう 自分のホームディレクトリに接続しよう 共有ディレクトリを作成しよう プリンタを共有しよう

はじめに

この文書は、オープンソースソフトウェアである「Samba」を利用して、簡単にWindows用のファイルサーバーを構築するための方法を説明したものです。 執筆に当たって、サーバーOSはLinuxを使っています。特にディストリビューションを特定しない記述になっております。クライアントOSはWindows Meを利用していますが、Windows 98やWindows 95、Windows NT、Windows 2000などでもほぼそのまま適用可能ですので、Windows用語については適宜読みかえてください。

●Sambaって何？

Samba(サンバ）とは、LinuxやFreeBSD、SolarisやHP-UXといったWindows以外のOSをWindows用のファイルサーバー、プリントサーバーにするソフトウェアです。Sambaを使用することにより、安価にWindowsサーバーを構築することが出来ます。

Sambaを構成するのは２つのプログラムです。 １つは、ネットワーク上での名前解決を行うプログラム（nmbd）です。 もう１つは、サーバーとクライアントの間でファイルのやり取りを行うプログラム(smbd）です。 SambaはTCP/IPを使って通信を行います。そのため、Windowsクライアント側のネットワークの設定で、WindowsネットワークをTCP/IP上で行うように設定しておく必要があります。

●準備

ほとんどのLinuxディストリビューションにはSambaが含まれています。これからLinuxをインストールするのであれば、インストールするパッケージにSambaを含めてください。

既にインストールしているマシンにSambaがインストールされているかは、ほとんどのディストリビューションにおいて、パッケージ管理ツールrpmで確認できます。以下のコマンドを入力して何か出力された場合には、既にSambaがインストールされています。

`[tmiyahar@samba tmiyahar]$ rpm -qa|grep samba samba-client-2.0.5aJP2-9 samba-common-2.0.5aJP2-9 samba-2.0.5aJP2-9`

●Webブラウザで管理、「SWAT」を使ってみよう

Sambaには、Webブラウザ経由で管理を行うことの出来るツール「SWAT(Samba Web Administration Tool)」が標準で用意されています。Sambaの起動／停止から各種設定の変更までの全てをWebブラウザ上で行うことが出来るので、Sambaの設定ファイルを直接編集するという面倒な作業をする必要がなくなります。

SWATを利用するには、Sambaが動いているサーバーのポート901番にWebブラウザでアクセスします。

`http://samba.begi.net:901/`

★もしSWATにアクセスできない時には

もしかすると、ダイアログが出てこず、SWATにアクセスできなかったかもしれません。もしその場合には、サーバーの設定を変更しなくてはいけません。サーバーマシンにrootでログインするか、telnetなどでサーバーに一般ユーザーとしてリモートログイン後にsuコマンドでスーパーユーザーとなり、まず/etc/inetd.confというファイルを編集します。ファイル中にある以下の行を探しましょう。

`#swat stream tcp nowait.400 root /usr/sbin/tcpd /usr/sbin/swat`

行の先頭にあるコメントアウト「#」がSWATを無効にしているので、この「#」を取り除いて保存します。変更を有効にするために、inetdを再起動します。

`# /etc/rc.d/initd/inet restart`

また、tcpdによってアクセス制限がかけられている可能性があります。これを修正するには/etc/hosts.allowファイルを修正する必要があります。/etc/hosts.allowファイルに次の1行を追加してください。

`swat : ALL`

もし、セキュリティを強固にしたいのであれば、ALLを管理用のクライアントマシンのIPアドレスにすることにより、そのIPアドレス以外のマシンからのアクセスを受け付けないようにすることが出来ます。

`swat : 192.168.0.10 （IPアドレスが192.168.0.10以外のマシンからはSWATにアクセスできません）`

★もしSWATにアクセスできない時には（Red Hat 7編）

「Red Hat7では、inetdの機能を強化したxinetd(http://www.xinetd.org/)に交換されているため、上記の方法ではSWATにアクセスできない」と読者の治田（はった）賢司さんからご指摘をいただきました。治田さん、情報ありがとうございました。

早速Red Hat 7を入手して調査しましたので、ここに追加しておきます。

xinetdでは、アクセス制御をサービス別に細かく行うことのできるファイルが、/etc/xinetd.d/ディレクトリに収められています。その中のswatファイルを見てみましょう。

    # default: off
    # description: SWAT is the Samba Web Admin Tool. Use swat \
    #              to configure your Samba server. To use SWAT, \
    #              connect to port 901 with your favorite web browser.
    service swat
    {
            port    = 901
            socket_type     = stream
            wait    = no
            only_from = localhost
            user    = root
            server  = /usr/sbin/swat
            log_on_failure  += USERID
            disable = yes
    }

ポイントとなるのはonly_fromとdisableです。only_fromは、inetdでのhosts.allowにあたります。ここではlocalhost、つまりxinetdが動作しているマシンのみアクセスを許可しています。only_fromは複数行記述することができるので、例えば192.168.0.10からのアクセスを許可したいのであれば、

            only_from = 192.168.0.10

の行を追加しましょう。

disableはアクセスの許可/不許可をコントロールします。disableは「不許可」ですので、もし「許可」したければ値を「no」にしなくてはいけません。

            disable = no

書き換えたファイルは以下の通りです。

    service swat
    {
            port    = 901
            socket_type     = stream
            wait    = no
            only_from = localhost
            only_from = 192.168.0.10
            user    = root
            server  = /usr/sbin/swat
            log_on_failure  += USERID
            disable = no
    }

/etc/xinetd.d/swatの修正が終わったらxinetdを再起動しましょう。 再起動は/etc/rc.d/init.d/xinetdスクリプトを使用します。

`# /etc/rc.d/init.d/xinetd restart`

再起動を確認したら、SWATにアクセスしてみてください。

日本Sambaユーザ会のFTPサイトにて日本語化されたSWATを含んだ SambaのRPMパッケージが配布されています。日本語でSWATを利用したい場合には以下のアドレスよりRPMパッケージをダウンロードしてインストールしてください。インストール方法については「RPMコマンドの使い方」を参照してください。

（本情報は日本Sambaユーザ会 代表幹事 小田切氏より提供いただきました。ありがとうございました。）

Red Hat Linux7.xJ用Sambaダウンロードサイト

Sambaの基本的な設定を変更する

SWATにアクセスしたら、まずはSambaの基本的な設定を変更しましょう。 まず「全体設定 GLOBALS」アイコンをクリックします。この画面中の「基本オプション」−「workgroup」の値を変更しましょう。この値はクライアントのWindowsマシンで設定している「ワークグループ名」と同一にします。ワークグループ名の確認はWindowsクライアントの「コントロールパネル」−「ネットワーク」で行うことが出来ます。変更したら、「設定変更」ボタンを押して設定を変更しましょう。

設定を変更しただけでは設定の変更はSambaには反映されません。今度は「動作状況 STATUS」アイコンをクリックしましょう。この画面では、smbdおよびnmbdの動作状況が確認できます。もし停止中であれば「起動」ボタンを、動作中であれば「再起動」ボタンを押すと、変更後の設定を読み込んでSambaが動き始めます。 変更後のSambaの動作を確認するために、Windowsクライアントから「マイネットワーク」−「ネットワーク全体」とダブルクリックしていき、上で設定したワークグループ名のアイコンを開いて、中にSambaサーバーの名前があれば成功です。エクスプローラーの表示を「詳細表示」にしておけば、コメントに「Samba○○」と表示されているのも確認できるでしょう。この表示については「全体設定」−「基本オプション」−「server string」で変更することができます。

●自分のホームディレクトリに接続しよう

Sambaの持っている便利な機能の一つとして、Sambaの動作しているLinux上に存在するユーザーのホームディレクトリに簡単に接続できる機能があります。ここでは、既にLinux上にユーザーtmiyaharが存在していることとして説明を行ります（ユーザーの作成についてはこちらを参照）。

まず基本的な考え方ですが、Linux上のユーザー名とWindowsネットワークのユーザー名（Windowsを起動した時に入力するユーザー名の事）は同一のものにしましょう。また、WindowsをSambaサーバーに接続させるには、Samba用のパスワードを設定しないといけませんが、このパスワードも、Windowsネットワークにログオンする際のパスワードと同一のものにしておけば、Sambaサーバーにアクセスする際にいちいちパスワードを入力しないで済みます。ですから、ユーザー名、SambaパスワードともにWindows起動時に入力するものと同じにしておくことを推奨します。

Windowsのユーザ名＝Linuxのユーザ名
Windowsのパスワード＝Sambaのパスワード

Sambaパスワードは、通常のLinuxのパスワードとは別に、/etc/smbpasswdというファイルに格納されます。つまり、Linux上にユーザーアカウントを作成するのとは別に、Sambaパスワードを設定しないといけないということです。Sambaパスワードの設定は、スーパーユーザーでsmbpasswdコマンドを実行することによって行ないます。ユーザーtmiyaharのSambaパスワードの設定は以下の通 りです。

`# smbpasswd -a tmiyahar`

この例で気をつけなくてはならないのは、次の２点。まずLinuxユーザーtmiyaharが既に存在していなくてはいけません。また、-aオプションを付け忘れないこと。aはAdd（追加）の意味で、まだ存在しないSambaユーザーtmiyaharのSambaパスワードを、/etc/smbpasswdファイルに追加するという意味になるからです。-aオプションを付けない場合は、パスワードの修正を行うという意味となり、まだ存在しないSambaユーザーのパスワードを変更しようとするため、エラーになります。

`[root@samba /root]# smbpasswd -a tmiyahar New SMB password:（Sambaパスワードを入力） Retype new SMB password:（もう1度入力） startsmbfilepwent_internal: unable to open file /etc/smbpasswd. Error was No such file or directory AAdded user tmiyahar.`

エラーが起きているように見えますが、これは/etc/smbpasswdファイルがまだ存在していないという単なる警告であり、smbpasswdコマンドが新たにファイルを作ってくれるので、心配する必要はありません。

さて、ここまで終わったら、WindowsクライアントからSambaサーバーのアイコンをダブルクリックしてみましょう。きちんと設定できていればサーバーに接続できるはずです。例えば、WindowsのパスワードとSambaのパスワードが違うなど、パスワードの設定がうまくいっていない場合には、警告ダイアログが表示されてしまいます。その時にはもう一度Linux上でsmbpasswd tmiyahar（今度は-aオプションなし）を実行し、Sambaパスワードの修正を行ってみましょう。

Sambaサーバーを表示しているウィンドウの中に、tmiyaharというフォルダが表示されているはずです。これが、Sambaサーバー上にあるユーザーtmiyaharのホームディレクトリです。Linux上では、大体が/home/tmiyaharとなります。このフォルダは基本的に他のユーザーからは見られないので、ユーザーの個人的な作業に利用できます。

●共有ディレクトリを作成しよう

次に、何人かのユーザーで共同利用のできる共有ディレクトリを作成しましょう。今回の例では、同じサーバーで動作しているWebサーバー「Apache」のHTMLファイルを簡単にWindowsから変更できるように、Apache用のディレクトリ(標準では「/home/httpd/html」）をSambaの共有ディレクトリにしたいと思います。そのための手順は次の通 りです。

Linux上でグループを作成する。
共有したいディレクトリを作成したグループの所有にする。
そのグループがそのディレクトリを読み書きできるようにする。
Sambaでそのディレクトリを共有フォルダに設定する。

順次、手順を実行していきましょう。

Linux上でグループを作成する。
グループの作成はgroupaddコマンドを使います。ここでは、webというグループを作成しています。

`# groupadd web`

共有したいディレクトリを作成したグループの所有にする。
ディレクトリのグループ所有権を変更するにはchownコマンドを使います。ここでは、/home/httpdおよび/home/httpd/htmlディレクトリのグループ所有権をwebに変更しています。

`# chown .web /home/httpd /home/httpd/html`

作成したグループがそのディレクトリを読み書きできるようにする。
ディレクトリの読み書き権限を変更するにはchmodコマンドを使います。ここでは、/home/httpdおよび/home/httpd/htmlディレクトリの読み書き権限を読み書き可能に変更しています。

`# chmod g+rw /home/httpd /home/httpd/html`

SWATで共有フォルダを作成する。
この作業はSWATで行います。
WebブラウザでSWATにアクセスし、「共有設定 SHARES」アイコンをクリックします。表示されたフォームのテキストボックスに共有名を入力します。この共有名が「Sambaサーバーに接続した際に表示されるフォルダ名」となります。共有名には日本語も使うことが出来ます（Samba日本語版のみ）。
「新規共有作成」ボタンを押すと、画面が切り替わり、今作成した共有ディレクトリの詳細を設定できる画面 となります。ここで設定するべき項目がいくつかありますので、見ていきましょう。

「基本オプション」−「path」
作成した共有ディレクトリが、Sambaサーバー上でのどのディレクトリを指すのかを指定します。今回の例では「/home/httpd/html」となります。

「セキュリティオプション」−「writeable」
この共有ディレクトリが書き込み可能かどうかを設定します。当然「Yes」に設定します。

変更を行ったら「設定変更」ボタンを押します。新しい設定はSambaを再起動することなく反映されます。
うまく出来たかどうか、WindowsクライアントからSambaサーバーのアイコンをダブルクリックして確認してみましょう。新しいフォルダが追加されていたら成功です。そのフォルダに何かファイルをコピーしてみましょう。もしうまくコピーが出来ない場合には、Sambaサーバー側でディレクトリの書き込み権限の確認を、またSWATで「セキュリティオプション」−「writeable」の設定を確認してみてください。また、すでに存在するファイルが読取専用の場合もあります。

●プリンタを共有しよう

Sambaを使えば、サーバーマシンに接続されたプリンタを、Windowsクライアントからネットワーク経由で利用することが出来ます。

手順は以下の通りです。

プリンタの接続
Linuxの設定
Sambaの再起動
Windowsクライアントでの設定

プリンタの接続
まずはプリンタをサーバーに接続しましょう。最近のプリンタはUSBでの接続のみのものが多くなっていますが、LinuxでUSBを利用可能にするのは大変なので、プリンタ購入時にはパラレル接続が可能なプリンタを選ぶことをお勧めします。

サーバーでの設定
プリンタ共有のためにSambaで特別設定を行う必要はありません。Linux上でlp(line printer)という、非常に基本的なプリンタインターフェースが使用可能にしさえすれば、Sambaでプリンタ共有ができるようになります。
lpを使用可能にするには、/etc/printcapというファイルを作成します。 その中身は以下の通 りです。

    printer:\
    	:sd=/var/spool/lpd/printer:\
    	:mx#0:\
    	:lp=/dev/lp0:

作成する上でいくつかの注意点があるので、１つずつ見ていきましょう。

1行目
この行はプリンタ名を設定しています。「printer」がSambaで表示されるプリンタ名になりますので、好きな名前を付けてください。

2行目
この行は、プリントアウトする文書データが一時的に保存(spool）されるディレクトリを設定しています。基本的に、/var/spool/lpdディレクトリの下に、1行目で設定したプリンタ名のディレクトリを作成しておくと分かりやすいでしょう。
このspoolディレクトリは自分で作成しないといけませんので、スーパーユーザーで別途以下のコマンドを実行してください。

`# mkdir /var/spool/lpd/printer`

3,4行目
おまじないだと思って、このまま入力してください。

また、2行目から4行目の行の先頭は「タブ(TAB)」です。「スペース(空白)」ではありませんので注意してください。

★印刷時に無駄な印刷がされてしまう場合
ディストリビューションによっては、印刷したい書類の前によく分からない文字と Job○○と書かれた紙が合計2枚、書類の後ろに白紙が1枚出てきてしまうかもしれません。これらを出さないようにするには、/etc/printcapに以下の2行を追加してください。

    	:sh:\
    	:sf:\

shというのがページヘッダー（最初に出る紙）、sfというのがフォームフィード（改ページ）を抑制するための命令です。

また、1、2行目とも行の先頭は「タブ(TAB)」です。「スペース(空白)」ではありませんので注意してください。

Sambaの再起動
現在動いているSambaは、プリンタの設定が変更されたことを知りませんから、再起動して知らせてあげる必要があります。SWATからSambaを再起動し、もう1度Sambaサーバーに接続してみましょう。共有フォルダ以外に、新たにネットワークプリンタのアイコンが表示されているはずです。

Windowsクライアントの設定
次はWindowsクライアントの設定です。 まずは、使用したいプリンタの機種に合わせたプリンタドライバをインストールしましょう。 最近のプリンタドライバは、いわゆるドライバディスクの形式ではなく、インストールプログラムを使用するものも出てきています。インストールプログラムを使用する形式の場合には、プリンタ付属のマニュアルの通 りインストールを行いましょう。ドライバディスクの場合には、ネットワークプリンタの設定を行う際に使うので、手元に用意しておきましょう。

次にネットワークプリンタに接続します。一番簡単なのは、先ほど確認したSambaサーバー内にあるプリンタのアイコンをダブルクリックする方法です。すると「プリンタの追加ウィザード」が起動します。もし既にドライバがインストール済みであれば、ドライバの選択で表示されるリストに入っているはずですので、それを選択しましょう。ドライバディスクがある場合には、この際にディスクを使用して必要なドライバをインストールしましょう。ウィザードが終了すれば、Windowsの「プリンタ」フォルダに、設定した新しいプリンタのアイコンが作成されているはずです。アイコンを選択し、右クリックでプロパティを開いてテスト印字をしてみましょう。きちんと設定されていれば、プリンタの印字テストが印刷されるでしょう。 無事に印刷されたら成功です。あとは印刷を行いたいアプリケーションの印刷時に、設定したネットワークプリンタを印刷先に指定すれば、アプリケーションからの印刷も可能になります。

変更履歴
2001/03/01　初版作成
2001/03/06　第二版作成