この記事では、以下の概念について説明します。
- Samba のセキュリティー・モデル
- コアとなる Samba デーモンの役割
- Samba デーモンの管理
この記事は、LPIC-3 Specialty「302 Mixed Environment Exam」試験の主題 310 の目標 310.2 の試験対策となります。この目標の重要度は 1 です。
この連載記事を最大限に活用するには、Linux の高度な知識と、記事に記載されたコマンドを演習できる実際の Linux システムが必要です。具体的には、この記事では読者が Linux コマンドライン関数の実用的な知識を持っていること、そして「Learn Linux, 302 (Mixed environments): Concepts」で説明している Samba の目的について、少なくとも全般的に理解していることを前提とします。記事で説明するアクションを実行するには、Samba ソフトウェアがインストールされている必要があります。また、一部のアクションでは、実際の SMB (Server Message Block)/CIFS (Common Internet File System) ネットワークを自由に使用できることも条件となります。
Linux サーバーは多くの場合、デーモンとして実装されます。デーモン (daemon)
とは、ギリシャ神話に由来する言葉で、神話のなかで、デーモンは頼りになる超自然的な存在でした。Linux
デーモンも、バックグラウンドで動作して有用なタスクを行います。Samba サーバー・スイートは、smbd、nmbd、winbindd などの複数のデーモンからなります。swat プログラムも Samba サーバーの 1 つですが、通常はスーパー・サーバーとして動作するため、厳密に言うとデーモンではありません。
smbd プログラムは、Samba のコア機能の大部分を提供します。その役割には、以下の内容が含まれます。
- ファイル共有およびプリンター共有サービスの提供。この機能はほぼ間違いなく、最も重要な Samba の役割であり、
smbdがその役割を担っています。 - ユーザーの認証。
smbdはローカル・データベースに照らし合わせてユーザーを認証するか、または認証リクエストを他のコンピューターに引き渡します。Samba サーバーがドメイン・コントローラーとして構成されている場合には、smbdは他のコンピューターからの認証リクエストにも応答します (ワークグループとドメイン構成については、「セキュリティー・モードの設定」セクションで説明します)。 - 時刻サービスの提供。Samba は他のコンピューターに現在の時刻を通知することができます。その詳細は、
smbdが処理します。
デフォルトでは、smbd デーモンは TCP ポート 139 および 445 にバインドします。SMB プロトコルは、NetBIOS over TCP を介してポート 139 を使用します。多くの古いクライアントは、この方法で SMB/CIFS を利用しています。比較的新しい多くのクライアントは、Samba サーバーにアクセスする手段として、シンプルな SMB over TCP サービスを提供するポート 445 を使用しています。
以上の役割 (特に、ファイルおよびプリンターの共有サービス、認証サービスの提供) の重要性から、smbd は Samba
のコアであると見なせます。実際、smbd を単独で実行するコンピューターに Samba 独自の smbclient などのプログラムを使用して接続し、ファイル転送を行うことができます。けれどもクライアントのなかには、他の Samba デーモンが提供するサービスに依存するクライアントもあります。
2 つ目の重要な Samba デーモンは、nmbd
です。このサーバーの主な役割は、名前関連のタスクを処理することで、いわば DNS (Domain Name System) の Samba
バージョンといったところです。ただし、DNS よりは簡単に構成できて、その分、DNS に比べると精巧さに劣ります。nmbd が行う具体的なタスクには、以下のものがあります。
- 名前のブロードキャストへの応答。共通の操作モードの 1
つでは、クライアントがネットワーク・セグメント全体に名前クエリーをブロードキャストします。
nmbdサーバーはこのようなブロードキャストをリッスンし、Samba がクエリー対象の名前を使用するように構成されている場合には、ブロードキャストに応答します。また、Samba が別のコンピューターまたはネットワークのプロキシーとして機能するように構成されている場合にも応答します。 - NetBIOS 名の登録。NetBIOS 名が解決されるようにするためには、コンピューターがその名前を中央 NetBIOS ネーム・サーバー (NBNS: 別名、WINS
(Windows Internet Name Service) サーバー)
に登録するか、名前をブロードキャストして、ネットワーク全体でその名前の権利をネゴシエートすることによって、その名前を登録する必要があります。
nmbdは、ネーム・サーバーへの名前登録を行うだけでなく、名前を登録する他のコンピューターともネゴシエートします。 - NBNS サーバーとしての役割。Samba は、NBNS システムとして構成することができます。この場合、
nmbdが NBNS サーバーの役割を引き受けます。 - マスター・ブラウザーとしての役割。SMB/CIFS
ネットワークのユーザー・エクスペリエンスには、ブラウズも含まれます。つまり、ハード・ディスク上のディレクトリーをブラウズするのと同じように、ネットワーク上のサーバーをブラウズすることができます。この機能を可能にするのは、ブラウズ・リストを収集して広めるマスター・ブラウザーの存在です。Samba
がマスター・ブラウザーとして機能する場合には、
nmbdがその役割を引き受けます。
上記のリストから明らかなように、nmbd
は多くの仕事をこなします。これらのタスクはファイルやプリンターの提供には関係しませんが、その多くは、あらゆる SMB/CIFS
サーバーに極めて重要な部分であるため、nmbd は Samba に欠かせない部分と言えます。nmbd
は通常、ディストリビューションの起動スクリプトによって smbd と一緒に実行されます。
nmbd の機能のほとんどでは、TCP ポート 137 にバインドされていることが要件となりますが、マスター・ブラウザーとしてのタスクには、UDP のポート 138 が使用されます。
3 つ目の Samba デーモンは、winbindd という名前の Winbind デーモンです。smbd や nmbd とは異なり、winbindd はリモート・コンピューターを対象としたサービスを提供するのではなく、Windows® (または Samba) ドメイン・コントローラーとローカル・コンピューター独自の PAM (Pluggable Authentication Modules: プラガブル認証モジュール) ツールとの間のインターフェースとして機能し、ドメイン・コントローラーが Linux アカウント情報をホストできるようにします。
多くのディストリビューションでは、winbindd は他の Samba
とは別のパッケージにインストールされています。通常、そのパッケージの名前は、winbind または winbindd となっています。また、起動についても、他のデーモンとは独立して行われます。winbindd が SMB/CIFS クライアントである場合を除き、原則として winbindd は、Samba サーバーを実行していないコンピューター上でも、さらには SMB/CIFS
クライアントとして機能していないコンピューター上でも実行することができます。けれども実際には、winbindd を実行するとすれば、Samba サーバーを実行するか、あるいは Linux コンピューターを SMB/CIFS クライアントとして使用することになるはずです。
Samba を制御するには、少なくとも 2 つのタスクが伴います。1 つは Samba の構成ファイルを使用して構成オプションを調整するというタスク、もう 1
つは、一時的にオンザフライで構成オプションを変更するというタスクです。前者のタスクには Samba の構成ファイルを使用する一方、後者のタスクには smbcontrol 構成ツールを利用することができます。
主要な Samba 構成ファイルは、smb.conf という名前のファイルです。このファイルは通常、/etc/samba に格納されますが、他の場所に置かれる可能性もあります (Samba をソースからビルドした場合には、通常、/usr/local/samba/lib に置かれます)。
smb.conf ファイルは、角括弧 ([]) で囲まれた名前 ([global]、[documents] など)
で始まる複数のセクションで構成されています。その大半は、ファイル共有またはプリンター共有を定義するセクションですが、[global]
は特殊なセクションです。このセクションには、サーバー全体に影響するオプションや、後続の共有定義で使用されるデフォルト値を設定するオプションがあります ([global] セクションは通常、ファイルの先頭にあります)。
smb.conf 内の行はコメント行となっている場合もあります。その場合の行は、ハッシュ・マーク (#)
またはセミコロン (;) で始まります。これらのコメント行は、セクション名であることも、Samba のパラメーターを設定する行であることもあります。Samba のパラメーターを設定する行は、以下の形式をとります。
parameter = Value |
parameter はキーワードです (例えば、security
や create mask
など)。パラメーター名は大/小文字を認識しません。よく使われるパラメーターのなかには、同義語があるものもあります。さらに反義語を持つパラメーターもいくつかあります。例えば、writable と writeable は同義語であり、この 2
つに対する反義語は read only です。つまり、read only =
Yes は、writable = No と同じ意味になります。
パラメーターで指定する Value は、フリー・フォームの文字列、数値 (IP
アドレスなどの特殊な数値を含む)、ブール値、変数、またはリストにすることができます。ブール値に使用できる真の値は、Yes または True のいずれかで、その同義語は 1 です。偽の値は No または False のいずれかで、その同義語は0 です。
変数はパーセント記号 (%)
で始まり、構成ファイルが作成された時点では既知ではない情報の代用となります。例えば、%D
はサーバーのワークグループまたはドメイン名の代わりに、%h はサーバーの DNS 名の代わりに、%H はユーザーのホーム・ディレクトリーの代わりに、%L はサーバーの
NetBIOS 名の代わりに、そして %u はユーザーのユーザー名の代わりになるなどです。
パラメーターによっては、複数の値のリスト (ユーザー名のリストなど) を取る場合もあります。その場合、リストの要素は例えば george, mary のようにカンマで区切られて、george と mary の両方を指します。大方のところ、smb.conf ファイルはホワイト・スペースを認識しません。値にホワイト・スペースを含める必要がある場合には、ホワイト・スペースを引用符で囲む必要があります。
smb.conf ファイルには、smbd、nmbd、winbindd、そして他の Samba サーバーおよびプログラムのオプションが含まれています。これらのオプションはプログラムごとに分かれているわけではなく、明確に区別されてもいません。けれども、その名前から、パラメーターがどのデーモンに適用されるかが明らかにわかる場合もあります。
smbcontrol プログラムを使用して、実行中の Samba を制御することができます。例えば、Samba に特定の共有をシャットダウンするように指示したり、マスター・ブラウザーの選択を強制したり、構成ファイルをリロードさせたりするなどの操作を行うことができます。このコマンドの基本的な構文は以下のとおりです。
smbcontrol [-i] [-s configfile] smbcontrol [destination] [message-type] [parameter] |
-i オプションを併せて使用すると、smbcontrol
は対話モードに入ります。対話モードでは、一連のコマンドを順番に渡せるので、各コマンドの前に smbcontrol
と入力する手間を省けます。destination には、サーバー名 (smbd、nmbd、または winbindd)、all
(メッセージをすべてのデーモンに渡す場合)、またはプロセス ID 番号を指定します。message-type
はコマンドです (表 1 に要約)。parameter はオプションのパラメーターで、コマンドによっては必要になる場合があります。
表 1. ファイルシステムのボリュームおよびサイズの制限
| コマンド (message-type) | 意味 |
|---|---|
close-share | パラメーターが指定する共有を閉じます。 |
debug | デバッグ・レベルをパラメーターが指定する値に設定します。 |
force-election | 新規マスター・ブラウザーの選択を強制します。 |
debuglevel | デーモンの現行のデバッグ・レベルを表示します。 |
printnotify | プリンター共有に接続されたクライアントにメッセージを送信し、そのクライアントのキュー状況の変更を強制します。 |
samsync | ユーザー・データベースをデーモン・コントローラーに同期させます (正式なドキュメントには、この機能は現在機能していないと記述されています。この機能を使用する場合は、その前にテストしてください)。 |
shutdown | 指定されたデーモンをシャットダウンします。 |
pool-usage | 指定されたデーモンに関するメモリー使用量の情報を表示します。 |
drvupgrade | クライアントに新規プリンター・ドライバーが使用可能であることを通知します。このコマンドは、プリンター共有名をパラメーターとして取ります。 |
reload-config | サーバーに smb.conf ファイルのリロードを強制します。 |
Samba では、ユーザーの認証方法に関する多数のオプションを用意しています。そのうち最も重要なのは、security オプションです。このオプションには、以下の 5 つの値を指定することができます。
share: このセキュリティー・モードは、Microsoft® Windows 9x/Windows Me オペレーティング・システムが使用する認証方式をエミュレートすることを目的としています。この認証方式では、ユーザー名は無視され、パスワードは共有と関連付けられていました。これをエミュレートするために、Samba はクライアントが提供したパスワードを、さまざまなユーザー名で試します。user: これはデフォルトのセキュリティー・モードです。このモードでは、Linux の通常の認証方法と同様に、ユーザー名とパスワードを使用して認証します。ただし、最近のシステムではほとんどの場合、パスワードは暗号化された Samba 専用のパスワード・データベースに保管されます。server: Samba が認証を他のサーバーに任せるようにするには、この認証方式を使用します。クライアントにとって、この方式はユーザー・レベルの認証と同じように見えますが、Samba は実際の認証には、password server パラメーターで指定されたサーバーを利用します。domain: クライアントにとってはユーザー・レベルの認証のように見えますが、この認証方式を使用することで、Windows ドメインに完全に参加することができます。サーバー・レベルの認証とは異なり、ドメイン認証ではよりセキュアなドメイン・レベルのパスワードが交換されます。ドメインに完全に参加するためには、Samba システムと、おそらくドメイン・コントローラーでも追加のコマンドを実行する必要があります。ADS: この認証方式は、ドメイン認証とほとんど同じように機能しますが、これには Active Directory® Domain Services ドメイン・コントローラーが必要であるという点が異なります。
原則として、Samba サーバーが Windows ワークグループのメンバーとなっている場合には、ユーザー・レベルの認証が最善の選択となります。SMB/CIFS
ネットワークの基本形態では、Samba サーバーは Windows
ワークグループのメンバーになります。ワークグループとドメインとの主な違いは、ドメインは、ドメイン・コントローラー (ドメインに認証サービスを提供するサーバー) を提供するところにあります。ドメイン・コントローラーを使用するには、server レベル、domain レベル、または ADS レベルの security オプションを適用する必要があります。このうち、最も簡単に構成できるのは server レベルの security オプションですが、安全性に関しては最下位です。その一方、ADS レベルのセキュリティーは構成するのが最も困難ですが、最も安全性に優れています。
ドメイン・レベルまたは ADS レベルのセキュリティーの場合、ドメインに完全に参加するには、smb.conf ファイルの [global] セクションに以下のオプションを設定する必要があります。
password server = DOMCONT domain logons = No encrypt passwords = Yes |
DOMCONT システムは、ドメイン・コントローラーです。また、ドメインに参加させる Samba サーバー上で、以下のコマンドを実行する必要もあります。
# net join member -U adminuser |
さらに、Samba サーバーをドメインに受け入れるようにドメイン・コントローラーを構成しなければならない場合もあります (Samba サーバーについてのこの話題は、目標 312.4 で扱っています)。
共有レベルのセキュリティーは、今ではほとんど使用されていません。これは主に、ユーザー名を認識しない、かなり古いクライアントとの互換性のために用意されているオプションですが、例えばプリンター共有など、最小限のセキュリティーで使用できるようにしたい共有タイプに役立つこともあります。Linux ではすべてのアクセスにアカウントを使用することが要件となっているため、Samba は一致するアカウントが見つかるまで、あるいはすべてのアカウントが失敗するまで、提供されたパスワードを一連のアカウントに対して試します。これらのアカウントには、以下のものが含まれます。
guest only = Yesが設定されている場合には、(guest accountパラメーターによって設定された) ゲスト・アカウント- クライアントが提供するユーザー名 (すべてのクライアントがユーザー名を提供するわけではありませんが、一部のクライアントはユーザー名を提供します)
- クライアント・コンピューターからの最後のアクセスに使用されたユーザー名
- アクセス対象の共有の名前
- クライアントの NetBIOS 名
usernameパラメーターで指定されたあらゆるユーザー名
現在使用されているクライアントのほとんどはユーザー名を認識するため、共有レベルのセキュリティーをサポートしなければならないことはめったにありません。このセキュリティー・オプションの使用は、混乱を招き、セキュリティーのリスクを増やすだけです。これほど多くのアカウントに対してパスワードがチェックされるなか、そのうち 1 つのパスワードでも悪意のある人の手に渡れば、サーバーにとって重大なリスクとなります。
LPIC-3 の主題 310 の目標 310.3 (そして連載の次回の記事) で取り上げるのは、Samba の TDB (Trivial Database) ファイル・フォーマットです。Samba はこのファイル・フォーマットを使用してアカウント情報を保管します。
学ぶために
- LPIC Program
サイトでは、LPI の 3 つの Linux システム管理資格認定レベルについて、詳しい目標、タスクのリスト、そして出題例を調べられます。具体的には、LPI-302
の具体的な目標とタスクおよび出題例を調べてください。
- developerWorks の連載「LPI
exam prep」をすべて読んで、Linux の基礎を学び、2009年4月以前の LPI 試験の目標に基づくシステム管理者認定試験に備えてください。
- 「Exam
Preparation Resources for Revised LPIC Exams」に、LPI で管理している他の認定の教材がリストされています。
- developerWorks Linux ゾーンで、Linux
開発者および管理者向けのハウツー記事とチュートリアル、そしてダウンロード、ディスカッション、フォーラムなど、豊富に揃った資料を探してください。
- さまざまな IBM 製品および IT 業界についての話題に絞った developerWorks の Technical events and webcasts で時代の流れをキャッチしてください。
- 無料の
developerWorks Live! briefing に参加して、IBM の製品およびツール、そして IT 業界の傾向を素早く学んでください。
- developerWorks の
on-demand demos で、初心者向けの製品のインストールとセットアップから、熟練開発者向けの高度な機能に至るまで、さまざまに揃ったデモを見てください。
- Twitter で developerWorks をフォローするか、developerWorks で Linux に関するツイートのフィードに登録してください。
製品や技術を入手するために
- Samba Web サイトから、Samba のダウンロードおよび情報を入手できます。
- ご自分に最適な方法で IBM
製品を評価してください。評価の方法としては、製品の試用版をダウンロードすることも、オンラインで製品を試してみることも、クラウド環境で製品を使用することもできます。また、SOA Sandbox では、数時間でサービス指向アーキテクチャーの実装方法を効率的に学ぶことができます。
議論するために
- My developerWorks コミュニティーに加わってください。ここでは他の developerWorks ユーザーとのつながりを持てる他、開発者が主導するブログ、フォーラム、グループ、ウィキを調べることができます。
