この記事では、以下の概念について学びます。
- TDB (Trivial Database) ファイルをバックアップする
- TDB ファイルを復元する
- TDB ファイルの破損を検出する
- TDB ファイルの内容を編集/一覧表示する
この記事は、LPIC-3 Specialty「302 Mixed Environment Exam」試験の主題 310 の目標 310.3 の試験対策となります。この目標の重要度は 1 です。
この連載記事を最大限に活用するには、Linux の高度な知識と、記事に記載されたコマンドを演習できる実際の Linux システムが必要です。具体的には、この記事では読者が Linux コマンドライン関数の実用的な知識を持っていること、そして「Learn Linux, 302 (Mixed environments): Concepts」で説明している Samba の目的について、少なくとも全般的に理解していることを前提とします。記事で説明するアクションを実行するには、Samba ソフトウェアがインストールされている必要があります。また、一部のアクションでは、実際の SMB (Server Message Block)/CIFS (Common Internet File System) ネットワークを自由に使用できることも条件となります。
Samba は実行時に、ローカル・パスワードから、アクセスが期待されるクライアントのリストに至るまで、大量の情報を保管します。これらのデータのなかには、短期間しか有効でないため、Samba の再起動時に破棄できるものもありますが、その一方、永続的に使用するために失ってはならないデータもあります。メモリー内に保持するにはサイズが大きすぎるか、あるいはアクセス頻度が少なすぎるデータだとしても、永続的なデータは再起動後にも存続させる必要があります。このような要件に対処するために、Samba チームは Trivial Database を作成しました。このデータベースは、実際には key-value 型ストアです。key-value 型ストアとはつまり、データは一意のキーを使って格納および取得されますが、リレーショナル・データベースでのようにテーブルの結合は行われないことを意味します。TDB にも言えることですが、key-value 型ストアは、データをディスクに格納して取得する手っ取り早い方法となるように設計されています。
TDB の代わりとなる手段は、GDBM (GNU Database Manager) をはじめ、数多くあります。けれども Samba プロジェクトには、複数のプロセスが同時にデータベースに書き込みできるようにするとともに、内部データのロックをサポートしなければならないという特殊な要件がありました。そのために Samba チームが作成した独自のデータベース・マネージャーが、Trivial Database Manager です。TDB はその後、CTDB (Clustered TDB) プロジェクトにより、クラスタリングされた操作をサポートするように拡張され、今では他のプロジェクトにも使用できるようになっています。
IBM DB2、MySQL、または PostgreSQL などのリレーショナル・データベースに慣れ親しんでいる方にとって、key-value 型ストアはリレーショナル・データベースと比較すると原始的に感じられることでしょう。リレーショナル・データベースでは複数の列からなるテーブルを使用できる一方、key-value 型ストアでは事実上、キーの列と値の列の 2 つしか使えません。リレーショナル・データベースは SQL (Structured Query Language: 構造化問合せ言語) を使用して複数のテーブルおよび列から情報を抽出しますが、key-value 型ストアでの操作はキー列に限られます。
その単純さから、key-value 型ストアが役に立つのは数の少ないジョブのセットとなりますが、少数のジョブのセットであれば極めて素早く処理することができます。基本的に、key-value 型ストアはディスク上のハッシュ・テーブルであるため、索引を調べなくてもデータが置かれている位置を推測できるからです。
TDB は特に、多数の同時書き込み操作への対処と、内部データ構造などのバイナリー・データの処理に重点を置いて作成されました。したがって、バイナリー形式のデータであれば、極めて高速に格納、取得することができます。データをバイナリー形式で格納するということは、データベース・ファイルのサイズが小さくなること、データベースにデータを出し入れする際に、データの形式を変換する必要がないことを意味します。
Samba は TDB ファイルをいくつかの異なる場所に格納します。このように異なる場所に格納される TDB ファイルを見つけるには、smbd -b の出力を調べるのが最も簡単な方法です (リスト 1 を参照)。
リスト 1. smbd ビルド情報の表示
# smbd -b ... Paths: SBINDIR: /usr/sbin BINDIR: /usr/bin SWATDIR: /usr/share/swat CONFIGFILE: /etc/samba/smb.conf LOGFILEBASE: /var/log/samba LMHOSTSFILE: /etc/samba/lmhosts LIBDIR: /usr/lib MODULESDIR: /usr/lib/samba SHLIBE1T: so LOCKDIR: /var/lib/samba STATEDIR: /var/lib/samba CACHEDIR: /var/lib/samba PIDDIR: /var/run SMB_PASSWD_FILE: /var/lib/samba/private/smbpasswd PRIVATE_DIR: /var/lib/samba/private |
リスト 1 では、いくつかのパスが TDB ファイルのある場所を指しています。幸い、その多くは同じ場所であるため、調べる必要のある場所の数は絞られます。例えば、LOCKDIR、STATEDIR、および CACHEDIR はいずれも /var/lib/samba を指していて、PRIVATE_DIR はそのサブディレクトリーの private に置かれています。これらのディレクトリーに移動すれば、TDB ファイルを調べることができるというわけです。
TDB ファイルは大きく分けて、永続的なファイルと一時的なファイルの 2 つに分類することができます。表 1 に、永続的なファイルの名前とそれぞれのファイルの役割を記載します。
表 1. 永続的な TDB ファイル
| ファイル名 | 用途 |
|---|---|
| account_policy.tdb | アカウント・ポリシー (ロックアウトしきい値、パスワード長など) を格納します。 |
| group_mapping.tdb | Windows NT ユーザー ID (SID) と UNIX® ユーザー ID との関係を格納します。 |
| ntdrivers.tdb | プリンター・ドライバーに関する情報を格納します。 |
| ntforms.tdb | プリンター・キューのフォーム (例えば、用紙サイズなど) に関する情報を格納します。 |
| ntprinters.tdb | プリンターの初期設定に関する情報を格納します。 |
| passdb.tdb | 一部のセキュリティー・モードでのみ、認証クレデンシャルを格納するために使用されます。 |
| registry.tdb | 他の Windows システムがアクセスできるスケルトン・レジストリーです。 |
| secrets.tdb | ワークステーションのマシン・キー、LDAP (Lightweight Directory Access Protocol) パスワードのようなクレデンシャルなど、内部設定情報を格納します。 |
| share_info.tdb | ローカル共有ごとのアクセス制御リスト (ACL) 情報を格納します。 |
| winbindd_idmap.tdb | Windows NT SID と動的に作成されるユーザーとの間のマッピング情報を格納します (winbind を使用している場合)。 |
表 1 に記載した TDB ファイルは、バックアップをとっておく必要があります。その手順については、後で説明します。
永続的な TDB ファイルに加え、状態情報とキャッシュされたデータを格納する一時的な TDB ファイルも数多くあります。これらの一時的な TDB ファイルは Samba の起動時に再び作成されるため、バックアップする必要はありません。
TDB ファイルを操作するためのツールとして、Samba には以下の 3 つのツールが組み込まれています。
tdbdump: TDB ファイルの内容を出力します。tdbbackup: TDB ファイルをバックアップおよび検証します。tdbtool: TDB ファイルを作成、表示、変更します。
TDB ファイルの内容を調べるのに最も手っ取り早い方法は、tdbdump コマンドを使ってファイルをダンプすることです。リスト 2 に、ntprinters.tdb ファイルのダンプを記載します。
リスト 2. TDB ファイルで tdbdump を使用する
[root@bob ~]# tdbdump /var/lib/samba/ntprinters.tdb
{
key(21) = "GLOBALS/c_setprinter\00"
data(4) = "\00\00\00\00"
}
{
key(13) = "SECDESC/test\00"
data(140) = "\80\00\00\00\00\00\02\00\80\00\00\00\01\00\04\80\14\00\00\00$\00\00
\00\00\00\00\004\00\00\00\01\02\00\00\00\00\00\05 \00\00\00 \02\00\00\01\02\00\00
...
\00 \02\00\00\00\02\18\00\0C\00\0F\10\01\02\00\00\00\00\00\05 \00\00\00 \02\00\00"
}
{
key(17) = "SECDESC/cups-pdf\00"
data(140) = "\80\00\00\00\00\00\02\00\80\00\00\00\01\00\04\80\14\00\00\00$\00\00
\00\00\00\00\004\00\00\00\01\02\00\00\00\00\00\05 \00\00\00 \02\00\00\01\02\00\00
...
\00 \02\00\00\00\02\18\00\0C\00\0F\10\01\02\00\00\00\00\00\05 \00\00\00 \02\00\00"
}
|
リスト 2 の出力から、このデータベースには 3 つのキーがあることがわかります。最初のキーは 21 バイトの長さで (バイト長は、括弧に囲まれて示されています)、その名前は GLOBALS/c_setprinter の後に NULL (ASCII のゼロ文字) が続いた形となっています。印字不能文字は、バックスラッシュの後に 2 つの 16 進文字が続く 16 進形式で示されます。最初のキーの値は 4 バイトの長さで、すべて NULL となっています。
その後の 2 つのキーは、それぞれ SECDESC/test、SECDESC/cups-pdf という名前で、どちらの名前も NULL で終わっています。データはすべてバイナリーであり、印字できないため、16 進形式の印字不能文字で出力されています。
表 1 に記載した、リブート後にも永続的に使用される TDB ファイルは、バックアップが必要です。大抵のデータベースと同じく、ファイルをただコピーするだけでは、コピーが破損する恐れがあります。書き込み中のファイルをコピーした場合にはバックアップが破損するため、そのバックアップは矛盾した状態になります。代わりに使える手段の 1 つは、Samba デーモンをシャットダウンしてから、ファイルをコピーすることです。
TDB ファイルをバックアップするには、Samba に付属の tdbbackup ユーティリティーを使用するのが最も簡単な方法となります。このユーティリティーは、TDB ファイルで書き込み操作が行われている最中だとしても、TDB ファイルを安全にコピーします。さらに tdbbackup にはもう 1 つの有用な機能があります。それは、TDB ファイルが破損していないかどうかを確認し、破損が見つかった場合には自動的にバックアップ・ファイルに戻すという機能です。リスト 3 に、TDB ファイルのバックアップの様子を示します。
リスト 3. TDB ファイルのバックアップ
[root@bob samba]# ls -l account_policy.* -rw------- 1 root root 8192 Apr 7 2008 account_policy.tdb [root@bob samba]# tdbbackup account_policy.tdb [root@bob samba]# ls -l account_policy.* -rw------- 1 root root 8192 Apr 7 2008 account_policy.tdb -rw------- 1 root root 36864 Dec 8 21:42 account_policy.tdb.bak [root@bob samba]# tdbdump account_policy.tdb | md5sum 53ea608f0d93061480549c511756b778 - [root@bob samba]# tdbdump account_policy.tdb.bak | md5sum 53ea608f0d93061480549c511756b778 - |
リスト 3 の最初のコマンドは、コピーが 1 つしかないことを確認するために、名前が account_policy で始まるすべてのファイルを単純にリストアップします。次に、このアカウント・ポリシー・データベースをバックアップするために、tdbbackup account_policy.tdb を実行します。3 番目のコマンドは、名前が account_policy で始まるすべてのファイルを検索し、拡張子が .bak の新しいファイルが作成されていることを示しています。バックアップ・ファイルのサイズは、オリジナル・ファイルのサイズとは異なっていますが、それぞれのファイルをダンプして MD5 ハッシュを計算すると、チェックサムの値は同じであるという結果が得られます。つまり、キーと値の各ペアの内容はまったく同じであるため、ファイル・サイズが増加していても問題はありません。
例えばシステムの強制シャットダウンなど、何らかの理由でオリジナルの account_policy.tdb ファイルが破損したとしても、ファイルのバックアップから以前のファイルを復元することができます。リスト 4 に、その手順を記載します。
リスト 4. TDB ファイルの検証と復元
[root@bob samba]# ls -l account_policy.tdb -rw------- 1 root root 1213 Dec 8 21:49 account_policy.tdb [root@bob samba]# tdbbackup -v account_policy.tdb tdb_oob len 1256 beyond eof at 1213 restoring account_policy.tdb [root@bob samba]# ls -l account_policy.tdb* -rw------- 1 root root 36864 Dec 8 21:49 account_policy.tdb -rw------- 1 root root 36864 Dec 8 21:42 account_policy.tdb.bak [root@bob samba]# tdbbackup -v account_policy.tdb account_policy.tdb : 17 records [root@bob samba]# tdbdump account_policy.tdb | md5sum 53ea608f0d93061480549c511756b778 - |
リスト 4 の最初のコマンドは、ファイル・サイズが大幅に減少していることを示しています。そこで、再度 tdbbackup コマンドを実行しますが、この場合には TDB ファイルを検証するための -v フラグを設定します。ファイルが破損している場合、エラーの要約に続き、ファイルが復元されたという注釈が表示されます。ls コマンドで 2 つのファイル・サイズを比較すると、現行のデータベースを置き換えるためにバックアップ・ファイルが使用されたことがわかります。
tdbbackup コマンドは、何度実行しても問題ありません。例えばリスト 4 の最後から 2 番目のコマンドのように、このコマンドを有効なデータベース・ファイルに対して実行した場合には、ファイルに含まれるレコードの数が返されます。また、MD5 チェックサムの値も破損前に示されたものと同じです。
注: tdbbackup コマンドはワイルドカードを受け入れるため、一度に複数のファイルをバックアップして検証することができます。
tdbtool ユーティリティーを使用して、TDB ファイル内のデータを変更することができます。このユーティリティーはファイルに含まれる個々のキーと値の検査も行うため、ファイル全体をダンプして出力を調べる必要がなくなります。
tdbtool は、コマンドラインでコマンドを受け入れることができます。あるいは、対話型コンソールを開くことも可能です。コマンドラインでタスクを完了するには、tdbtool example.tdb command options を実行します。ここで、example.tdb はファイルの名前、command はコマンドです。options は、コマンドの最後に追加します。tdb シェルを使用する場合は、tdbtool を単独で実行するか、またはコマンドラインでファイルの名前を渡します。
データベースを作成するには、tdbtool を単独で実行した後、create test.tdb と入力します。すると、ディスク上に test.tdb という名前のデータベース・ファイルが作成されて開かれます。したがって、このセッションで行う変更はすべて、このファイルで行われることになります。既存の TDB ファイルがある場合は、コマンドラインにその名前を指定するか、open コマンドを使用します。奇妙なことに、コマンドラインから直接 TDB ファイルを作成する唯一の方法では、例えば tdbtool test.tdb create test.tdb といったように、ファイル名を 2 回指定しなければなりません。これによってエラーが返されますが、データベースは正常に作成されます。
新規データベース・ファイルを作成した後、または既存のデータベース・ファイルを開いた後は、以下のオプションを使用することができます。
dump:tdbdumpと同じように、データベースの中身をすべて表示します。keys: キーのみを ASCII 形式で表示します。キーを 16 進形式で表示するにはhexkeysコマンドを使用します。erase: プロンプトを出さずに、データベースの中身をすべて削除します。info: データベースで使用されているキーの数とバイト数の要約を表示します。check: データベースが有効であるかどうかをチェックします。speed: データベースに対するデータの読み取り/書き込みの処理速度を調べるテストを行います。show key: 該当するキーで格納されている値を出力します。delete key: キーと値を削除します。
データを追加および操作するためのコマンドには、insert と store コマンドがあります。この 2 つのコマンドはそれぞれ、キーおよび値をパラメーターとして受け入れます。値はオプションであり、指定しない場合には、キーの値にはゼロ・バイトのデータが格納されていると示されます。
レコードを挿入するということは、つまり新規レコードを作成することです。一方、レコードを保管することによって、既存のエントリーを上書きすることができます。リスト 5 に、この 2 つのコマンドの違いを示します。
リスト 5. レコードを保管する場合と挿入する場合の違い
tdb> insert mykey myvalue tdb> insert mykey newvalue insert failed tdb> store mykey newvalue Storing key: key 5 bytes mykey data 8 bytes [000] 6E 65 77 76 61 6C 75 65 newvalue tdb> store newkey someothervalue Storing key: key 6 bytes newkey data 14 bytes [000] 73 6F 6D 65 6F 74 68 65 72 76 61 6C 75 65 someothe rvalue |
以下に、リスト 5 のイベント・シーケンスを説明します。
myvalueという値を持つmykeyというキーを挿入します。この操作は成功します。- 名前は同じで、新しい値を持つキーを挿入します。この操作は失敗します。それは、同じ名前のキーがすでに存在しているためです。
- キーを挿入するのではなく、キーを保管します。この操作は成功し、さらに詳細な出力が示されます。
- 新しい値を持つ新しいキーを保管します。同じ名前を持つ既存のキーはありませんが、この操作は成功します。
tdb シェルでのトランザクションを使用して、一連のコマンドを実行し、これらのトランザクションをまとめて適用したり、あるいはまとめて取り消したりすることも可能です。リスト 6 に 2 つのトランザクションを記載します。
リスト 6. トランザクションを使用する
tdb> transaction_start tdb> insert somekey somevalue tdb> show somekey key 7 bytes somekey data 9 bytes [000] 73 6F 6D 65 76 61 6C 75 65 somevalu e tdb> transaction_cancel tdb> show somekey fetch failed tdb> transaction_start tdb> insert somekey somevalue tdb> transaction_commit tdb> show somekey key 7 bytes somekey data 9 bytes [000] 73 6F 6D 65 76 61 6C 75 65 somevalu e |
上記のトランザクションは、transaction_start コマンドによって開始されます。トランザクションが開始された後、キーが挿入されます。このトランザクションはコミットされていないことから、別のプロセスがデータベースの読み取り操作を行っている場合には、そのプロセスにはこのキーが見えません。トランザクションを開いているプロセスには、キーが見えます。トランザクションがその後、transaction_cancel によって取り消されると、キーは表示されなくなります。
次に、プロセスが再実行されますが、トランザクションは transaction_commit によってコミットされます。すると、すべての読み取りプロセスからキーが見えるようになります。
トランザクションの処理中は、他の読み取りプロセスはブロックされる可能性があります。つまり、トランザクションが完了するまで、他の読み取りプロセスは中断されることになる、ということです。このことから、本番データベースでトランザクションを使用する場合には注意してください!トランザクションは優れた安全機能ですが、使用し過ぎると、パフォーマンスを劣化させる可能性があります。
構成に応じて、ユーザー・アカウントはさまざまな場所に保管することができます。その際、2 つのツールがコマンドライン・インターフェースになると同時に、バックエンドの通信を処理します。例えば、ユーザー・データが TDB ファイルではなく、LDAP に保管されているとしても、同じコマンドを使用することができます。
smbpasswd ユーティリティーは、ユーザー・アカウントまたはマシン・アカウントの追加と削除、およびパスワードの変更を行うことができます。最もよく使用されているのは、後者のタスクを実行する場合です。カレント・ユーザーのパスワードを変更するにも、root として別のユーザーのパスワードを変更するにも、smbpasswd が最もよく使用されています。
各種のパスワード・バックエンドについては今後の記事で詳しく学びますが、大まかに説明しておくと、Samba のバージョン、そして統合対象とするシステムによって、Samba のパスワードはさまざまな方法で保管されます。smbpasswd と (次に説明する) pdbedit はそれぞれのアクションを、TDB 以外のバックエンドを含む、あらゆるバックエンドに対して実行することができます。
Microsoft クライアントがネットワーク経由でパスワードを送信する場合には、平文や UNIX パスワード・ハッシュとしてではなく、Microsoft 固有のハッシュとして送信します。つまり、Microsoft パスワード・ハッシュを取得して、そのパスワードが UNIX パスワード・データベースに格納されているパスワードと同じであるかどうかを判断することはできません。そのため、Samba は必要な措置として Microsoft ハッシュ用に別個のパスワード・データベースを保持します。このデータベースが、パスワード・バックエンドと呼ばれるものです。
pdbedit は、Samba ユーザー・データベースとアカウント・ポリシーを管理します。このユーティリティーは、smbpasswd が実行可能なすべての操作に加え、ポリシーを管理し、各種バックエンドの間でアカウントをマイグレーションすることができます。
データベース内のすべてのユーザーを表示するには、pdbedit -L を実行します。-v フラグを渡すと、ユーザーに関するさらに詳しい情報を取得することができます (リスト 7 を参照)。
リスト 7. ユーザーの詳細な一覧表示
[root@bob tmp]# pdbedit -L -v --------------- Unix username: sean NT username: Account Flags: [U ] User SID: S-1-5-21-2287037134-1443008385-640796334-1001 Primary Group SID: S-1-5-21-2287037134-1443008385-640796334-513 Full Name: Sean Home Directory: \\bob\sean HomeDir Drive: Logon Script: Profile Path: \\bob\sean\profile Domain: BOB Account desc: Workstations: Munged dial: Logon time: 0 Logoff time: never Kickoff time: never Password last set: Mon, 24 May 2010 21:28:49 CDT Password can change: Mon, 24 May 2010 21:28:49 CDT Password must change: never Last bad password : 0 Bad password count : 0 Logon hours : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
pdbedit コマンドは、root としてログインしなければ機能しません。このコマンドを Microsoft ユーティリティーと同じであるかのように使用して、最終ログイン時刻、パスワードの変更、そしてホーム・ディレクトリーなど、さまざまなユーザー設定を編集することができます。
ユーザー・パラメーターには、それぞれに固有のコマンドライン・オプションがあるので、詳細については man ページの pdbedit(8) を参照してください。
もう 1 つ注意する点として、Samba はマシン・アカウントとユーザー・アカウントを同じように扱います。リスト 8 に、ドメイン・コントローラーとして構成された Samba サーバーのパスワード・データベースを記載します。
リスト 8. マシン・アカウントが含まれる、パスワード・データベース
[root@sergeant ~]# pdbedit -L root:0:root mythupstairs$:4294967295:MYTHUPSTAIRS BOB$:1043:Machine sean:1002:Sean,,, sergeant$:4294967295:Machine |
ドル記号 ($) で終わる名前が、マシン・アカウントです。これらのマシン・アカウントは、マシンをドメインに対して認証するために使用されます。対応する機密情報は、リモート・サーバー上の secrets.tdb とドメイン・コントローラー上の passdb.tdb に格納されます。
今回の記事で、主題「概念、アーキテクチャー、および設計」についての説明はすべて終わりました。次回の記事では、主題 311 に移り、Samba ソース・コードをダウンロードしてコンパイルする方法を学びます。
学ぶために
smbpasswdとpdbeditが機能する方法についての詳細を含め、さまざまなパスワード・バックエンドについて読んでください。- NT LAN Manager プロトコルについて学び、ユーザーの認証時に何が送信されるかを理解してください。
- Samba マニュアルの第 41 章に、TDB データベースに関する詳細と問題のトラブルシューティング方法が説明されています。
- 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 をダウンロードして、最新のソフトウェア開発を実践してください。
- プロジェクトで TDB を使用してみたいという場合には、TDB ソース・コードをダウンロードしてください。
- さまざまな環境で統一したグラフィカル・インターフェースを使用したい場合、あるいは環境の統合を改善したい場合には、Samba のアカウント管理ツールを調べてください。
- ご自分に最適な方法で IBM 製品を評価してください。評価の方法としては、製品の試用版をダウンロードすることも、オンラインで製品を試してみることも、クラウド環境で製品を使用することもできます。また、SOA Sandbox では、数時間でサービス指向アーキテクチャーの実装方法を効率的に学ぶことができます。
議論するために
- My developerWorks コミュニティーに加わってください。ここでは他の developerWorks ユーザーとのつながりを持てる他、開発者が主導するブログ、フォーラム、グループ、ウィキを調べることができます。
