[an error occurred while processing this directive]
Contents
Sambaとは?
Samba日本語版
ドキュメント
技術情報
紹介&リンク
Community
プロジェクト
メーリングリスト
イベント
ユーザー会
etc...
お問合せ
ご支援・ご協力
日本 Samba ユーザ会 (Samba Users Group Japan)

Sambaが動作しないときの診断方法

日本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
  

 testparm の実行時にエラーが表示されるなら、 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/ )にあります。


小田切 耕司


ミラーサイト: [ WWW: master ] [ FTP: ring | kddilabs | plathome | mex | master ]

Copyright © 1999-2016 日本 Samba ユーザー会 (Samba-JP)
2011-12-19 01:17:51 JST 更新