Samba 3.0の全貌
開発者自ら語る次世代Samba

たかはしもとのぶ <monyo@home.monyo.com>
2002/3/26



編注:この記事はSamba 3.0 alpha当時のものであり、正式リリースされたSamba 3.0.xとは異なる点が少なくありません。そこで、Samba 3.0.x正式リリース版を基に2004年5月時点の最新事情を踏まえた

Samba 3.0の全貌 改訂版


を用意しました。こちらをご覧ください。

新機能の詳細と設定

 では、初めに挙げた機能の詳細と設定方法を順番に見ていきましょう。

日本語関連パラメータの変更

 われわれにとって一番影響の大きい点として、日本語関連パラメータの変更が挙げられます。現在のSambaは、いわゆる文字コード(符号化形式)の変換を自分で行っていますが、Samba 3.0では標準的なiconv()関数を利用するように実装が大幅に変更されています()。

注:なお、iconv()が存在しないプラットフォームのために、Unicode(UCS-2、UTF-8)とASCIIだけはSamba内部でサポートしています。

 従来のSambaでは、日本語を正しく扱うために、

  client code page = 932
  coding system = SJIS/EUC/CAP/HEXなど

という2つのパラメータを適切に設定することが必要でしたが、Samba 3.0では従来のパラメータに代わって新しく追加された、

  unix charset
  dos charset
  display charset

という3つのパラメータを使って文字コードを制御します。それぞれ表2のような意味を持っています。

unix charset UNIX上のファイルシステムに用いられている文字コード(符号化形式)を指定
dos charset Windows側で利用されている文字コードを指定。日本語を利用する場合は、「CP932」にする
display charset SWATの画面に表示される文字コードを指定
表2 文字コード関連パラメータ

 各パラメータの値には、iconv()関数がサポートする各種形式を指定します。通常は、以下のように指定すればよいでしょう。

unix charset = EUC-JP
dos charset = CP932
display charset = CP932
UNIX側が「EUC-JP」の場合

unix charset = CP932
dos charset = CP932
display charset = CP932
UNIX側が「シフトJIS」の場合

 なお、後述するように、現時点ではCAPやHEXはサポートされていません。また、JIS系列の文字コードを指定しても正しく動作しません()。

注:これはSamba側の制限事項というより、JISの仕様による制限だと考えてください。

 また、現状では実装がまだまだ不完全で、いくつか正しく処理できない文字が存在します。安定性もまだまだで、alpha15の時点ではEUC-JPとCP932で基本的な動作を確認していたのですが、現状ではunix charsetとしてCP932を指定するとSambaに接続できないといった状態です。

現状の課題

 この実装の変更により、日本語の利用という点ではさまざまな問題点が浮上してきています。最大のものは、CAPやHEX形式のサポートになります。

 CAPやHEXは当然iconv()ではサポートされていないので、現在Samba 3.0ではCAPやHEX形式の利用はできません。CAPやHEX形式をサポートするには、iconv()の作者にサポートをお願いするしかないのですが、Sambaという1プロダクト固有のこうした符号化形式(CAPについてはNetatalkなども利用していますが……)をiconv()に取り込むのは困難ですので、八方ふさがりの状態です。

 また、Sambaで日本語を利用するうえでiconv()が必要な点自体も、古いプラットフォームを中心に問題の種になりそうです。

 この辺りは、正式リリースまでに解決しないといけない問題ですが、問題の重要性をなかなか理解してもらえずつらいところです。

SWATの国際化

 Samba日本語版で実装されたSWATの国際化の成果が統合されました。これにより、Samba 3.0では日本語版なしの状態でも、画面1のようにSWATの国際化が実現されています。

画面1 Samba 3.0のSWAT。国際化されており、初めから日本語表示可能

 ただし、現在はインストーラの不備で国際化に必要な一部のファイルがインストールされませんので、Sambaのアーカイブのsource/poディレクトリにある「msg」という拡張子のファイルを、手作業でsmb.confと同じディレクトリにコピーしておいてください。

 なお、メッセージカタログとしては、標準的なgettext()ではなくd_print()関数という独自の実装が用いられています()。

注:技術的に、Sambaと統合するといくつか問題が発生したためです。

現状の課題

 このように、取りあえず国際化(日本語化)は達成されているものの、Samba 3.0の実装の制限上、動的な文字コード関連パラメータの変更に対応できていないことや、gettext()に含まれていたmake update-poに相当するメッセージカタログのテンプレートファイルの更新コマンドが実装されていないといった問題が残っています()。これに伴ない、現状ではメッセージカタログがパラメータの追加に対応し切れていないので、一部表示がおかしいところが発生してしまっています。

注:この辺り、本当は私の方で何とかしないといけないのですが…… (-_-;

 もっとも、これらの問題は力作業ですので、リリースまでには何とか解消できると考えています。

Active Directoryへの参加

 Samba 3.0では、Windows 2000マシンと同様にKerberos認証を使ってActive Directoryドメインに参加することが可能になっています。興味がある方も多いと思いますので、Red Hat Linux 7.2を例に具体的に参加方法を解説しましょう。

 ここでは、miyu.w2k.home.monyo.comというFQDNを持つドメインコントローラ(以下DC)が存在するW2K.HOME.MONYO.COMというActive Directoryドメインに、mapleというコンピュータ名のSambaマシンを参加させる場合を例に説明します。

 なお、Samba 3.0自身がActive DirectoryのDCとして機能することはできません。実装されているのは、クライアントとして参加する部分までとなっています。

1. 事前準備
 Active Directoryサポートを有効にするには、MIT Kerberos 5とOpenLDAPのインストールが必要です。Kerberosについては、以下のパッケージをインストールしておいてください。

  • krb5-workstation
  • krb5-libs
  • krb5-devel

 また、Kerberos認証が機能するためにはサーバとクライアント間で時刻が同期している必要があります。あらかじめ時刻を合わせておきましょう。

2. Sambaのconfigureとコンパイル
 configureオプションなどは特に不要です。configureの後、source/config.hに、

#define HAVE_KRB5 1
#define HAVE_LDAP 1

という記述があることを確認のうえ、makeを行ってください。なお、Kerberosを標準以外の場所にインストールしている場合は、--with-krb5オプションで場所を指定するとうまくいくかもしれません。

3. 設定ファイルの準備
 /etc/krb5.confの中に、

[libdefaults]
  default realm = W2K.HOME.MONYO.COM

[realms]
 W2K.HOME.MONYO.COM = {
      Active Directoryのドメイン名(Kerberos Realm名)
                        必ず大文字で記述すること
  kdc = miyu.w2k.home.monyo.com:88
              DCのFQDN名(DCを特定できる名前であれば何でもよい)
  }

という記述を追加、修正します。また、smb.confには、

[global]
  realm = W2K.HOME.MONYO.COM
  ads server = miyu.w2k.home.monyo.com
  security = ADS
  encrypt passwords = yes

という記述を行ってください。「realm」と「ads server」のパラメータの値は、環境によって変化します。

4. Active Directoryへの参加
 ここまで準備が整ったら、いよいよActive Directoryへの参加です。まずはAdministrator(もしくはそのほかの管理者権限のあるアカウント)としてActive Direcotoryにアクセスします。以下のように、kinitコマンド(/usr/kerberos/bin/kinit)を発行してください。適切なパスワードを入力した場合は何のメッセージも表示されません。

# kinit administrator
Password for administrator@W2K.HOME.MONYO.COM: ← Administratorのパスワード
#

 なお、Active Direcotoryの仕様(?)のため、Active Directory構築後にAdministratorアカウントのパスワードを一度も変更していない場合はkinitに失敗します。同じパスワードで構わないので、一度パスワードを変更しておいてください。パスワードを変更していないと、

# kinit administrator
Password for administrator@W2K.HOME.MONYO.COM:
kinit(v5): KDC has no support for encryption type while getting initial credentials
#

のようにいわれてしまい、kinitコマンドに失敗してしまいます。

 kinitコマンドに続き、net ads joinコマンドを発行してActive Directoryに参加します。

# ./net ads join
Joined 'MAPLE' to realm 'W2K.HOME.MONYO.COM'

 正常に終了した場合は、上記のように「Joined...」というメッセージが出力されます。Windows 2000 Server側で確認すると、画面2画面3のようにComputersコンテナにコンピュータアカウントが作成されているのが確認できます。

画面2 Active Directoryに「maple」が登録されている

画面3 mapleのプロパティダイアログボックス。Sambaであることが分かる

 最後に、Sambaサーバを起動してから、Sambaサーバ上にアカウントが存在するユーザーで()Windows 2000側からログオンして、Sambaサーバにアクセスしてみてください。特にパスワードを聞かれることなくアクセスできるはずです。

注:add user scriptパラメータやWinbindを利用して自動でアカウントを生成したり、アカウント情報を直接Windows側から取得する設定にした場合は、Sambaサーバ上にアカウントが存在している必要はありません。

 Active Directory参加に関する詳細は、ADS-HOWTO.txt(http://samba.org/ftp/unpacked/samba/docs/textdocs/ADS-HOWTO.txt)というドキュメントに集約されていますので、一度参照してみてください。

グローバルグループのサポート

 Samba 3.0でドメインを構築した場合(編注)に実現される機能に、グローバルグループのサポートがあります。

編注:Active Directoryドメインではなく、Windows NT 4.0までのNTドメイン。

 Samba 2.2.3までは、デフォルトで提供されているDomain AdminsとDomain Usersグローバルグループは利用できますが、それ以外のグローバルグループを利用することはできませんでした。

 これに対して、Samba 3.0は任意のグローバルグループの作成/利用が可能になっています。この機能についても、筆者の方でRed Hat Linux 7.2上で動作を確認しています。

 まず、UNIX側に各グローバルグループに対応するグループを作成します。例えば、groupaddコマンドなどを使って、/etc/groupファイルに以下のようなエントリを作成してください。

group1:x:501: monyo

 次に、smbgroupeditコマンドを使って、UNIX側のグループとグローバルグループとの対応付けを行います。以下Group 1というグループの場合を示します。

# smbgroupedit -a group1 -n "Group 1"
↑Group 1グローバルグループの追加。対応するUNIX側のグループ名はgroup1
# smbgroupedit -vs | grep "Group 1"
↑Group 1グローバルグループのSIDを確認
Domain Admins (S-1-5-21-1108995562-3116817432-1375597819-3449) -> group1
下線部はGroup 1グローバルグループのSID

 設定が完了したら、ドメインに参加しているWindows NT系OSのマシンからログオンして、フォルダのアクセス権を設定してみましょう。アクセス権付与の画面で、画面4のように先ほど設定したグローバルグループの設定が確認できれば基本的に動作しているはずです。また、ユーザーマネージャで見たときも、画面5画面6のようにグローバルグループの存在が確認できます。

画面4 Group 1グローバルグループが表示されている

画面5 ユーザーマネージャでもGroup 1が確認できる

画面6 Group 1のプロパティダイアログボックス

 このほかにも、Samba 3.0ではグローバルグループに対して「ユーザーの権利」を付与したり、Winbindと連携したりするなどいくつかの機能があります。

 詳細については、Sambaのアーカイブ中に含まれるGROUP-MAPPING-HOWTO.txtを参照してください。smbgroupeditコマンドにオプションを付けずに実行すると、利用可能なオプションの一覧が表示されます。

通信路上でのUnicodeサポート

図1 通信路で使われる文字コード

 地味ながら大きな変更点として、ネットワーク上を流れる文字コードがWindows 9x系列と同じシフトJISなどの各国の文字コードから、Windows NT系列と同じUnicode(UCS-2)になったことが挙げられます(図1)。

 Samba 2.2系列までは、シフトJISで送信が行われていたわけですが、Windows 9x系とWindows NT系とで一部の文字について送信される文字コードが異なるという問題があったため、Samba日本語版では非常にトリッキーな手段を使ってSamba側で対応せざるを得ませんでした。今回のUnicode化により、この問題は自然解消するはずです。またMac OS XのSMB機能など、Unicodeでの通信にしか対応していないSMBクライアントからの日本語利用も可能になります。

WINS複製機能のサポート

 長らく要望があった機能であるWINSの複製がサポートされる予定です。WINSの複製をサポートする専用のデーモンとして、wrepldというプロセスが新たに追加されています。smb.conf中で、

[global]
  wins partners = 192.168.1.10

のようにして複製パートナーの設定を行ったうえで、wrepldを-Dオプション付きで起動します。これでWINSの複製が実現されるはずです。

ぜひ開発に協力を

 以上、駆け足でしたが次世代のSamba 3.0を紹介しました。

 多くの魅力的な機能が実装されている一方で、まだまだ未完成な点が多いことや、日本語対応についても不十分な点が多いことも認識されたことと思います。しかし、見方を変えれば、ここで頑張ることでSamba 3.0はデフォルトで使えるレベルの日本語対応を実現することも不可能ではないといえると思います。

 わたし自身、日常の雑務に追われてなかなか手が回らないのですが、もしこの記事を読んでSamba 3.0の開発に興味を持たれた方がいらっしゃったら、ぜひ日本Sambaユーザ会のメーリングリスト(sugj-tech:http://www.samba.gr.jp/ml/#sugj-tech)などを通じて開発に協力していただければと思います。

2/2

Index
Samba 3.0の全貌
− 開発者自ら語る次世代Samba −
  Page 1
Samba 3.0の新機能と変更点
Samba 3.0の入手とインストール
 configureとmake
  Page 2
新機能の詳細と設定
 日本語関連パラメータの変更
 SWATの国際化
 Active Directoryへの参加
 グローバルグループのサポート
 通信路上でのUnicodeサポート
 WINS複製機能のサポート
ぜひ開発に協力を

Linux Square全記事インデックス


 Linux Squareフォーラム サーバ構築・運用関連記事
連載:Heartbeatでかんたんクラスタリング(連載中)
オープンソースソフトウェアの「Heartbeat」を使ってHAクラスタを実現し、サービスを「落とさない」仕組みを実現します
特集:Apache 2.2でWebサイトをパフォーマンスアップ!
最新安定版Apache 2.2は、何が変わったのか? 最新のApacheを新機能の使い方とともに解説する
連載:実用 Apache 2.0運用・管理術(全8回)
本連載では、Apache 2.0の運用や管理方法を解説する。まず必須設定と基本的なセキュリティ対策を行い今後の運用に備える
連載:実用 BIND 9で作るDNSサーバ(全15回)
本連載では、BIND 9の構築/運用方法を解説していく。実際に役立つことを目的に、セキュリティや大規模運用などのテーマを取り上げていく
連載:実用qmailサーバ運用・管理術(全14回)
本連載を通して、qmailによるメールサーバの高度な構築・運用・管理術を紹介。SPAM対策やML管理からサーバでのウイルスチェックなどまで
特集:Samba 3.0の全貌 改訂版
Samba 3.0リリースから8カ月。ここであらためて、Samba 3.0系列の新機能、インストール方法、国際化の現状を解説する

MONOist組み込み開発フォーラムの中から、Linux関連記事を紹介します


Linux & OSS フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Linux & OSS 記事ランキング

本日 月間