目次


共通のスレッド: Sambaへの招待、第3回

Sambaでサンバ: 構成ステージ

Comments

これまで私たちが扱ってきた smb.conf のリストは、以下に示すとおりです。

[global]
	
	# set YOURWORKGROUP to the name of your workgroup
	workgroup = YOURWORKGROUP
	security = user
	encrypt passwords = yes
	guest account = guest
	# enable *one* of the following two lines
	# enable the first line if you want to use an existing
	# WINS server on your subnet, otherwise, enable the
	# second.
 
#	wins server = IP address of WINS server
#	wins support = yes
	local master = yes
	os level = 99
	domain master = yes
	preferred master = yes
	# optional security options.  Customize for your site.
#	hosts allow = 192.168.1. 127.
#	interfaces = eth1
[tmp]
	path=/tmp
	writeable=yes

共用の追加

この smb.conf ファイルは、問題があるという訳ではありませんが、やっている事と言ったら"tmp" という名前の共用を作成して、Windows と /tmp ディレクトリーを共用することだけです。これじゃ面白くありません。もっと役に立つ別の共用を作成することにしましょう。smb.conf に以下の行を追加して Samba をリスタートしてください。

[ftp]
	path=/path/to/ftp/root
	writeable=no

ユーザーの Samba サーバーに ftp サイトまたは何らかの種類のファイル・アーカイブがある場合には、次のような方法により、ネットワーク上のデータを共用することができます。"writeable=no" パラメーターは Samba に対し、この共用ではファイルの作成または変更を誰にも許可するべきでないことを指示します。有効な Samba アカウントが設定されている人は誰でも、この共用にアクセスできるようになります。

面白い共用

あなたが何を考えているのかは、分かっています。これでもまだ、さほど面白くはありませんよね。ホーム・ディレクトリーを共用してみてはどうでしょう? 方法は次のとおりです。

[drobbins]
        comment=Home directory for drobbins
        path = /home/drobbins
        force user = drobbins
        read only = no
	valid users = drobbins administrator

これでかなり面白くなってきましたね。smb.conf にこのようなコードを追加すると、ホーム・ディレクトリーを共用することができます。この例では、"drobbins" という共用が作成されています。これは、/home/drobbins のコンテンツをネットワーク全体で共用します。ただし、ありがたいことに、"valid users" 行があるために、誰でもこの共用にアクセスできるわけではありません。この行により、Samba は "drobbins" または "administrator" アカウント以外からのアクセスを拒否するようになります。私は Windows NT を使用しているため、多くの場合アドミニストレーターとしてログインされます。このような状態でも、"drobbins" 共用にアクセスできるのはすばらしいことです。そうなっているのは、このような valid users 行があるおかげです。

"read only" パラメーターが使われていることにも気付かれると思います。ご推察のとおり、"read only" は "writeable" パラメーターとは反対の働きをします。この行は、"writeable=yes" で簡単に置き換えることができます。これは、適切な権限を得ているユーザーであれば、この特定共用への書き込みが Samba によって許可されることを意味します。Samba の "drobbins" ユーザーは Unix の "drobbins" ユーザーに直接マップされます。そして、drobbins が /home/drobbins ディレクトリーおよびそのコンテンツの所有者であるため、ファイルの書き込みと変更が許可されます。

これまでに、root としてホーム・ディレクトリー内にファイルを作成しておいて、通常ユーザーとしてログインされたときにそれを変更しようとして、書き込みアクセスが拒否されたことはありませんか? 私の場合、いつもそのようなことばかりしています。この問題を修正するために、私は root から "su" を実行し、"chown drobbins.drobbins filename" を実行し、さらに "exit" を実行しなければなりません。これでようやく、ファイルの変更が許可されます。

このことを持ち出したのは、ホーム・ディレクトリーを共用し、別の Samba ユーザーを使用してそのディレクトリーにアクセスした場合、似たような問題が起こりかねない からです。次の場合を考えてください。私は、アドミニストレーターとして共用にアクセスし、ファイルを作成します。通常このファイルはアドミニストレーターによって所有され、drobbins ユーザーによって変更されることはありません。drobbins がこのファイルを変更しようとすると、アクセスは拒絶されます。幸い、Samba には、このような状況に対処するための "force user" というオプションがあります。"force user" オプションを使用すると、(特定の Samba SMB/CIFS 共用にある) ファイルで行われるすべてのアクションが、単一の Unix アカウントを使用して実行されるようになります。私の "drobbins" 共用の例では、このことは、アドミニストレーターが作成したファイルはどれも、実際には drobbins によって所有されるようになり、所有権の競合が回避される、ということを意味します。"drobbins" 共用には私のホーム・ディレクトリーのコンテンツが含まれるため、その中のものすべてを drobbins アカウントに所有させたいのです。

次のトピックに進む前に、"comment" パラメーターについて説明しておきます。それにより、Windows から見ることのできる記述コメントを使用して、ユーザーの共用を補完できるようになります。

多数のホーム・ディレクトリーの共用

単一のホーム・ディレクトリーを共用する方法については、以上のとおりです。しかし、数百人 ものユーザーを抱えたサーバーで、その全員が Windows からホーム・ディレクトリーにアクションできるようにする必要がある場合、そのサーバーを管理するには、どうすればよいのでしょうか? 幸い、Samba にはこの目的に適した、"homes" という特殊な共用があります。その仕組みを次に示します。

[homes]
        comment=Home directory for %S
        path=/home/%u
        valid users = %u administrator
        force user=%u
        writeable = yes
        browseable = no

今述べたように、これは「特殊な」共用です。通常の共用のように機能するわけではありません。Samba は特殊な ID "[homes]" を認識し、他とは違った方法でこの共用を扱います。

この共用の最も変わった点の 1 つは、"browseable=no" パラメーターを使用することです。この特別なオプションにより、共用が Network Neighborhood のもとでは不可視になります。このオプションは通常、自分が見ることのできる共用の中を「探検」してしまおうとするユーザーの悪意を思いとどまらせるために使用されます。しかし、なぜこれをここで使用するのでしょうか?

その答えは、やや入り組んでいます。"homes" 共用は "homes" という共用を作成します。この特殊な共用は、私たちの役には立ちません。何もしないのですから、隠しておくことにします。"homes" が私たちのために行うことは、まったく途方もないことです。この共用は Samba に対して、個々のユーザーごとに、ホーム・ディレクトリーをその場で自動的に作成するように指示します。たとえば、"drobbins" 共用が smb.conf で定義されていない場合に、私たちが NT ユーザー "drobbins" として Network Neighborhood を調べるとします。そして、私たちのオリジナルの "drobbins" 共用と同じ振る舞いをする、"drobbins" という共用を見つけます。私たちが NT ユーザー "jimmy" を使用して Samba にアクションしたとすると、完全に構成された "jimmy" 共用が見つかります。これが homes のすごいところです。特別な共用を 1 つ追加するだけで、すべての ホーム共用が正しく作成されるのです。

さて、これによってどうなるのでしょう? "homes" 共用が設定されると、Samba は、どの NT ユーザーが Samba にアクセスしているのかを検出するようになります。そして Samba は、この特定ユーザー用にカスタマイズされたホーム共用を作成します。この共用は、Network Neighborhood では、通常の、非ダイナミック共用として姿を現します。その NT ユーザーは、この特殊な共用がその場で作成されたことに気付きません。それぞれの特殊オプションについて見ていきましょう。

comment パラメーターは %S ワイルドカードを使用しています。これが展開されて、共用の実際の名前になります。これにより、"drobbins" 共用には "Home directory for drobbins" というコメントが付き、"jimmy" 共用には "Home directory for jimmy" というコメントが付くようになります (以下同様)。path パラメーターにもワイルドカード %u が含まれています。%u は展開されて、その共用にアクセスしているユーザーの名前になります。この特別な例では、%u は %S と等価になりますので、path=/home/%S を使用しても同じことになります。これにより、Samba は、その共用をディスク上の適切な位置に動的にマップできるようになります。

また、"valid users=" 行でマクロを使用して、共用の所有者とアドミニストレーターだけがそれにアクセスできるようにしてあります。"force user" でもマクロを使用してあります。これにより、すべてファイル・アクセスが単一のアカウントによって実行されるようになります。そしてもちろん、この共用は、認証されたすべてのユーザーによって書き込めるようになっています。私たちが "browseable=no" パラメーターを使用している一方で、動的に作成される共用は、作成時にブラウズ可能になります。ここでも、機能しない "homes" 共用は隠されています。

共用パラメーター

共用を作成する際に使用できる、いくつかの簡便な技法を見てきました。このセクションでは、共用ごとに Samba の機能をカスタマイズできるようにするための、いくつかの一般的なオプションについて説明します。共用関連のすべてのオプションを [globals] セクションに配置して、すべての共用のためのデフォルト値を設定することもできます。

comment=
comment= パラメーターは、Samba システムが Windows 側からよりプロフェッショナルに見えるようにするための、非常に使いやすいオプションです。このパラメーターを使用すると、特定の共用にその内容を説明するコメントを付けることができます。コメントを指定する場合 (特に "homes" を使用する場合) には、私はよく %S マクロを使用します。このマクロは展開されて、その共用の名前になります。

path=
path= は最も基本的な Samba 共用パラメーターです。これを使用すると、エクスポートされるディレクトリーへのパスを設定することができます。デフォルトでは、このディレクトリー・ツリー内のどの symlink もたどれるようになっています。したがって、ユーザーがディレクトリー・ツリーから「飛び出す」ことも可能です。Windows 側からは、symlink をたどっていることが分かりません。通常のファイルやディレクトリーのようにしか見えません。この振る舞いを変更させて Samba を一層セキュアにするような、いくつかのパラメーターを見ていきましょう。

force user=
force user= は、私が愛用しているパラメーターの 1 つです。これを使用すると、すべてのファイル変更を単一ユーザーのアカウントによって行うことが強制されます。多くの場合、valid users= オプションも一緒に使用して、特定のユーザーだけにアクセスを制限する必要があります。すべてのファイル操作は単一ユーザー・アカウントを使用して行われるため、force-user= の副次作用の 1 つとして、Unix ファイル許可を調べて誰が何をしたのかを突き止められないということが起こります。したがって、書き込み可能共用の場合、force user= オプションを使用するときには、合理的なセキュリティー・デフォルトも使用する必要があります。このオプションを使用しないと、すべてのファイル操作は、その共用にアクセスしている Samba ユーザーによって行われるようになります。

force user の例

force user=drobbins

browseable=
セキュリティーを強化するための簡単な方法は、特定の共用を不可視にすることです。Network Neighborhood のもとでは、デフォルトで共用をブラウズすることができます。共用を不可視にすると、迷惑なハッキングの試みを防ぐのに役立ちます。しかし、これだけをセキュリティーの唯一の手段とすべきではありません。ある共用がブラウズ・リストに載っていないというだけで、それが Windows からアクセスできなくなるというわけではありません。単に、悪意のあるユーザーに提供される可能性のある情報の量が少なくなるだけのことです。隠れた共用には、「Run... (実行...)」ダイアログ・ボックスにその UNC 名を入力することによってアクセスできるのです。たとえば、myserver にある 'test' という隠し共用には、Windows から "\\myserver\test" とタイプすることによってアクセスできます。

browseable の例

browseable=no

available=
available= オプションは、共用をコメント化したり smb.conf から完全に消去したりしなくても使用禁止にすることのできる簡便な手段で、デフォルトでは 'yes' になっています。available=no を使用すると、Samba を再始動した後でその共用が非アクティブになります。

available の例

available=no

valid users=
valid users= オプションを利用すると、特定の共用へのアクセスを制限することができます。デフォルトでは、認証されたどのユーザーも Samba 共用にアクセスすることができます。グループ名に "@" を付加することにより、有効な NIS ネットグループまたは Unix グループを参照することができます。

valid users の例
drobbins およびホイール・グループのメンバーに共用へのアクセスを許可するには、次のようにします。

valid users = drobbins @wheel

dont descend=
dont descend= には、共用内にある、Samba がアクセスすべきでないディレクトリーを指定します。これは、再帰的 symlink を含むディレクトリーに Samba がアクセスできないようにしたり、/proc や /dev などのような無関係のディレクトリーだけにアクセスできるようにしたりするための、便利な方法です。dont descend= 設定値をテストして、正しく機能することを確認してください。たとえば、"dont descend= /dev" を "dont descend= ./dev" に切り替えなければならないことがあります。

follow symlinks=
follow symlinks= は、通常はデフォルトで 'yes' になっていて、エクスポートされたディレクトリー・ツリーの外側にあるファイルまたはディレクトリーに Samba がリダイレクトされた場合にも、Samba がすべての symlink をたどるようにさせます。follow symlinks を 'no' に設定すると、この機能がオフになり、symlink はまったくたどられなくなります。follow symlinks をオフにすると、潜在的なセキュリティー・ホールが除去されますので、symlink が不要な場合にはそうしてください。

follow symlinks の例

follow symlinks=no

volume=
volume= オフを使用すると、Samba は「ボリューム名」を特定の共用に関連付けます。これは特に、CD-ROM の内容をエクスポートするために Samba 共用を使用している場合に便利です。多くのインストール・プログラムは、CD から正確なボリューム名が検索されることを予期し、その名前が見つからないとインストールができなくなってしまいます。

volume の例

volume=My Favorite CD

create mask=
Samba は create mask を使用して、新規に作成されたファイルに対する適切な権限を設定します。create mask は、新規に作成されたファイルでどのような権限が許可されるのかを定義します。ここで指定した 8 進数が、バイナリーと AND 操作により、希望する権限と結合されます。これにより、マスクに含まれていない権限が新規ファイルの権限から除去されます。

create mask の例

        create mask= 0755

directory mask=
directory mask= は create mask= と似た働きをします。ここで指定した 8 進数は、新規ディレクトリーで許可される権限を定義します。

smb.conf の多くのオプション

このセクションでは、便利でセキュアな Samba システムを構成するために不可欠な smb.conf オプションだけを説明しました。Samba 自体には、このほかにも便利な構成オプションがたくさん用意されています。それらのオプションの詳細については、smb.conf のメイン・ページを調べてください。オプションのリストと詳しい説明が記載されています。(参考文献を参照してください。)

Samba からの印刷

Samba のプリンター共用機能は、使いやすくて強力です。覚えていると思いますが、Samba では、既存の lpd ベースのプリンターをエクスポートして、Windows クライアントがそのプリンターに接続して印刷を行えるようにすることができます。このやり方の優れた点の 1 つは、プリンター特定のコードがすべて Windows 側で生成されることです。つまり、Unix システムが特定のプリンター用の明示的なサポートを行う必要はありません。Unix システムが生データをプリンターにダンプできさえすれば、きちんと印刷することができます。また、私が使っている Adobe PrintGear ベースの NEC SuperScript 870 のような、純粋な Unix 環境では完全に機能しないプリンターを共用し、使用することもできます。

Samba の印刷の仕組み

印刷を正常に行うためには、lpd が正常に作動する必要があります。lpd 構成は、この記事で扱う対象からは外れていますが、それほど大変なことではなく、linuxdoc.org の印刷に関する FAQ で詳しく説明されています。(参考文献を参照してください。) プリンターを、デフォルトで「未加工」プリンターになるように構成することにより、lpr コマンドを使用してこのプリンターに送られたデータがすべて、フィルター操作やメッセージ交換を経ずに、そのままコピーされるようにする必要があります。lpd が「未加工」モードで構成されているかどうかは、簡単に確認することができます。Windows 側で、FILE: への印刷を行う特定のプリンター用のプリンター・ドライバーをインストールしてください。使い慣れた Windows ワード・プロセッサーからページを印刷して、そのページをファイルに保管します。その後でそれを Unix マシンにコピーし、lpr を使用して印刷します。正しい出力が得られた場合には、そのプリンターを自動的に使用するように Samba を構成することができます。

Samba によるグローバル印刷

Samba が Linux システムで正しく印刷を行えるようにするためには、[global] セクションに以下のパラメーターを追加する必要があります。

printcap name=/etc/printcap
       printing=bsd

printcap が他の位置にある場合には、それに応じて printcap name= パラメーターを調整してください。標準 BSD lpd 以外の印刷システムを使用している場合には、smb.conf メイン・ページの printing= オプションの説明を参照して、ユーザーの印刷システムで Samba を使用するための詳しい方法を調べてください。

プリンター共用の設定を行うことにします。ここに示すのは、私が自分のプリンターのために smb.conf に追加したコードです。これをひな型として使用してください。

[nec]
        #my NEC SuperScript 870
        path=/var/spool/smb
        print command=/usr/bin/lpr %s
        lprm command=/usr/bin/lprm -P%p %j
        printer=lp
        public=yes
        printable=yes

最初に、path パラメーターのことを理解しておく必要があります。Samba は、Windows から印刷ジョブを受け入れた場合、ディスクのどこかにそれを保管してからでなければ、lpr を使用してジョブをサブミットすることができません。path= パラメーターが参照するディレクトリーには、他の人がこのディレクトリーに書き込めるようにするために、Unix 権限 1777 が指定されていなければなりません。print command= 行と lprm= 行は、普通は必要ありません。印刷コマンドの正確なパスを指定したい場合、または何らかのコマンド行パラメーターを lpr に渡す必要がある場合には、これらの行を組み込んでください。上記のマクロを例として利用してください。%s が展開されると一時ファイル名になり、%p が展開されるとプリンター名になり、%j が展開されるとジョブ番号になります。

printer= オプションは、Samba に対し、どの Unix プリンターで印刷を行うのかを指示します。このプリンターが未加工モードでセットアップされていることを確認してください。public=yes を指定すると、パスワードを入力しないユーザーでもこのプリンターに接続できるようになります。セキュリティーを強化したい場合には、後でこのオプションを除去してください (セキュリティーを本格的に強化したい場合には、この行を valid users= 行で置き換える必要があります)。printable=yes は Samba に対し、この共用をプリンターとして構成すべきであること、およびこの共用が印刷ジョブを受け入れられるようにすることの両方を指示します。

Samba を再始動すると、新規プリンターが Windows から見えるようになるはずです。この時点で、このプリンターを Windows 側でインストールし、新しい共用リソースにテスト・ページを出力することができるはずです。(Windows は、NULL プリンター用のドライバーをインストールしていることを知らせてきます。心配する必要はありません。リストから正しいプリンター・ドライバーを選択してください。) 何らかの理由で印刷ができない場合には、/var/log/log.smb を検査して、エラー・メッセージがないか調べてください。プリンター関連の、役に立つ smb.conf 構成オプションがたくさんあります。ここに示したのは、最も広く使われているものだけです。smb.conf メイン・ページを調べて、すべてのオプションを良く理解するようにしてください。

仕上げ

この記事では、ホーム・ディレクトリーや印刷の共用を含めた、Samba 機能の主要な要素を説明しました。また、いくつかのセキュリティー関連パラメーターも取り上げました。しかし、これが Samba のすべてだとは思わないでください。Samba は強力であるだけでなく、構成の自由度が非常に高くなっています。組織内でどのように、またどの程度まで使用するのかを、アドミニストレーターが決められるように設計されています。Samba をセットアップするためには、手作業による smb.conf 構成がかなり必要ですが、ユーザーの要求どおりに すべてが機能するようになるため、かけた手間に十分見合うだけの結果が得られます。

Samba には、Windows NT ドメイン全体の一部となる (あるいはそのドメインを制御する) 機能など、ここで触れることのできなかった機能がまだあります。このすばらしく強力なツールの可能能力を完全に調べ尽くすことを、ぜひお勧めします。


ダウンロード可能なリソース


関連トピック

  • Samba はSamba のメイン Web サイトからダウンロードすることができます。
  • frgpasswrd は、Samba パスワードとシャドー・パスワードを同時に設定するためのパスワード同期化ユーティリティーです。
  • SambaLink/Q は、smb.conf ファイルのための、バージョンから独立したエディターです。
  • Samba by Ed Weinberg を参照してください。
  • Using Samba (O'Reilly Publishing; 1999) は Samba の管理に関する包括的なガイドであり、Windows NT ドメインや SWAT グラフィック構成ツールとの統合などの、最新の話題が追加されています。
  • SWAT のメイン・ページを訪問してください。
  • Samba/iX を調べてください。HP e3000 で MPE/iX オペレーティング・システムを実行して、Microsoft の Message Block (SMB) を使用するサービスを提供できるようにする、一連のプログラムが掲載されています。
  • Samba Unleashed, by Steve Litt を参照してください。Daniel Robbins が寄稿しています。

コメント

コメントを登録するにはサインインあるいは登録してください。

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Linux
ArticleID=230649
ArticleTitle=共通のスレッド: Sambaへの招待、第3回
publish-date=07012000