#
Sambaが動作しないときの診断方法
（DIAGNOSIS.txt改訂版）

日本Sambaユーザ会 代表幹事
ミラクル・リナックス株式会社 小田切 耕司
html作成者: 鎌形 昌美
最終更新日: 2001/08/28

このページは、日本Sambaユーザ会 代表幹事の小田切 耕司さんが執筆された、日経Linux 2001 年 6 月号の原稿をもとに作成しております。よって文中に Linux の文字が出てきますが、それはお使いのunix互換OS と読み替えてください。

このページでは、Samba が動かないときの対処方法を説明します。 日本 Samba ユーザ会が運営している Samba-JP メーリング・リスト(http://www.samba.gr.jp/ml/#samba-jp) に時々「Sambaがうまく動きません。なぜでしょうか？」といったような質問が寄せられることがあります。 しかし、これだけでは何がどううまく動かないのかわからず、だれも適切なアドバイスすることができません。
ここでは、Samba がうまく動作しないときに調査する項目を順を追って説明します。 各項目の順番には意味がありますので、必ずこの順に行ってください。 また、それぞれの項目ごとにそこでエラーが生じた場合の原因と対処方法を簡潔に説明します。

説明のため、ここでは次のようなネットワーク環境を仮定します。

- Samba が動作する Linux マシンのホスト名： bigserver
- Linux マシンの IP アドレス：10.1.0.10
- Windows マシンのホスト名： aclient
- Windows マシンの IP アドレス：10.1.0.20
- サブネットマスクは 255.255.0.0
- Linux と Windows マシンともに「 TESTGROUP 」という名前のワークグループに所属

## (1) Linux 上で自マシンの IP アドレスへ ping

  Linux マシン bigserver の上で、自マシンの IP アドレス (10.1.0.10) へ ping コマンドを実行してください。

  > <実行例>
  > $ `ping 10.1.0.10`

  ※注： $ は Linux マシンのコマンド・プロンプトを表します。

  もし、これに応答がないか、エラーになる場合は、 ネットワークカードが認識されていないか、TCP/IP の設定が正しくされて いません。 　使用している OS のマニュアルや、ハードウェアのマニュアルなどを 参照して、TCP/IP の設定や、カードの接続および設定を確認してください。

## (2) Linux 上で自マシンのホスト名へ ping

  Linux マシン bigserver の上で、自マシンのホスト名 (bigserver) へ ping コマンドを実行してください。

  > <実行例>
  > $ `ping bigserver`

  ping コマンドを実行した時に、自ホストの IP アドレスが 127.0.0.1 となるときは、/etc/hosts の設定ミスです。以下を参考に修正してください。

  > <誤った /etc/hosts 設定例>
  > `127.0.0.1 bigserver localhost.localdomain localhost
  > `

  > <正しい /etc/hosts 設定例>
  > `127.0.0.1 localhost.localdomain localhost
  > 10.1.0.10 bigserver bigserver.miraclelinux.com
  > `

  上記の正しい /etc/hosts 設定例のように、ホスト名 (bigserver) と 外部と通信可能な IP アドレス (10.1.0.10) をマッピングさせてください。 miraclelinux.com などドメイン名を付けた FQDN (Fully Qualified Domain Name) も忘れずに指定してください。 　 　もし、マシンが DHCP でアドレスを動的に設定する場合は、上記のように /etc/hosts に指定せずに、DNS で名前解決できるように設定してください。

## (3) Linux マシンから Windows マシンの IP アドレスへ ping

  Linux マシン (bigserver) の上で、Windows マシンの IP アドレス (10.1.0.20) へ ping コマンドを実行してください。

  > <実行例>
  > $ `ping 10.1.0.20`

  もしこれに応答が無いか、エラーになる場合は、 ネットワークがダウンしているか、 Windows マシンの TCP/IP の設定が正しくないことを意味します。 Windows マシンの設定や接続を確認してください。

## (4) Linux マシンから Windows マシンのホスト名へ ping

  Linux マシン (bigserver) の上で Windows クライアントのホスト名 (aclient) へ ping コマンドを実行してください。

  > <実行例>
  > $ `ping aclient`

  もし、host not found やエラーとなるときは、 Linux マシンの /etc/resolv.conf ファイルに DNS サーバのアドレスが正確に設定されていなかったり、 DNS や /etc/hosts の設定にミスがあります。 　この、ホスト名での ping コマンドでエラーが生じていても Samba にはアクセスできることがあります。 しかし、これが原因で SWAT へのアクセスが異常に遅くなることもあります。

## (5) 必要最低限の設定ファイルの作成と testparm の実行

  SWAT またはエディタを使用して次のような設定ファイル (smb.conf) を 作成し、保存してください。 　この smb.conf ファイルは /etc ディレクトリに存在することもありますし、 /etc/samba や/usr/local/samba/lib, /usr/local/etc ディレクトリに あるかも知れません。 　smb.conf ファイルを保存した後、Linux 上で testparm コマンドを 実行してください。

              [global]
      	           coding system = euc
      		   client code page = 932
      		   encrypt passwords = Yes
      		   workgroup = TESTGROUP
      		   map to guest = Bad User
      	[tmp]
      		   path = /tmp

  testparam の実行時にエラーが表示されるなら、 smb.conf の設定に何らかの問題がありますので、見直して修正してください。

## (6) Linux 上で smbclient を実行

  Linux にログインし、smbclient を実行してください。 Linux にログインするときは、Windows でログオンする時と同じユーザ名で ログインしてください。 　そして、次の例のように smbclient を実行してください。
  テストを簡素化するために、テストで用いるユーザ名とそのパスワードには 大文字のアルファベットを含めないでください。 　なお、Samba のパスワードは smbpasswd コマンドで設定します。

  > <実行例>
  > $ `smbclient -L BIGSERVER`

  使用できる共有サービス名の一覧が表示されるはずです。
  「 Bad password 」などのエラー・メッセージが表示されたときの原因は、 smb.conf で不適切な「 hosts allow 」、「 hosts deny 」、「 valid users 」 設定があるか、あるいはゲスト・アカウントが無効であるかのいずれかです。 このときは testparm コマンドを使用してゲスト・アカウントが 存在することを確認してください。 また、一時的に「 hosts allow 」、「 hosts deny 」、「 valid users 」、 あるいは「 invalid users 」の記述行を削除またはコメントにして テストしてみてください。
  「 connection refused 」エラーが返ってくるようなら、 smbd が動いていないかも知れません。 inetd （スーパーサーバ）経由で動作するよう設定している場合は、 恐らく inetd.conf ファイルの記述に誤りがあると思われます。 　一方，デーモンとして動作するように設定しているときは、 smbd がデーモンとして動作していることを ps コマンドで確認してください。 「 netstat -a 」コマンドを実行して、netbios-ssn ポートが「 LISTEN 」状態 になっていることを確認してください。
  「 session request failed 」とエラーが返された場合には、 サーバは接続を拒否しています。 「 Your server software is being unfriendly 」というエラーが 返された場合は、smbd を実行するときに無効なパラメータを付けているか、 smbd 起動時に同様な致命的な問題がある場合のいずれかです。 このような場合、「 testparm 」コマンドを実行して smb.conf の文法に 誤りがないことを確認し、Samba のログ・ディレクトリと、ロック・ファイルを 格納するディレクトリが存在することを確認してください。
  ほかにも smbd が，セッション要求を拒否する理由はたくさんあります。 代表的なものとしては、smb.conf で以下の項目を どれか 1 つ以上定義している場合です。

  > <例>
  > `hosts deny = ALL
  > hosts allow = xxx.xxx.xxx.xxx/yy
  > bind interfaces only = Yes
  > `

  上記の例では，ループ・バック・アドレス (127.0.0.1) に変換される いかなるセッション要求も許可されていません。 この問題を解決するためには次のように設定を変更してください。

  > <例>
  > hosts deny = ALL
  > hosts allow = xxx.xxx.xxx.xxx/yy 127.

  Samba のパスワード変更機能を使用する場合や、 smbclient が名前を解決してローカルなサービスを使用する場合、 あるいはローカルの資源へ接続する必要がある場合は、 「 bind interfaces only 」パラメータを使用してはいけません。
  そのほかに共通であろうもう一つの原因は、ポート 139 を使う Samba ( 例えば smbd が inetd から既に起動されている場合)や、 VMware の共有サービスのような“ほかの何か”が既に動いている場合です。 デーモンとして smbd を起動する前に、inetd.conf ファイルを確認することで 多くの誤動作を避けることができます。
  このテストで失敗するその他の原因としては、サブネット・マスクまたは ブロードキャスト・アドレスの設定が間違っている場合です。 ネットワーク・インタフェースの設定 (IP アドレス / ブロードキャスト・アドレス / サブネット・マスク) が 正しく設定されていることを確認して、Samba が正しい値をログ・ファイル log.nmb に出力していることを確認してください。

## (7) nmbd の動作確認

  Linux マシンで以下のコマンドを実行してください。

  > <実行例>
  > $ `nmblookup -B BIGSERVER __SAMBA__`

  Linux マシンの IP アドレスを得られるはずです。 Linux マシンの IP アドレスが得られないときは、 nmbd が正しく起動されていません。 デーモンが稼働していて 137/udp ポートが「 LISTEN 」状態であることを 確認してください。 そして nmbd が inetd 経由で起動されていないことを確認してください。

## (8)コンピュータ名による名前解決

  Linux マシンで以下のコマンドを実行してください。

  > <実行例>
  > $ `nmblookup -B ACLIENT`

  このコマンドが動作しない場合は、次のコマンドを実行してください ( 詳しくは SWAT の nmblookup の説明ページを参照 )。 　nmblookup -B <ブロードキャスト・アドレス> <コンピュータ名>

  > <実行例>
  > $ `nmblookup -B 10.1.255.255 ACLIENT`

  Windows マシンの IP アドレスを得られるはずです。 Windows マシンの IP アドレスが得られない場合は、Windows マシンの TCP/IP 設定が正しくないか、マシンの名前を間違えているかのいずれかです。 DNS を利用して aclient の名前解決ができないなら、aclient の IP アドレスを 用いて上記のコマンドを実行してみてください。

## (9)nmbd でのブロードキャストへ応答確認

  Linux マシンで以下のコマンドを実行してください。

  > <実行例>
  > $ `nmblookup -d 2 '*'`

  (8) と同様のテストですが、これはデフォルトのブロードキャスト・アドレス に対しブロードキャストし、その応答を確認します。 ネットワーク上の NetBIOS と TCP/IP ホストからたくさんの応答があるはず なので、Samba サーバが短時間ですべての応答を捕られないかも知れません。 問題なければ、ネットワーク上のホストから 「 got a positive name query response 」というメッセージが得られるはず です。
  テスト (7) と同じ結果を得られないなら、nmblookup は正しい ブロードキャスト・アドレスを自動的には得ていないことになります。 この場合には、smb.conf に「 interfaces 」オプションを設定し、 IP アドレスとブロードキャスト・アドレスおよびネット・マスクを 設定してみてください。
  Windows マシンと Linux マシンが同じサブネットの上に存在しないときは、 Windows マシンが存在するサブネットのブロードキャスト・アドレスを 設定するために「 -B 」オプションを使う必要があります。
  サブネットマスクとブロードキャスト・アドレスが 正しく設定されていないと、多分このテストは失敗するでしょう。

## (10) Linux マシン上での共有アクセス

  Linux マシンで以下のコマンドを実行してください。

  > <実行例>
  > $ `smbclient //BIGSERVER/TMP```

  パスワード入力を要求するプロンプトが表示されるはずです。 パスワードには、smbpasswd コマンドで設定したパスワードを用いてください。 その他のアカウントでテストするなら、コマンドラインの最後に 「 -U username 」オプションを付け加えてください。

  > <実行例>
  > $ smbclient //bigserver/tmp -U watanabe

  次のようにユーザ名 (watanabe) と一緒にパスワード (masako) を 指定することも可能です。

  > <実行例>
  > $ smbclient //bigserver/tmp -U watanabe%masako

  パスワードを入力すると「 smb: \> 」プロンプトが表示されるはずです。 プロンプトが表示されない場合はエラーになっています。 「 invalid network name 」というエラー・メッセージなら smb.conf の [tmp] 共有が正しく設定できていません。 「 bad password 」というエラー・メッセージが表示されたなら、 次のような原因が考えられます。

  - smbpasswd コマンドでパスワードを設定していない。
  - smb.conf に「encrypt password = yes 」と設定していない。
  - smb.conf の「valid users 」の設定が正しくない。
  - 大文字と小文字を混在したパスワードを設定している。
  - smb.conf の「path = 」行が正しく設定されていない。 「testparm 」を用いて設定を確認する。
  - smbpasswd と/etc/passwd でユーザのUID が異なっている。

  上記に該当する原因が存在しない場合には、Samba のログ・ディレクトリ （例えば、/var/log/samba/、/usr/local/samba/var/ など）に作成される ログ・ファイルに、詳細な情報が出力されているので、 その内容を確認してください。
  問題なく接続されたなら、「 dir 」、「 get 」、「 put 」などの コマンドが使用できるはずです。 「 help <コマンド名> 」と入力すれば、コマンドの用例が表示されます。 また、「 dir 」コマンドを実行した際、ディスクの空き容量が 正しく表示されることを確認してください。

## (11) Windows マシンから Linux マシンの IP アドレスへ ping

  Windows マシン aclient のコマンド・プロンプト (DOS 互換ボックス )で、Linux マシンの IP アドレスへ ping コマンドを 実行してください。

  > <実行例>
  > c:> `ping 10.1.0.10`

  > ※注： c:> は Windows マシンのコマンド・プロンプトを表します。

  もし、これに応答が無いか、エラーになる場合は、 ネットワークがダウンしているか、Windows マシンの TCP/IP の設定が 間違っていることを意味します。

## (12) Windows マシンから Linux マシンのホスト名へ ping

  Windows マシン aclient のコマンド・プロンプトで、Linux マシンの ホスト名へ ping コマンドを実行してください。

  > <実行例>
  > c:> `ping bigserver`

  ping コマンドを実行したときに、「 host not found 」や エラーとなるときは、DNS や WINS サーバの設定にミスがあります。 Windows マシンでも hosts ファイルを使用して名前解決することは可能ですが、 できる限り DNS と WINS を使用することをお勧めします。 (Linux の /etc/hosts に相当するものは Windows Me/9x では %windir%\hosts 、 Windows NT/2000 では %windir%\system32\dirvers\etc\hosts です。 %windir% は Windows ディレクトリを意味します。 一般に Windows Me/9x ではC:\WINDOWS 、WindowsNT/2000 ではC:\WINNT です。)

## (13) Linux マシンの IP アドレスでの nbtstat

  Windows マシンのコマンド・プロンプトから以下のコマンドを 実行してください。

  > <実行例>
  > c:> `nbtstat -A 10.1.0.10`

  これに応答が無ければ、Linux マシンで Samba (nmbd) が 動いていないことを意味します。

## (14) Linux コンピュータ名での nbtstat

  Windows マシンのコマンド・プロンプトから以下のコマンドを 実行してください。

  > <実行例>
  > c:> `nbtstat -a BIGSERVER`

  これに応答が無い場合や「 host not found 」となる場合は、 Linux マシンで Samba が動いていないか、 NetBIOS の名前解決ができていないことを意味しています。 　この原因は通常 nmbd にあり、解決するためには 以下のいずれかの方法を用いてください ( どれか 1 つを選んで )。

  - nmbd の設定をやり直す。
  - BIGSERVER (Linux マシン ) を WINS サーバとして設定し、 Windows マシンの TCP/IP の設定で「 WINS サーバの検索順」に bigserver の IP アドレスを加える。
  - bigserver と Windows マシンで 同一の WINS サーバを使用するように設定する。
  - TCP/IP 設定の DNS セクションで、 DNS を利用して NetBIOS 名前解決を可能にする。
  - BIGSERVER のアドレスを Windows マシンの lmhosts ファイルに加える (Windows Me/9x では %windir%\lmhosts 、 WindowsNT/2000 では %windir%\system32\dirvers\etc\lmhosts にあります)。

## (15) Window マシンから net view コマンドを実行

  Windows マシンのコマンド・プロンプトから以下のコマンドを 実行してください。

  > <実行例>
  > c:> `net view \\BIGSERVER`

  このコマンドを実行すると、Samba サーバで利用できる共有サービスの一覧が 表示されます。
  「 network name not found 」やそれに類似したエラー・メッセージが 表示された場合は、NetBIOS の名前解決ができていないか smb が起動していません。
  「 invalid network name 」、「 bad password error 」というエラーが 返ってきたときは、 前述の「 smbclient -L 」のテストと同じ解決策が適用できます。 特に smb.conf の「 hosts allow 」の行を正しく設定していることを 確認してください ( 詳細は SWAT の smb.conf に関する説明を参照してください)。
  Windows マシンは、Samba サーバに接続するときに、 Widows にログオンしたユーザ名を使用して接続しようと試みます。 Windows マシンにログオンしたときのアカウントが Samba サーバで有効であること、 アカウントとパスワードに間違いが無いことを確認してください。
  「 specified computer is not receiving requests 」 または類似のエラーが返ってきたなら、 恐らく Linux マシンの設定が TCP サービス経由で接続可能になっていないとおもわれます。 Linux マシンで TCP_Wrappers を使用していないこと確認して、 必要であればクライアント用の ( またはサブネットなどの ) エントリを Linux マシンの /etc/hosts.allow ファイルに追加してください。

## (16) Window マシンから net use コマンドを実行

  Windows マシンのコマンド・プロンプトから以下のコマンドを 実行してください。

  > <実行例>
  > c:> `net use x: \\BIGSERVER\TMP`

  パスワードを入力すると「 command completed successfully 」 というメッセージが表示されるはずです。
  そうでなければ、Windows ネットワークが正しく設定できていないか、 Linux マシンの smb.conf ファイルの設定に誤りがあります。 「 hosts allow 」や smb.conf の各行の設定が正しいことを確認してください。 smb.conf に「 security=share 」と設定した場合、 使用しているユーザ名でサーバに接続できないことがあります。 この場合には、smb.conf の [tmp] セクションに 「user=USERNAME 」行を追加してください。 USERNAME は入力したパスワードに対応しているユーザ名です。 Windows で使用しているユーザ名と Linux マシンで使用しているユーザ名が 異なる場合は、ユーザ名のマッピング・オプション (smb.conf の「 username map 」オプション）を用いる必要があります。

## (17) Linux マシンからnmblookup コマンドを実行

  Linux マシン上で以下のコマンドを実行してください。

  > <実行例>
  > $ `nmblookup -M TESTGROUP`

  TESTGROUP は Linux マシンと Windows マシンが ともに所属しているワークグループ名です。 このコマンドを実行すると、そのワークグループの マスター・ブラウザの IP アドレスが表示されるはずです。 　IP アドレスが表示されないときは、マスター・ブラウザの選定過程で 失敗しています。 　選定の過程で時間がかかることがあるので、しばらく待ってから 再度実行してみてください。 それでも失敗する場合は、smb.conf のブラウジング・オプションの設定を 確認してください。 「 preferred master = yes 」と指定すれば、 起動時に優先的にマスター・ブラウザになろうとします。

## (18) ブラウジング

  Windows マシンで、ネットワーク・コンピュータを参照してください。 Samba サーバは、Windows マシンと同じローカル・ワークグループ ( もしくは smb.conf で指定したワークグループ ) の中に表示されるはずです。 そして Samba サーバのアイコンをダブルクリックすれば、 共有フォルダが一覧表示されます。
  「 invalid password 」というエラー・メッセージが返って来た場合は、 恐らく Windows NT/2000 を使用してユーザ・レベルのセキュリティ・モードを 使用し、なおかつ暗号化されたパスワードを受け付けないサーバのブラウズを 拒否しているかも知れません。 この場合には smb.conf に 「 security = server 」と 「 password server = Windows_NT_Machine 」を指定するか、 暗号化されたパスワードを使用できるように 「 encrypt passwords = yes 」と設定してください。

以上の18 項目すべてを試行した上で、それでも問題が解決しない場合は、 Samba パッケージに含まれているほかのドキュメント ( SWAT の表紙 ) も 見てください。 　どうしても原因が分からない場合は、日本 Samba ユーザ会のメーリング・リスト (samba-jp) に質問するのもいいでしょう。

メーリング・リストで質問するときは，

1. OS のバージョン
2. samba のバージョンおよびインストール方法
3. 問題が起こるときの操作方法
4. エラーの場合はその詳細メッセージ
5. 必要に応じてエラー・ログ (/var/log/samba/*) の内容
6. 設定ファイル (smb.conf) の内容

などを添付してください。
メーリング・リストへの参加方法や Samba についての詳細は 日本 Samba ユーザ会のホームページ( http://www.samba.gr.jp/ )にあります。

小田切 耕司
http://www.samba.gr.jp/