Linux ワークステーションを Windows の群れが集まる場所に置かなければならないことが何度もありましたが、Network Neighborhood で Linux を適切に動作させることは困難でした。
もちろん、この狂気を少しでも、いや、むしろイライラさせない方法はあります。今回のDaily Drill Downでは、その方法をご紹介し、ネットワークコンピュータでのLinuxプレイ時間を短縮するための基礎知識をお伝えしたいと思います。
達成したいこと
この記事を読み終える頃には、smbmountとsmbclient がどのように動作するか、また、これらのツールをサポートする適切な GUI クライアントがあるかどうかについて、より深く理解していただければ幸いです。
これらのことを実現することで、周囲の人々との連携がよりスムーズになるはずです。smbmountコマンドとsmbclientコマンドを使えば、ネットワーク内のマシンを表示し、それらのディレクトリを読み書きできるようになります。
smbmount smbmount
コマンドは、実際にはsmbmntのフロントエンドです。smbfsは、 smbmountコマンドとsmbumountコマンドの両方を含むアプリケーションです。一般的なユーザーにとって、smbmountとsmbumountは、LAN経由でSMB共有をマウントすることを除けば、mountとumountと全く同じように動作します。
smbmount は開始以来書き直されており、構文も実際に変更されています。
まず前提として、Sambaがマシンに正しくインストールされ、smbmountがrootにsetuidされていることを前提とします。このビットを設定するには、suでrootになり、以下のコマンドを実行します:
chmod u+s /usr/sbin/smbmount
chmod u+s /usr/sbin/smbumount
ビットが設定されると、SMB 共有をマウントするコマンドを実行できます。
著者注:
上記のビットを設定すると、多くのセキュリティリスクが生じます。ネットワークのセキュリティに不安がある場合は、このビットを設定しないでください。このビットをsに設定しない場合は、root権限を持ち、 smbmountコマンドをrootとして実行する必要があります。
長い道のり
まず、SMB 共有をマウントする方法について、長くて難しい方法 (コマンドを入力するのと同じくらい難しい) で試してみます。最終的には、このプロセスをずっと簡単にする方法を開発します。
著者注:
すべてのコマンドを説明したあと、作業をさらに簡単にする GUI アプリケーションをいくつか紹介します。
smbmountコマンドの構造は次のようになります:
smbmount service mountpoint [ -o options ]
しかし、 smbmount //shared/drive /mount/pointのように単純に実行することもできます。
ご覧の通り、SMBコミュニティの閲覧を可能な限り簡単にするために、すでに多くの手順を簡素化しています。もう少しお待ちください。その簡単さにきっと驚かれるはずです!
smbmountコマンドを
見て、どんな機能があるか見てみましょう。smbmountコマンドは、他の優れた Linux コマンドと同様に、コマンドに渡すオプションがいくつかあります。これらのオプションの最大の違いは、キー=値のペアをカンマで区切ったリストとして渡すことです。指定可能なオプションは次のとおりです。
- username=<arg> —このオプションは、接続に使用するユーザー名を指定します。指定されていない場合は、環境変数 USER が使用されます。このオプションは、user %password、user/workgroup、またはuser/workgroup%passwordという形式でも指定でき、パスワードとワークグループをユーザー名の一部として指定できます。
- password=<arg> —SMBパスワードを指定します。指定しない場合、smbmountはパスワードの入力を促します(guestオプションが指定されていない場合)。
- netbiosname=<arg> —ソースNetBIOS名を設定します。デフォルトはローカルホスト名です。
- uid=<arg> —この引数は、ファイルをマウントするユーザーIDを設定します。ユーザー名または数値のuid のいずれかで指定できます。
- gid=<arg> —このオプションは、ファイルがマウントされるグループIDを設定します。グループ名または数値のgidのいずれかで指定できます。
- port=<arg> —リモートSMBポート番号を設定します。デフォルトのポート番号は139です。
- fmask=<arg> —このオプションはファイルマスクを設定します。これにより、リモートファイルがローカルファイルシステム上で持つパーミッションが決まります。デフォルトは現在のumaskに基づきます。
- dmask=<arg> —ディレクトリマスクを設定します。これは、リモートディレクトリがローカルファイルシステム内で持つパーミッションを決定します。デフォルトは現在のumaskに基づきます。
- debug=<arg> —この引数はデバッグレベルを設定します。これはSMB接続の問題を追跡するのに役立ちます。
- ip=<arg> —このオプションは、宛先ホストまたは IP アドレスを設定します。
- workgroup=<arg> —宛先のワークグループを設定します。
- sockopt=<arg> —TCPソケットオプションを設定します。smb.confのソケットオプションオプションを参照してください。
- scope=<arg> —この引数は NetBIOS スコープを設定します。
- guest —パスワードの入力を求めないことを意味します。
- ro —読み取り専用としてマウントすることを意味します。
- rw —読み取り/書き込みとしてマウントすることを意味します。
これはかなり長い引数リストです。上記の引数のいくつかをSambaに渡す必要がある状況もあるでしょう。例えば、ネットワーク上の別のユーザーのLinuxマシンからWindowsマシンにアクセスする必要がある場合などです。これを行うには、username=とpassword = の両方の引数を渡す必要があります(もちろん、=の後には 自分のユーザー名とパスワードを指定する必要があります)。
もう一つのシナリオとして、Windows共有(通常は読み取りと書き込みの両方の権限を持つ共有)を、あるユーザーに読み取り専用でマウントさせたいとします。そのためには、同僚のマシンをマウントし、ro引数を渡します。もちろん、 smb.confファイルに適切な設定をすれば実現できますが、通常はアクセスを許可しない共有へのアクセスを他のユーザーに許可したい場合もあります。このような場合、Sambaの柔軟性は大きなメリットとなります。
さて、コマンドに戻りましょう。まず、仮想ネットワークを構築して、実際に操作してみましょう。このネットワークは172.22.1.0のネットワークです。現在使用しているマシンは172.22.1.24です。アクセスしたいマシンは、IPアドレスが172.22.1.33である本番環境のマシン(Help)です。マウントしたい共有はdocumentationです。この共有をホームディレクトリのworkというサブディレクトリにマウントします(このディレクトリは既に作成されています)。このディレクトリをマウントするには、(ユーザーとして、自分のマシン上で)コマンドsmbmount //172.22.1.33/documentation ~/workを実行する必要があります。
このコマンドを実行すると、次のような出力が表示されます:
[jwallen@giles jwallen]$ smbmount //172.22.1.33/documentation ~/work
Added interface ip=172.22.1.24 bcast=172.22.1.255 nmask=255.255.255.0
session request to Help failed
Password:
パスワード(Linuxのログインパスワードではなく、ネットワークパスワード)を入力すると、bashプロンプトが表示されます(すべてうまくいけば)。bashプロンプトが表示されたら、ディレクトリに対してlsコマンドを実行してマウントが成功したかどうかを確認できます。つまり、ls ~ /workのように入力します。
マウント先のマシンのディレクトリ/ファイルのリストが表示されます。
今後の問題
もちろん、この方法にも問題があります。まず、そして最も明白な問題は、DHCPを使ってIPアドレスを割り当てる大規模ネットワークに接続している可能性があることです。DHCPを使うと、必要なマシンのIPアドレスが分からなくなってしまいます。これはほぼすべての状況で問題となります。Microsoftのネットワークコンピュータを使っても、この情報を把握することはできません。もちろん、この問題を回避する方法があります。マシンのIPアドレスを取得するには、次の手順に従う必要があります。
- マシンの NetBIOS 名を調べます。
- 名前をpingします。
- 名前に対して報告された IP をメモします。
NetBIOS名を調べるのは、通常、マシンのユーザーまたはネットワーク管理者に尋ねるだけで簡単です。マシンが実稼働環境で使用されている場合(特に複数のユーザーが使用している場合)、マシン名はユーザーに知られています。マシン名を誰も知らない場合で、物理的にマシンにアクセスできる場合は、マシンのコントロールパネルを開き、「ネットワーク」アイコンをクリックして「識別」タブを選択します。「識別」タブの下にコンピュータ名が表示されます。これがアクセスしたいマシンの名前です。
名前がわかれば、その名前にpingを実行してIPアドレスを特定するだけです。例に倣うと、マシンの名前はHelpで、使用しているマシンは同じDHCPネットワーク上にあることがわかります。コマンド
ping -v Helpを実行してください。
すると、そのマシンのIPアドレスが表示されます。そのIPアドレスをメモしておき、smbmountコマンドに入力してください。
smbclient が救世主
もちろん、利用可能な共有がわからない場合は、この方法は役に立ちません。smbmountコマンドは//hostname/shareという形式を要求し、有効な共有名を指定せずにマウントしようとするとエラーを返します。さて、どうすればいいでしょうか?共有名を見つけます!では、どうやって共有名を見つけるのでしょうか?簡単です。Samba の力を借りれば!Help マシンから利用可能な共有名を取得するには、Samba の smbclient コマンド(後ほど説明します)を次のように使用します。smbclient -L Help
著者注:
NetBIOS 名がわからない場合は、Helpという名前のマシンの IP アドレスを代用できます。
上記コマンドの出力の一部を以下に示します:
Domain=[TECH] OS=[Windows NT 4.0] Server=[NT LAN Manager 4.0]
共有名 タイプ コメント
——— —- ——-
NETLOGON ディスク ログオン サーバー共有
BizDev ディスク ビジネス開発
ProgramMan ディスク プログラム管理
ADMIN$ ディスク リモート管理
資産ディスク 資産管理 データベース
アート ディスク アート
操作 ディスク 操作
IPC$ IPC リモート IPC
上記は、あなたのマシンで利用可能な共有の一覧です。これで、Linuxマシンに共有をマウントするために必要な情報がすべて揃いました。smbmount
//help/Art ~/workコマンドを使用してください。
ヘルプから参照したArt共有を/home/USER/workディレクトリにマウントします。これで、 Art共有を自分のマシンのローカルディレクトリのように使用できるようになります。
しかし、現在smbmountプロトコルには1つの問題がつきまとっています。一見ランダムなタイミングで、 smbmountでマウントしたディレクトリを表示(またはリスト表示、あるいはディレクトリへの移動)しようとすると、次のようなエラーが表示されます。ls
: work: Input/output error
ここで、work はSamba 共有をマウントするために作成したディレクトリです。
現時点ではこの問題の回避策はありません。この問題を解決する唯一の方法は、suでroot になり、作業ディレクトリでumountコマンド(またはsmbumount コマンド)を実行し、root を終了してから、通常ユーザーとしてディレクトリを再マウントすることです。
入力は少なく、作業は増える
これらのコマンドはどれも、良くても時間がかかり、最悪の場合、覚えるのが面倒です。これらのコマンドを簡素化する非常に簡単な方法があります。それはエイリアスです。
このコマンドのエイリアスを追加するには、まず/etc/hostsファイルにIPアドレスとマシン名を追加する必要があります。新しいエントリは次のようになります:
172.22.1.33 help
これにより、IPアドレスを入力する代わりに、ホスト名のヘルプを使用できるようになります。これを挿入したら、.bashrcファイルを開き、次の行を追加してください:alias work=”smbmount //help/Art /home/USER/work”
上記の行を追加すると、Xとコンソールの両方から終了する必要があります。再度ログインすると、bashプロンプトからworkコマンドを実行することで、 .bashrcファイルに入力したsmbmountコマンドが実際に実行されることがわかります。このコマンドを/etc/rc.d/rc.localファイルに追加することも可能ですが、この方法には問題があり、コマンドが成功することはほとんどありません。
smbclient
smbclientコマンドは、Samba の FTP クライアントのような機能を持つ多機能ツールです。他のツールがうまく動作しない場合に非常に便利です。最大の欠点は、標準的な Windows 9x マシンにアクセスしようとする場合です。9x テクノロジはネットワーク用に開発されたものではないため、そのマシンに FTP で接続することはできません。もちろん、9x マシンでこのテクノロジを有効にするソフトウェアは存在しますが、これはまた別の機会に説明します。
smbclientを使用してWindows マシンからディレクトリを読み書きするには、次のようにコマンドを使用します:
smbclient //SERVERNAME/SHARENAME
次のような情報が表示されます
。パスワード:
ドメイン=[TECH] OS=[Windows NT 4.0] サーバー=[NT LAN Manager 4.0]
smb:\>
このコマンドでは、 SERVERNAMEとSHARENAME を独自の情報に置き換える必要があります。
パスワードを入力して[Enter]キーを押すと、smb:\>プロンプトが表示されます。このプロンプトでは、いくつかの便利な操作が可能です。smbclientの主な機能は以下のとおりです。
ls | ディレクター | デュ | 液晶 | CD |
パスワード | 得る | mget | 置く | 入力 |
名前を変更する | もっと | マスク | デル | 開ける |
rm | mkdir | 医学 | rmdir | rd |
プロンプト | 再帰 | 翻訳する | 小文字 | 印刷 |
印刷モード | 列 | キャンセル | やめる | q |
出口 | 新しい | アーカイブ | タール | ブロックサイズ |
タールモード | 設定モード | ヘルプ | ? | ! |
この処理により、LinuxマシンとWindowsマシンの間に多機能なネットワーク接続が構築されます。ほとんどのディレクトリコマンド(ls、dir、cd、mkdirなど)を実行でき、FTPのファイル交換機能と多くの基本的なbashコマンドも利用できるため、smbclientは瞬く間に強力なtelnetへと進化します。
もちろん、smbclientの使用には欠点もあります。このアプリケーションには GUI モデルがありません。smbclient モードではコマンドライン構造しか使えないため、多くの人はあまり満足しないかもしれません。
smbclientアプリケーションには、すぐに煩わしくなって敬遠したくなるような小さな癖がいくつかあります。中でも特に厄介なのは、タブ補完がないことです。通常、Linux のbashシェルでは、コマンドやファイル名の一部を入力して [Tab] キーを押すと、シェルが単語を自動補完します。この機能は、繰り返し入力したり推測したりする手間を大幅に省きます。この機能に慣れてしまうと、もうこの機能なしでは計算したくなくなるでしょう。しかし、 smbclientではこの機能はなくなりました。タブ補完の代わりに、[Tab] キーは [Tab] キーとしてのみ機能します。そのため、[Tab] キーを使用して単語補完しようとすると、次のようになります。
.. D 0 Wed Jun 7 16:09:30 2000
ALMOSTE MSSGS D 0 Tue May 9 17:10:58 2000
ALMOSTE PICS D 0 Tue May 9 17:11:05 2000
almostEverest raw pics D 0 Fri May 19 11:19:16 2000
books D 0 Fri Jun 2 09:52:35 2000
everest D 0 Wed May 17 16:09:04 2000
Gartner for CD D 0 Tue Jun 13 10:30:39 2000
jeff'sbookfiles D 0 Wed May 31 17:01:32 2000
TPGコンテンツ D 0 2000年6月20日火曜日 11:24:47
サイズ 2097152 の 34726 ブロック。使用可能なブロック数は 11754 です
smb: \> cd TP
cd \TP\: ERRDOS – ERRbadpath (ディレクトリが無効です。)
smb: \>
上記のポイントは、タブ補完の使い方とその結果を示すことです。マウントされた共有(上記)内には、TPG contentというディレクトリがあります。このディレクトリにcdで移動しようとした際に、タブ補完を試みたところ、次のように表示されました。cd
TP
次のエラーが発生します。cd
\TP\: ERRDOS – ERRbadpath (ディレクトリが無効です。)
確かに、これは重大なエラーでも、動作を停止させるような問題でもありません。ただ、smbmountを使う方がはるかに良い選択だと思わせるほど、かなり厄介な問題です。
smbclient を使った印刷
smbclientアプリケーションには、プリンタ共有に接続してプリンタにアクセスできる便利な機能もあります。接続したら(上記のコマンドを使用)、以下のコマンドを使って印刷できます。
- print FILENAME —このコマンドは、ファイルをリモート印刷キューに送信して印刷します。
- printmode TYPE1 | TYPE2 —これは、印刷ジョブの形式をプリント サーバーに指示します。
- queue —このコマンドは、接続しているプリンタ共有のキューを表示します。
- c —これは、印刷中であることを通知するためにsmbclientに送信される引数です。
したがって、次のコマンドは、print_test.txtファイルをヘルプサーバー上のプリントサーバー共有に印刷します:
cat print_test.txt | smbclient //Help/print PASSWORD -c “print -“
PASSWORDの代わりにネットワーク パスワードを使用する必要があることに注意してください。
smbclient によるデバッグ/診断
次のツールは、smbclient にSamba 接続のデバッグを支援する機能を提供します (すべて大文字のものはすべてユーザー定義の変数です)。
- B IP_ADDRESS —ブロードキャスト アドレスを設定します。
- d DEBUG_LEVEL — デバッグ情報をどの程度詳細にするかを設定します。
- E —stdoutではなくstderrにメッセージを送信します。
- I IP_ADDRESS —接続先のサーバーの IP アドレスを設定します。
- i SCOPE —NetBIOS スコープ識別子を設定します。
- l LOG_FILE —ログメッセージをユーザー定義のファイルに送信します。
- N —パスワードプロンプトを抑制します。
- n NetBIOS_NAME —デーモンが自身をアドバタイズするために使用する NetBIOS 名を上書きできます。
- O SOCKET_OPTIONS —TCP/IPソケットオプションを設定します。これは通常、パフォーマンスチューニングにのみ使用されます。
- p PORT_NUMBER —クライアントがリクエストを受け入れるために使用するポート番号を設定します。
- R RESOLVE_ORDER —ネームサーバーの解決順序を設定します。
- s CONFIGURATION_FILE —Samba 構成ファイル ( smb.conf )の場所を宣言します。
- t TERMINAL_CODE —アジア言語の端末コードを設定します。
- U USERNAME —ユーザー名を設定し、パスワードと組み合わせて使用できます (例: -U username%password)。
- W WORKGROUP —接続するワークグループ名を設定します。
上記のリストは非常に健全であり、Samba のほとんどの問題を解決できます。
GUIフロントエンド
ついに、ずっと議論したかったセクションに到達しました。時折、とても不思議なことが起こります。この記事を書き始めた頃、Microsoftの「ネットワークコンピュータ」ほどユーザーフレンドリーなアプリケーションは読者に提供できないのではないかと考え始めました。このアプリケーションは使いやすく、まるでローカルマシンに最初から備わっているかのように簡単かつ効率的にネットワークを読み取ります。最近まで、Linuxにはそのようなアプリケーションはありませんでした。
Hans Schmid氏とRichard Stemmer氏が開発したLinNeighborhoodは、私にとってまさに最高のアプリケーションです。この小さなアプリケーションは、ネットワーク全体を読み込むだけでなく、アプリケーションが作成したディレクトリに、これらの共有を自動的に、そして静かにマウントしてくれます。なぜこのようなアプリケーションが登場するまでにこんなに時間がかかったのかは分かりませんが、この小さな宝石のおかげで、主にMSネットワーク上でLinuxを使うのが極めて簡単になりました。
LinNeighborhoodは説明するよりも実際に使ってみた方が分かりやすいのですが、とりあえず試してみることにします。このアプリケーションの基盤はsmbmountコマンドに基づいており、Windowsらしくユーザー操作を最小限にすることで動作します。設定が完了すると、この小さな美しいツールを開いて利用可能な共有フォルダを表示できます。右クリックで様々なオプションを選択できます。これらの右クリックオプションの中には、共有フォルダをマウントしてファイルマネージャーで参照する機能があります。シンプルで洗練されたデザインです。
このアプリケーションで唯一難しい点は初期設定です。一般的なMSネットワークで実行している場合は、以下の設定のみが必要です(「オプション」→「環境設定」メニュー)。「スキャン」タブで「ワークグループ」を設定します。「常にユーザーとしてスキャンする」(ユーザー名とパスワードをお持ちの場合は、これらが必要になります)。「プログラム」タブで、smbmountのバージョンを変更する必要があるかもしれません。「その他」タブで、「マウントした共有を記憶する/次回起動時に再マウントする」を選択します。「マウント後」タブで、別のファイルマネージャーを設定する必要があるかもしれません。
LinNeighborhood のメイン画面は図 Aのようになります。
図A |
![]() |
これはLinNeighborhoodのメイン画面です。 |
メインウィンドウには3つのアイコンがあることに気づくでしょう。最初の2つのアイコン(小さなコンピュータ)は、Giles(ローカルマシン)にマウントされた2つのマシン共有(どちらもNTマシン)を表しています。上の2つのアイコンの下には、ネットワーク全体を表す3つ目のアイコン(かわいいペンギンの頭)があります(ローカルマシンの名前が付いていますが)。
このアプリケーションの優れた点の 1 つは、プログラムを開くとすぐにネットワーク全体に接続され、他のアイコンをダブルクリックすると、ユーザーが設定した共有がマウントされることです。
このアプリケーションの詳細については、Jack Wallen による LinNeighborhood のレビューをご覧ください。
結論
時間はかかりましたが、LinuxはついにWindowsの世界で快適に使えるレベルに到達しました。複雑なネットワーク設定は急速に過去のものになりつつあります。このDaily Drill Downでは、Windowsレスのワークステーションで作業するという夢の実現に少しでも近づけるよう努めてきました。
Samba の詳細については、私の Daily Drill Down の「基本的な Samba の構成」をご覧ください。