# smbd

## Name

smbd -- SMB/CIFS サービスをクライアントへ提供するサーバ

## Synopsis

smbd [-D] [-a] [-o] [-P] [-h] [-V] [-d <debug level>] [-l <log directory>] [-p <port number>] [-O <socket option>] [-s <configuration file>]

## DESCRIPTION

このプログラムは Samba スイートの一部である。

smbd は Windows クライアントに ファイル共有と印刷サービスを提供するサーバデーモンである。 サーバは SMB (または CIFS) プロトコルを使用するクライアントに ファイル・スペースと印刷サービスを提供する。サーバは LanManager プロトコルと互換性があり、LanManager クライアントに 対するサービスが可能である。クライアントには MSCLIENT 3.0 for DOS、Windows for Workgroups、Windows 95/98/Me、Windows 2000、 Windows NT、OS/2、DAVE for Macintosh、smbfs for Linux が含まれる。

サーバが提供できるサービスについての詳細な記述は、 それらサービスの属性を制御する設定ファイルの マニュアルページにある (`smb.conf(5)` を参照)。このマニュアルページでは サービスについて記述せず、サーバを動作させる上での 管理の面にしぼって記述する。

このサーバを動作させることは 重要なセキュリティーとの関係があること、そして `smb.conf(5)` のマニュアルページはインストールを進める前に 必ず読むべきものであることに注意すること。

セッションはクライアントに要求されるたびに作られる。 各クライアントは各セッション毎にサーバプロセスのコピーを得る。 このコピーはセッションの間、クライアントによるすべての 接続を提供する。クライアントのすべての接続が切断されると、 そのクライアントに対するサーバのコピーは終了する。

設定ファイルとそれに含まれるファイルが変更されると、 1分ごとに自動的に再読込される。サーバに SIGHUP を送ることにより 再読み込みを強制することもできる。設定ファイルの再読込は、 すでに確立されているサービスの接続には影響しない。 ユーザがサービスから切断するか、smbd を終了して再起動するまで設定ファイルの変更は反映されない。

## オプション

-D

  このパラメータが指定されると、 サーバはデーモンとして動作することになる。つまり、自身を分離して バックグラウンドで走らせ、適切なポートに対する要求を 処理するようになる。 臨時にファイルおよび印刷サービスを提供する サーバとして利用する以外の場合は、サーバをデーモンとして 起動するのが smbd の起動方法として推奨される。 smbd がシェルのコマンドラインから 実行されたときはこのスイッチが指定されたと見なされる。

-a

  このパラメータが指定されると、 各々の新しい接続毎に、ログメッセージがログファイルに追加される。 これはデフォルトの動作である。

-o

  このパラメータが指定されると、 ログファイルはオープンされるたびに上書きされる。デフォルトでは、 smbd はログファイルに 追加書き込みする。

-P

  パッシブオプション。これを指定すると、smbd はネットワークに対していかなる送信も行なわなくなる。 これは開発者のデバッグ用オプションである。

-h

  smbd のヘルプ情報 (利用方法)を表示する。

-v

  smbd のバージョン情報を表示する。

-d <debug level>

  `debuglevel` は 0から10の整数である。このパラメータが指定されないときの デフォルト値はゼロである。

  値が大きくなる程、サーバの動作に関する より詳細な情報がログ・ファイルに記録される。 レベル 0 では、重大なエラーや深刻な警告のみ記録される。 レベル 1 は日々動作させるには最適なレベルである - これは動作記録についての概略レベルの情報を生成する。

  1 より大きいレベルはかなりの量の記録データを 生成するため、問題を調査するときのみ使用されるべきである。 3 より上のレベルは開発者によってのみ使用されるように 設計されており、そのほどんどが暗号のような 膨大な量の記録データを生成する。

  このパラメータは、 `smb.conf(5)` ファイルの log level パラメータの値を上書きすることに注意。

-l <log directory>

  `log directory` には、動作しているサーバからの情報やデバッグメッセージが 書き込まれる "log.smbd" ログファイルが作成されるディレクトリを 指定する。 作成されたログファイルがサーバによって消去されることは決してないが、 `smb.conf(5)` 中の max log size オプションによって最大サイズを制限されることはある。 デフォルトのログファイル名はコンパイル時に指定される。

-O <socket options>

  詳細は、`smb.conf(5)` ファイルの socket options パラメータを参照のこと。

-p <port number>

  `port number` は 正の整数値である。このパラメータが指定されていないときの デフォルト値は 139 である。

  この数字は、クライアント・ソフトウェアからサーバへの 接続を確立するときに使用されるポート番号である。 SMB over TCP の標準的な(well-knownな)ポート番号は 139 であり、それ故にこれがデフォルト値である。あなたが root ではないふつうのユーザでサーバを動作させたいならば、 多くのシステムでは 1024 より大きいポート番号を 使わなければならない。- あなたがこの状況にいるかどうかは、 あなたのシステムの管理者に尋ねるとよい。

  たいていのクライアントからサーバを 利用できるようにしたくてもポートを 139 以外に 構成しなければならないときは、ポート 139 にポート・ リダイレクト・サービスが必要になる。詳しくは rfc1002.txt の 4.3.5 節に概略が述べられている。

  このパラメータは、上記の状況を除いては 通常指定しない。

-s <configuration file>

  指定されたファイルはサーバが必要とする 設定の詳細を含んでいる。このファイルには、どの printcap ファイルを使用するかといったようなサーバの詳細な情報を 含んでおり、サーバが提供するすべてのサービスの記述がある。 詳細は `smb.conf(5)` を参照のこと。 デフォルトの configuration file の名前はコンパイル時に 決定される。

## FILES

`/etc/inetd.conf`

  サーバを inetd メタ・デーモンによって動作させるには、このファイルに メタ・デーモン用の適切な起動情報を含める必要がある。 以下の「インストール」の節を参照のこと。

`/etc/rc`

  (あるいは、あなたのシステムが 使用する初期化スクリプト)

  システム起動時にデーモンとしてサーバを動作させるなら、 このファイルにサーバのための適切な起動手続きを 含める必要がある。以下の「インストール」の節を参照のこと。

See the section INSTALLATION below.

  inetd メタ・デーモンを 介してサーバを動作させるなら、このファイルにサービスポート (例:139)とプロトコルタイプ(例:tcp)に対するサービス名 (例:netbios-ssn)のマッピングを含める必要がある。 以下の「インストール」の節を参照のこと。

`/usr/local/samba/lib/smb.conf`

  このファイルはサーバの設定ファイルである `smb.conf` のデフォルトの位置である。その他、システムがこのファイルをインストール しそうな場所としては、`/usr/samba/lib/smb.conf` や `/etc/smb.conf` がある。

  このファイルにはサーバがクライアントから利用できるようにする 全てのサービスを記述する。さらなる情報は `smb.conf(5)` を参照のこと。

## 制限事項

いくつかのシステム上において、smbd は setuid() を呼び出した後に uid を root に戻すことができない。 そのようなシステムは「落とし戸(trapdoor)」uid システムと呼ばれる。 そのようなシステムの場合、異なるユーザとして (PC のような) クライアントから同時に接続を行うことができない。 二人目のユーザ接続の試みは、「アクセス拒否」 または類似の結果となる。

## 環境変数

`PRINTER`

  プリント・サービスでプリンタの名前が 指定されていないとき、多くのシステムでは使用するプリンタ名として、 この変数の値が(もしくは変数が定義されていないなら `lp`が)利用される。しかしながら これはサーバーの特性であるという訳ではない。

## インストール

サーバとそのサポート・ファイルをどこに置くべきかは、 各システム管理者が判断すべき問題である。 従って、以下は単なる提案である。

サーバ・ソフトウェアは、すべての人に読み出し可能で root によってのみ書き込み可能なディレクトリ `/usr/local/samba` 以下にインストールすることを推奨する。 サーバ・プログラム自身は、サーバを自ら動作させたいと望むユーザすべてによって 実行可能にしなくてはならない(もちろん起動したユーザ権限で動作する)。 サーバは setuid するべきではない。あるシステム上では、 smbd を空のグループに setgid することが有効な場合がある。 これは、あるシステムでは、ユーザ権限で動作するデーモン・プロセスが デバッガによってアタッチされてしまうというセキュリティー・ホールが 存在するためである。 smbd のファイルを空のグループに setgid することによって、このホールが利用されるのを防ぐことができるかも知れない。 このセキュリティ・ホールおよび提案されている対策は、この文書執筆時において古い (2.0 以前のカーネルの) Linux にのみ確認されている。いまのところ Linux 以外のシステムのテストではこの問題は発生しないことが確認されており、 このホールは Linux にのみ存在する可能性がある。

サーバのログファイルは、ログファイルにセキュリティ上 問題がある情報を含むことがあるため、 root によってのみ 読み出しと書き込みが可能なディレクトリに配置するべきである。

設定ファイルは、root によってのみ読み出しと書き込みが可能な ディレクトリに配置するべきである。これは、サーバによって提供される サービスのセキュリティを設定する設定ファイルを含めためである。 場合によっては、設定ファイルは全員に読み出し可能にすることができるが、 サーバを正しく動作させる上で必要なことではないし、推奨されることでもない。 サンプルの設定ファイル「`smb.conf.sample`」 がサーバのソースとともに配布されている - これを 「`smb.conf`」にリネームし、 あなたの必要を満たすように変更しても良い。

これ以降の記述では、パスとして以下を仮定している:

- smbd (サーバプログラム)は `/usr/local/samba/bin` にインストールされている。

- `smb.conf` (設定ファイル)は `/usr/local/samba/lib` にインストールされている。

- ログファイルは `/var/adm/smblogs`

  に保存されている。

サーバは、起動時やユーザによってデーモンとして起動されるか、 もしくは inetd のようなメタ・デーモンから リクエストによって起動される。デーモンとして起動する場合、 サーバは常に接続を待機している状態であるためセッションの開始は より高速になる。メタ・デーモンから起動する場合、いくらかのメモリが節約され、 セキュリティの向上のために TCP-wrapper tcpd のようなユーティリティを 使用することができる。ファイルサーバとして実務で利用するのであれば、 smbd をデーモンとして動作させることを推奨する。

When you've decided, continue with either

あなたの結論が出たなら、次のどちらかを続けてみること。

- 「サーバをデーモンとして起動する」または

- 「サーバをリクエストによって起動する」

## サーバをデーモンとして起動する

サーバをコマンドラインからデーモンとして起動するには、 単純にコマンドラインに -D オプションを 付ける。コマンドラインの最後にアンパーサンド '&' を置く必要はない - -D オプションは サーバ自身に tty からの分離をさせる。

どんなユーザでもサーバをデーモンとして起動できる (もちろん、実行権限が許可されている場合に限る)。これは テストを行う目的に便利であるし、 ftp のように、 応急的に用いる場合にも有用であろう。 しかしこの場合の起動では、サーバは起動したユーザの特権を 持つだけになる。

マシンの起動時にいつでもサーバをデーモンとして起動し、 複数のクライアントにサービスを提供できるように root として起動するには、システムの起動ファイルを修正する必要がある。 どこか適切なところ(たとえば `/etc/rc`)に、 ポート番号、ログファイルの場所、設定ファイルの場所、 そしてデバッグ・レベルを望みのものにして、 以下の行を挿入すること:

/usr/local/samba/bin/smbd -D -l /var/adm/smblogs/log -s /usr/local/samba/lib/smb.conf

(上記の行は初期化スクリプト中で単一の行になるようにしなければ ならない。あなたの端末の性質によっては、このマニュアルでは そのように見えないかもしれないが、上記が複数行に渡って見えるなら、 すべての改行あるいはインデントは単一のスペースまたは TAB 文字として扱って欲しい。)

コンパイル時に用いられたオプションがシステムに 適切なものであれば、-D 以外の全ての パラメータは省略できる。上記の「オプション」節を参照のこと。

## サーバをリクエストによって起動する

あなたのシステムが inetd のようなメタ・デーモンを 使用しているなら、プロセスが接続を試みた時点で smbd サーバを起動するように設定できる。これにはホスト・マシンの 起動ファイルにいくつかの変更を必要とする。あなたが root としてではなく、ふつうのユーザとして実験をしているなら、 システムファイルを修正するためにシステム管理者の協力が 必要である。

おそらく、smbd と同時に NetBIOS ネームサーバである nmbd の設定も行ないたいであろう。こちらは nmbdマニュアルページに記述されている。

はじめに、ポートがファイル `/etc/services` に設定されていることを確認すること。どのポートでも使用できる場合であったとしても、 可能な限り well-known ポートである 139 を使用すべきである。

以下と同じような行が `/etc/services` にあることを確認すること:

netbios-ssn 139/tcp

NIS/YP ユーザへの注意 - ローカルの `/etc/services` ファイルを変更する代わりに、NIS の service マップを再構築する必要があるだろう。

次に、ファイル `/etc/inetd.conf` に適当な行を置く(不幸にも inetd 以外のメタデーモンを 使っているような場合は、自分で適宜設定すること)。この行の最初の項目は、 `/etc/services` のサービス名に一致することに注意。 システムに合わせて次の行をしかるべき値に変更する。 (inetd(8) を参照):

netbios-ssn stream tcp nowait root /usr/local/samba/bin/smbd -d1 -l/var/adm/smblogs/log -s/usr/local/samba/lib/smb.conf

(上記の行は`/etc/inetd.conf`中で 単一の行になるようにしなければならない。あなたの端末の性質によっては、 このマニュアルではそのように見えないかもしれないが、 上記が複数行に渡って見えるなら、すべての改行あるいはインデントは 単一のスペースまたは TAB 文字として扱って欲しい。)

標準でないポート番号を使用している場合でも、 ここにポート番号を指定する必要はないことに注意。

最後に、適当なサービスを提供するように設定ファイルを編集する。 手始めに、以下の二つのサービスが必要とするすべてのものであろう:

    		[homes]
    		writeable = yes

    	[printers]
    		writeable = no
    		printable = yes
    		path = /tmp
    		public = yes

これは、ホームディレクトリへの接続と、 ホストでサポートされている(ユーザの権利を許可している) あらゆるプリンタへの印刷を認める。

## PAM INTERACTION

Samba はアカウントチェック(アカウントが無効か?)や セッション管理のため(平文のパスワードが提供されたときに) 認証に PAM を使う。samba の PAM をサポートする程度は、 SMBプロトコルと smb.conf の obey pam restrictions の制限によって限定される。

- アカウントの妥当性確認: Samba サーバに対するすべてのアクセスは、アカウントが妥当か、無効になっていないか、 その時間にログインが許可されているかを PAM と照らし合わせて チェックされる。これは暗号化されたログインにも当てはまる。

- セッション管理: 共有レベルのセキュリティ (訳注:smb.conf での security = share を指す)を使用していない場合、 ユーザはアクセスが許可される前に PAM のセッションチェックをパスしなくてはいけない。 一方、共有レベルのセキュリティではこれはスキップされることに注意。 また、いくつかの古い pam 設定ファイルではセッションをサポートするために 行の追加が必要かも知れないことにも注意。

## インストールのテスト

サーバをデーモンとして起動するなら、先へ進む前にサーバを 起動すること。メタ・デーモンを使用するなら、システムを再起動するか メタ・デーモンを止めて再起動させること。inetd のいくつかのバージョンでは、HUP シグナルを受け取ると inetd の設定テーブルを再読み込みするだろう。

マシンの名前が 「`fred`」で、 あなたの名前が「`mary`」ならば、サービス「 `\e\efred\emary`」に接続できるようになるだろう。

サーバを正確にテスト、実験をするために、smbclient プログラム( smbclient(1) を参照)を使用することを勧める。また、Samba をインストールした中の `docs/` ディレクトリにある `DIAGNOSIS.txt` に概要が記述されたステップを追って実行してみることも勧める。

## VERSION

このマニュアルページは Samba スイートのバージョン 2.2 用になっている。

## 診断

サーバによって出力されたほとんどの診断は、指定されたログファイルに 記録される。ログファイルの名前はコンパイル時に指定されるが、 コマンドラインで変更することもできる。

利用できる診断の数と性質は、サーバで使用されるデバッグ・レベルに 依存する。もし問題を抱えているなら、デバッグ・レベルを 3 に設定してログファイルに目を通すこと。

ほとんどのメッセージは充分に自明であろう。あいにく、 このマニュアルページ作成時にはあまりにもさまざまな診断メッセージが 存在しているため、診断メッセージをすべて記述することを保証できない。 そのような場合にもっともよい方法は、ソースコードを検索 (grep)することであり、着目している診断メッセージを引き起こした条件を 探すことである。

## シグナル

smbd に SIGHUP を送ることで、 `smb.conf` の内容を短時間の内に 再読み込みさせることができる。

smbd のプロセスをシャットダウンさせるのに、 最後の手段として以外には SIGKILL (-9)は 使わないことを推奨する。共有メモリのエリアが不整合なままに なってしまうことがあるためである。 smbd を安全に終了させる方法は、SIGTERM (-15) を送って、smnd 自身が終了するのを待つことである。

smbcontrol(1) を使うと nmbd のデバッグ・ログ・レベルを上げたり下げたりできる (SIGUSR[1|2] シグナルは Samba 2.2 ではもはや使用されない)。 これにより、低いログ・レベルで動作している間に発生する 一時的な問題を診断することができる。

デバッグ書き込みを送る smbd のシグナル・ ハンドラは再入可能になっていない。ゆえにシグナルを発行するときは、 smbd が SMB 待ちの状態になるまで待つ必要がある。 select 呼び出しの前にシグナルのブロッキングを解除し、呼び出しの後で再び ブロッキングすればシグナル・ハンドラを安全にすることができるが、 これはパフォーマンスに影響するだろう。

## SEE ALSO

hosts_access(5)、 inetd(8)、 nmbd(8)、 `smb.conf(5)` 、 smbclient(1) 、 testparm(1)、 testprns(1)、およびインターネット RFC の `rfc1001.txt`、 `rfc1002.txt`。 加えて CIFS(公式なSMB)の仕様は以下のWebページから入手できる: http://samba.org/cifs/.

## AUTHOR

オリジナルの Samba ソフトウェアと関連するユーティリティは、 Andrew Tridgell によって作られた。Samba は現在 Linux カーネルが 開発されているような方法でのオープンソースプロジェクトである Samba Team によって開発されている。

オリジナルの Samba の マニュアルページは Karl Auer によって書かれた。 マニュアルページは YODL 形式(別の、優秀なオープンソースソフトウェアで、 ftp://ftp.icce.rug.nl/pub/unix/ にある) で変換され、Jeremy Allison によって Samba 2.0 リリースのために更新された。 Samba 2.2 のための DocBook 形式への変換は Gerald Carter が行った。

## 日本語訳

- 佐藤 文優(fumiya@samba.gr.jp)

- 高橋 基信(monyo@samba.gr.jp)

- はせがわ ようすけ