日本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 がうまく動作しないときに調査する項目を順を追って説明します。
各項目の順番には意味がありますので、必ずこの順に行ってください。
また、それぞれの項目ごとにそこでエラーが生じた場合の原因と対処方法を簡潔に説明します。
説明のため、ここでは次のようなネットワーク環境を仮定します。
Linux マシン bigserver の上で、自マシンの IP アドレス (10.1.0.10) へ ping コマンドを実行してください。
<実行例>※注: $ は Linux マシンのコマンド・プロンプトを表します。
$ ping 10.1.0.10
もし、これに応答がないか、エラーになる場合は、 ネットワークカードが認識されていないか、TCP/IP の設定が正しくされて いません。 使用している OS のマニュアルや、ハードウェアのマニュアルなどを 参照して、TCP/IP の設定や、カードの接続および設定を確認してください。
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 で名前解決できるように設定してください。
Linux マシン (bigserver) の上で、Windows マシンの IP アドレス (10.1.0.20) へ ping コマンドを実行してください。
<実行例>
$ ping 10.1.0.20
もしこれに応答が無いか、エラーになる場合は、 ネットワークがダウンしているか、 Windows マシンの TCP/IP の設定が正しくないことを意味します。 Windows マシンの設定や接続を確認してください。
Linux マシン (bigserver) の上で Windows クライアントのホスト名 (aclient) へ ping コマンドを実行してください。
<実行例>
$ ping aclient
もし、host not found やエラーとなるときは、 Linux マシンの /etc/resolv.conf ファイルに DNS サーバのアドレスが正確に設定されていなかったり、 DNS や /etc/hosts の設定にミスがあります。 この、ホスト名での ping コマンドでエラーが生じていても Samba にはアクセスできることがあります。 しかし、これが原因で SWAT へのアクセスが異常に遅くなることもあります。
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 の設定に何らかの問題がありますので、見直して修正してください。
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 に出力していることを確認してください。
Linux マシンで以下のコマンドを実行してください。
<実行例>
$ nmblookup -B BIGSERVER __SAMBA__
Linux マシンの IP アドレスを得られるはずです。 Linux マシンの IP アドレスが得られないときは、 nmbd が正しく起動されていません。 デーモンが稼働していて 137/udp ポートが「 LISTEN 」状態であることを 確認してください。 そして nmbd が inetd 経由で起動されていないことを確認してください。
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 アドレスを 用いて上記のコマンドを実行してみてください。
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 」オプションを使う必要があります。
サブネットマスクとブロードキャスト・アドレスが
正しく設定されていないと、多分このテストは失敗するでしょう。
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 」というエラー・メッセージが表示されたなら、 次のような原因が考えられます。
上記に該当する原因が存在しない場合には、Samba のログ・ディレクトリ
(例えば、/var/log/samba/、/usr/local/samba/var/ など)に作成される
ログ・ファイルに、詳細な情報が出力されているので、
その内容を確認してください。
問題なく接続されたなら、「 dir 」、「 get 」、「 put 」などの
コマンドが使用できるはずです。
「 help <コマンド名> 」と入力すれば、コマンドの用例が表示されます。
また、「 dir 」コマンドを実行した際、ディスクの空き容量が
正しく表示されることを確認してください。
Windows マシン aclient のコマンド・プロンプト (DOS 互換ボックス )で、Linux マシンの IP アドレスへ ping コマンドを 実行してください。
<実行例>
c:> ping 10.1.0.10
※注: c:> は Windows マシンのコマンド・プロンプトを表します。
もし、これに応答が無いか、エラーになる場合は、 ネットワークがダウンしているか、Windows マシンの TCP/IP の設定が 間違っていることを意味します。
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 です。)
Windows マシンのコマンド・プロンプトから以下のコマンドを 実行してください。
<実行例>
c:> nbtstat -A 10.1.0.10
これに応答が無ければ、Linux マシンで Samba (nmbd) が 動いていないことを意味します。
Windows マシンのコマンド・プロンプトから以下のコマンドを 実行してください。
<実行例>
c:> nbtstat -a BIGSERVER
これに応答が無い場合や「 host not found 」となる場合は、 Linux マシンで Samba が動いていないか、 NetBIOS の名前解決ができていないことを意味しています。 この原因は通常 nmbd にあり、解決するためには 以下のいずれかの方法を用いてください ( どれか 1 つを選んで )。
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 ファイルに追加してください。
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 」オプション)を用いる必要があります。
Linux マシン上で以下のコマンドを実行してください。
<実行例>
$ nmblookup -M TESTGROUP
TESTGROUP は Linux マシンと Windows マシンが ともに所属しているワークグループ名です。 このコマンドを実行すると、そのワークグループの マスター・ブラウザの IP アドレスが表示されるはずです。 IP アドレスが表示されないときは、マスター・ブラウザの選定過程で 失敗しています。 選定の過程で時間がかかることがあるので、しばらく待ってから 再度実行してみてください。 それでも失敗する場合は、smb.conf のブラウジング・オプションの設定を 確認してください。 「 preferred master = yes 」と指定すれば、 起動時に優先的にマスター・ブラウザになろうとします。
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) に質問するのもいいでしょう。
メーリング・リストで質問するときは,
などを添付してください。
メーリング・リストへの参加方法や Samba についての詳細は
日本 Samba ユーザ会のホームページ( http://www.samba.gr.jp/
)にあります。