Samba を利用してファイルサーバを構築する

・ Samba に関して

Sambaは Windowsが使用している SMBプロトコルを UNIXに実装するプログラム ですが、Sambaを使用することで、Windows端末に対するファイルサーバ、 プリントサーバを構築することが出来ます。これ以外にも、最新バージョン 2.2.2 を使用することで、Windows のドメインコントローラ(PDC)、WINSサーバ、 分散ファイルシステム(DFS)のルートサーバになることも可能です。

ユーザ毎のホームディレクトリをマッピングしたり、UNIX のクウォータ機能と 組み合わせることで、ユーザ毎のファイル容量管理などきめ細かなアクセス制御を 行うことが可能です。


現在 Sambaは バージョン 2.2.3aがリリースされています。日本語の最新版は バージョン 2.2.2-ja-1.1 となっています。Samba 各種情報ならびに、ソースの ダウンロード先は

日本Sambaユーザ会 .... http://www.samba.gr.jp
ダウンロードサイト ... ftp://ftp.samba.gr.jp/pub/samba-jp/samba-2.2.2-ja/


・ インストールしてみよう

上記サイトから、samba-2.2.2-ja-1.1.tar.gz をダウンロードして、 /usr/local/src に展開します。展開後、ソースディレクトリ内の source ディレクトリに移動して処理を行います。インストールは root で行うようにします。
特に設定が必要なければ、お決まりのコースでインストールできます。

tar zxvf samba-2.2.2-ja-1.1.tar.gz
cd samba-2.2.2-ja-1.1/source
./configure
make
make install

この作業で /usr/local/samba 以下に必要ファイルがインストールされます。
/usr/local/samba/lib/smb.conf に必要な設定(後で説明)を行って、

/usr/local/samba/bin/smbd -D
/usr/local/samba/bin/nmbd -D

とすれば Sambaデーモンが起動します。 smbd が ファイル共有を行うメインのデーモンで、nmbd が NetBIOS 上での名前解決を行うためのデーモンです。


しかし、せっかく日本語版のSambaをインストールするのですから、GUI管理ツール (SWAT) を日本語で利用したいものです。また、後々発展させて 分散ファイルシステム(DFS)をサポートしたり、容量制限を行う(QUOTA)の利用を 考慮して ./configure に 以下のパラメータを与えて実行します。

./configure  --with-i18n-swat  --with-quotas  --with-msdfs

一度インストールした後で、設定を変更して再インストールする場合、 ソースディレクトリで、'make clean' を行った後に、'configure' した方が良いようです。


・ GUI 設定ツール SWAT を使う

テキストファイルを編集して設定を行うのであれば、これ以上のインストールは 必要ないのですが、Samba には GUI設定ツール SWAT が付属しています。 SWAT を使用することで、共有の設定やその他のパラメータの設定を WWWブラウザから行うことができます。エディタで編集する設定ファイルの プロトタイプを作成するにも有用な時があります。その他、デーモンの On/Off を コントロールすることも可能です。

SWAT を起動するためには、コンパイルした後に inetd からのサービスとして 起動させなければなりません。設定するファイルは、/etc/services/etc/inetd.conf/etc/hosts.allow となります。


まず /etc/services に、TCP 901番ポートを使用するサービスとして swatを登録します。

swat            901/tcp                 # for Samba SWAT

続いて スーパーデーモン inetd から起動するために、/etc/inetd.conf を設定します。
設定ファイルの最後に 以下の一行を追加します。

swat  stream   tcp   nowait.400    root   /usr/local/samba/bin/swat   swat

最後 inetd で行われる TCP Wrapper の設定を /etc/hosts.allow に記述します。

swat : localhost 127.0.0.1/255.255.255.0 : allow
swat : .mydomain.org : allow
swat : 192.168.10.0/255.255.255.0 : allow
swat : ALL : deny

以上の設定を行った後、inetd を再起動させてください。

kill -HUP `cat /var/run/inetd.pid`

WWWブラウザで http://サーバマシンのアドレス:901 (http://192.168.10.123:901) と入力し、901ポートに接続します。正しく設定されていれば ユーザ認証画面が表示されますので、root でログインしてください。



ログインが成功したら SWATの画面が表示されます



*SWATを使用する上での注意事項

以上のように WWWブラウザから簡単にシステム設定のできる SWAT ですが、 いくつか気をつけなければならない点があります。

  1. SWATを起動するには そのサーバマシンの rootでログインする必要がある
  2. クライアントからサーバへのパスワードは平文のまま送られる
  3. それ以前の smb.conf の内容はすべて破棄される

root でのログインに関しては、設定ファイルの変更やデーモンの起動・再起動 ができるのですから 当然といえば当然なのですが、このパスワードは 平文のまま サーバに送られます。 ですから、決して外部インターネットからのアクセスを受け入れないように 設定しなければなりません。ルータで 901番ポートは塞いでおく必要があります。 ファイルサーバ自体を外部インターネットに公開する場合、 本当にその必要があるかどうか十分に考える必要があると思います。 その場合は SWATの使用は控えるべきでしょう。

より安全に SWATを使用するには、 SSH によるポートフォワーディング機能 を利用する方法があります。
上記 SWAT への接続図を見ていただくとお分かりのように、接続先は ローカル ホストの 901番ポートとしています。このポートをあらかじめ、SSH によって 本来のホストに接続しておけば、暗号化されたトンネル中に情報を流すことが 可能です。


SWAT は設定を保存すると 新たに smb.conf を作成しますので、 それまでテキストエディタで行っていた編集内容は破棄されてしまいます。 SWATで設定できない項目や、コメントなどは破棄されてしまいますので あらかじめバックアップをとる等の注意が必要です。


・ Samba の設定ファイル smb.conf

Samba の動作環境を設定するためには、/usr/local/samba/lib/smb.conf ファイルを編集します。

[global]
    coding system = euc
    client code page = 932
    workgroup = MyGroup
    netbios name = DataServer
	encrypt passwords = Yes

[homes]
    comment = %U's home directory
    valid users = %S
    writeable = Yes
    browseable = No

[data]
    path = /usr/local/data
    comment = Common data area
    writeable = Yes
    browseable = Yes

・ ユーザ認証とパスワード設定

Samba には4つのユーザ認証モードが存在します。Windows がドメインを構成 しており、PDCサーバが全ての認証を行っている場合、Sambaサーバを ドメインの メンバーサーバとすることで、認証を PDCサーバに任せることも可能ですが、 ここでは通常よく使用される Samba 自身がユーザ認証を行うモードについて 説明します。

認証モードは USER、パスワードには暗号化パスワード を使用する ことにします。 平文パスワードを使用すれば、UNIXのユーザ認証を直接 Sambaのユーザ認証に 使用することも可能ですが、最近の Windowsクライアントはデフォルトでは 暗号化パスワードを使用するモードになっていますし、セキュリティの観点からも 暗号化パスワードを使用することにします。
この場合 Samba を使用するユーザは、UNIX上にアカウントが必要ですが、 UNIXへのログインパスワードと、Samba で使用するパスワードと2本立ての管理が 必要になります。


Samba で使用するパスワードを、UNIX のパスワードと別々に設定することは 最初は煩雑に思えたのですが、Sambaサーバが稼動する UNIXマシンのセキュリティ を考える上においても利点であることに気付きました。

Samba を利用するだけのユーザは 直接サーバにログインして作業をすることは 無いわけですから、UNIXでのアカウントは パスワード無(使用しない)で、 ログインシェルを与えない設定にしておけば良い事になります。こうすることで たとえ Samba のパスワードが漏洩したとしても、UNIXサーバへのログイン は出来ないわけですから、パスワードに関して無頓着なユーザからも Sambaサーバ 自体を守ることが出来るわけです。


Samba ユーザの登録は、以下のコマンドで行います。

/usr/local/samba/bin/smbpasswd -a ユーザ名

パスワードファイルは /usr/local/samba/private/smbpasswd として作成されます。


・ SMBクライアント smbclient

Samba には、Windowsマシンや、Sambaサーバマシンに接続するための クライアントプログラム smbclient が付属しています。 サーバが公開している 共有リストを調べるには

smbclient  [-U ユーザ名]  -L  //サーバ名

この場合、UNIX のユーザ名と ファイルサーバのユーザ名が同じ場合には、 [-U ユーザ名] の部分は省略することが可能です。


サーバの共有データのバックアップを取るには、

smbclient //サーバ名/共有名 "パスワード" -U ユーザ名 -Tc 保存ファイル.tar 共有内ディレクトリ

圧縮して保存する場合には、保存ファイル名を 標準出力を示す '-' にして、 パイプを通して gzip に渡します。
以下のサンプルでは、datasvr サーバの 共有 public 内のデータのうち、 mydata ディレクトリ以下の内容を 圧縮して カレントディレクトリの back.tar.gz ファイルとして保存します。そして接続の際のユーザ名が user、 パスワードが pw123 です。

smbclient //datasvr/public "pw123" -U user -Tc - mydata | gzip > back.tar.gz


それ以外の使い方として、コマンドラインで処理を行うのではなく、一旦 サーバに接続して、対話的に操作する方法があります。
クライアントとして サーバに接続するには、

smbclient //サーバ名/共有名 "パスワード" -U ユーザ名
smb:\>   ... ここでコマンドを入力します

無事接続できると smbclient からのコマンドプロンプト smb:\> が 表示されます。使用できる代表的なコマンドは、


コマンドコメント コマンドコメント
help, ?コマンドのヘルプ表示 exit, quitsmbclient を終了する
cdリモートディレクトリを変更する dir, lsリモートディレクトリのファイル一覧を表示する
md, rdリモートディレクトリを作成・削除する   
get, putファイルをサーバから取得・サーバに転送する mget, mput複数ファイルに対して get, put を行う

・ 分散ファイルシステム(MSDFS)の構築

オプション '--with-msdfs' を指定してコンパイルした場合、 分散ファイルシステム(DFS)の ルートファイルサーバになることが出来ます。

/usr/local/samba/lib/smb.conf
 [global]
    ...
    host msdfs = Yes
    ...
 [MySession]
    path = /usr/local/mysession
    msdfs root = Yes
    ...
 [OtherSession]
    path = /usr/local/othersession
    msdfs root = Yes        複数記述可能
    ...

上記で設定した [MySession] 共有の中に、他のマシンの共有を配置するには 他サーバ (Windows/Samba) の共有を シンボリックリンクの形で設定します。

他マシンの共有 \\Data\public を [MySession] の pub として登録するには、

cd /usr/local/mysession
ln -s msdfs:Data\\public pub

と設定します。MSDFS のシンボリックリンクとしての作成は、上記のように

ln -s  msdfs:マシン名\\共有名  リンク名

と記述することも出来ますが マシン名は NetBIOS名でなくても大丈夫です。 具体的には、

ln -s  msdfs:FQDN名(IPアドレスも可)\\共有名  リンク名

とすることもできます。この場合、NetBIOS名を使用しませんので、リンク先 サーバの 名前解決が必要無ければ、nmbd は起動しなくてもかまいません。 そうすることで、利用者側からは リンク先のサーバ名は表に現れませんから 運用途中で、共有フォルダ以下を別マシンに割り当てることも容易に行うことが できます。


Samba は、nmbd が起動していない場合、ネットワークコンピュータ フォルダで ブラウズすることが出来ないことと、\\NetBIOS名\共有名 という いわゆる UNC 形式で 共有を使用することが出来なくなるだけで、 \\FQDN\共有名 という DNS名(IPアドレスのみでも可)を使用することで ファイルアクセスを行うことができるようです。


・ ディスク使用容量制限(QUOTA)を行う

ディスクの容量制限を行うには、Samba だけの設定で行うことは出来ません。 必ず、OSの側で DISK QUOTA を有効にしておく必要があります。 DISK QUOTA がサポートされている OS上で、オプション '--with-quotas' を指定した場合に、QUOTAによって規定されるファイル容量を クライアントに対して報告するようになります。

実際のファイル容量制限は、あくまでも OS上の QUOTA の機能なのですが、 Sambaは 個々のユーザに対して、QUOTAが設定したファイル容量を [共有] の 全ディスク容量として報告することで、各ユーザに対して他のユーザ領域の存在を 意識させること無く容量制限を行うことができるようになっています。



TOMOsan Top Page に戻る
パソコン・プログラミングに戻る


Copyright(c) 2002 Tomohiko Saito. All rights reserved.
last update :