SMBMOUNT(8)

名前
smbmount - smbfs 用マウントプログラム

書式
smbmount servicename mount-point [ -h ] [ -C ] [ -n ] [ -P password ] [ -s server name ] [ -c client name ] [ -I hostname/IP ] [ -U user name ] [ -D domain name ] [ -u uid ] [ -g gid ] [ -f file mode ] [ -d dir mode ] [ -m max xmit ] [ -p port ]

説明
このプログラムは、SMB ファイルシステム (smbfs) に対するインタフェース である。 smbfs は、SMB プロトコルを扱うことのできるファイルシステムである。SMB プロト コルは Windows for Workgroups、Windows NT または Lan Manager などで相 互通信を行うために用いられている。 smbfs は、 samba にヒントを得て作られた。 samba は Andrew Tridgell によるプログラムで、これによりあらゆる UNIX サイト を DOS や Windows クライアントのファイルサーバにすることができる。 この興味深いプログラムスイートに関しては、 ftp://nimbus.anu.edu.au/pub/tridge/samba/ を参照のこと。TCP/IP 上の SMB や NetBIOS に関するたくさんの情報もここで入手できる。更に NetBIOS の名前付けや共有などの概念の説明も得られる。

オプション
servicename
    servicename はサーバ上にある、使用したいサービスの名前である。 //server/service/rootdir のような形式で指定する。 server は使用したいサービスを提供する Lan Manager サーバ名である。また service は提供されるサービス名である。 rootdir は提供されるサービスの下にあるディレクトリである。このような指定の仕方 は、サーバのディスク全体がエクスポートされているが、クライアントには階 層のうちの一部のみが利用できるような設定にしたい場合などに便利である。 従って、"wfw" という Lan Manager サーバの "c" というサービスの下の "util" ディレクトリに接続するためには、
        //wfw/c/util
    という servicename を用いることになる。 この表記法は DOS の慣例とは異なっているので注意が必要である。DOS では これと同じサービスは \\wfw\c\util と表される。シェルが \ をエスケー プキャラクターとして用いるので、面倒をなくすため DOS の表記法は採用し なかった。 smbmount を automounter と共存させる際、先頭の '/' は一つだけで良い。 ただし複数の '/' をおいても構わない。 現在のところ smbmount は指定されたホストの IP アドレスを得るために gethostbyname() を使っているが、この方法は Lan Manager と互換性が無い。 Lan Manager ではサーバの netbios 名はホスト名と同じである必要はない。 ホスト名とは異なる netbios 名を用いざるを得ない環境では、 -s と -c を用いて適切な動作をさせることができる。
mount-point
    mount-point はファイルシステムをマウントしたいディレクトリである。これは通常 の mount コマンドと同様である。 コマンドを実行したユーザの実際のuser-idがrootでない場合、 smbmount はそのユーザに対して、その mount-point へのファイルシステムのマウント が許可されているかどうかを確かめる。従って smbmount を root に setuid しておいても安全である。ファイルシステムにはコマンドを実行したユーザの 実際の user-id が保存されるので、 smbumount は、それを実行したユーザがそのファイルシステムのアンマウントを許可され ているかどうか確かめることが可能になっている。
-h
    短いヘルプを表示する。
-C
    デフォルトでは、パスワードはサーバに送られる前に大文字に変換される。 これは多くのサーバがそれを要求するからであるが、 -C によってこの変換を無効にできる。
-n
    パスワードを要求しない共有マウントの際に用いる。
-P password
    サーバから要求されるパスワードをコマンドラインで指定する。パスワードを スクリプトで用いる場合には注意すること。 -n もしくは -P のどちらも与えられなければ、smbmount はパスワードを要求するプロンプト を出す。このため /etc/rc のようなスクリプト内で smbmount を用いるのは 困難である。しかし、これは smbmount の落ち度ではなく、Lan Manager のセ キュリティ・モデルに関する一般的な問題である。誰かこの問題の良い解決策 を御存知なら私に教えて頂きたい。
-s server name
    サーバがホスト名と異なる netbios 名を持つ場合、 -s によって netbios 名を指定できる。このオプションはサーバの netbios 名を 指定しなければサーバが接続を拒否する時のみ使用できる。 このオプションにより、smbmount がサーバの IP アドレスを探す方法が変わ ることはない。常に gethostbyname() を用いる。 デフォルト値はサービスで指定されたサーバ名である。
-c client name
    -s と同様に、 -c はクライアントがホスト名と異なる netbios 名を持ち、かつデフォルトの netbios 名（つまりあなたのマシンのホスト名）を使うとサーバが接続を拒否 する時に使用する。
-I hostname/IP of the server
    -c がサーバ上で netbios 名とサーバ名が異なる時に使われるのと同様に、この オプションはネットワーク上の接続するホスト名を設定する。サーバの netbios 名はサービス名により決まる。
-U user name
    Lan Managerの管理者からもらったユーザ名がUNIXのuser-idと異なる場合、 -U を用いて、サーバに対して自分の Lan Manager ユーザ名を指定する。
-D domain name
    もしサーバがログインに際してドメイン名を要求するなら、 -D を用いて指定できる。既定値は '?' であり、ほとんどの場合はそれでうまく 動く。カーネルがこの機能をサポートしている必要がある。
-u uid, -g gid
    Lan Manager サーバはファイルの所有者を全く管理していない。UNIXではそれ ぞれのファイルの所有者とその所有者が属するグループとを指定する必要があ る。 -u と -g を用いて、マウントするディレクトリ内のファイルにどの id を割り振るかを smbmount に対して指定できる。 それぞれの既定値は現在の uid と gid である。
-f file mode, -d dir mode
    -u と -g 同様、これらのオプションは Lan Manager と UNIX との概念の違いを吸収す るために用いられる。Lan Manager はファイルの許可属性についてはまったく 関知しないので、マウントするファイルやディレクトリをどのような許可属性 にするかを smbmount に与えなければならない。属性値は 8 進数で与えられ、 既定値は現在の umask である。ファイルのモードは現在の umask、またディ レクトリのモードはファイルのモードが読み取り許可を持っている場合に、そ れに実行許可を加えたものとなる。 これらのパーミッションは、サーバが与えているものとは異なり得ることに注 意すること。もしサーバが書き込みを許していない場合は、ファイルモードも それに合わせるようにすると良いだろう。そうすればサーバが意図している制 限を上書きしまうのを防げる。
-p port
    smbmount がサーバに接続しようとする TCP ポート番号である。既定値は RFC 1001/1002 (NetBIOS over TCP/IP) で指定されている 139 であり、全ての商 用のサーバはこのポート番号を用いてサービスを行なっているので、通常はこ れを変更すべきではない。 私はこのオプションを、通常ユーザの権限で走る samba が特権ポートである 139 に bind() できなかった環境で試した。
-m max xmit
    smbmount が 1 つの SMB パケット内で特別な最大パケットサイズを転送でき るよう指定する。通常はこのオプションは用いられるべきでない。

マウントの失敗
mount(2) システムコールは有意なエラーコードを返さないので、マウントに 失敗した場合には何が原因なのかを判断する必要がある。 re サーバによってはユーザ名、パスワード、また共有名（サービス名）が大文字 または小文字で与えられるか、で問題が起こる。もし接続に失敗するなら全て のパラメータに大文字を使うと良いかもしれない。 サーバの種類によっては、接続するために -n オプションが必要なことがよくある。例えば OS/2 Lan Manager は有効な netbios 名を要求するので、サーバが知っている有効な名前を使う必要がある。 smbfs-0.8 以降のバージョンでは、smbmount プログラムがカーネルよりも新 しいという状況があり得るので、最新のカーネルソースを用いて smbmount を コンパイルしなおすことも必要かもしれない。

注意
サーバが LANMAN2 プロトコルをサポートしていれば、 smbfs は長いファイル名を扱うことができる。

環境変数
USER / LOGNAME
    環境変数 USER または LOGNAME はクライアント側のマシンを使用しているユー ザ名を保持している。最初に USER が調べられ、もしそれが空なら LOGNAME が調べられる。この情報はセッション・レベルのパスワードをサポートしてい る高いプロトコル・レベルの時のみに用いられる。

返り値
smbfs のほとんどの出力は syslogd によってログが残される。通常は何も出 力されないが、エラーが発生したときのみログに記録が残る。 smbfs に何か問題があれば、それを調べるための良いツールとして samba パッ ケージに含まれる smbclient プログラムがある。もし smbclient で問題が起 こらなければ問題点はほぼ間違いなく smbfs にあることになるが、smbclient でも問題が生じれば、より多くのデバッグ情報がそれにより得られる。

バグ
make は何故か smbmount でマウントされたディレクトリ内の Makefile を見 つけることができない。make -f Makefile とタイプすれば良い。 カーネルコードと競合条件にある部分は多くあると思われる。私も最善を尽く したいと思うのでカーネルハッキングに慣れた人からの問題の報告を望む。例 えば、私は smbfs がカーネル内で呼び出しているどのルーチンが schedule() を呼び出しているのかを知らない。kmalloc がスケジューラを呼び出している のだろうか？それとも kfree が行っているのだろうか？ サーバを見つけるのに Lan Manager の仕様とは一致しない方法である gethostbyname() を用いているというバグがある。

関連項目
syslogd(8), smbumount(8)

謝辞
e@namu01.gwdg.de) 元々の smbfs のカーネルコードはユーザ・レベルの smbfs と NFS のコード を組み合わせたものであった。Paal-Kr. Engstad (pke@engstad.ingok.hitos.no) によって統合され、その後 Volker Lendecke (lendecke@namu01.gwdg.de) が 管理している。 オリジナルの samba プログラムとそれに関連するユーティリティ・プログラ ムは、Andrew Tridgell (Andrew.Tridgell@anu.edu.au) によって作成された。