Samba 3.0の全貌
− 開発者自ら語る次世代Samba −
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 |
という2つのパラメータを適切に設定することが必要でしたが、Samba 3.0では従来のパラメータに代わって新しく追加された、
unix charset |
という3つのパラメータを使って文字コードを制御します。それぞれ表2のような意味を持っています。
unix charset | UNIX上のファイルシステムに用いられている文字コード(符号化形式)を指定 |
dos charset | Windows側で利用されている文字コードを指定。日本語を利用する場合は、「CP932」にする |
display charset | SWATの画面に表示される文字コードを指定 |
表2 文字コード関連パラメータ |
各パラメータの値には、iconv()関数がサポートする各種形式を指定します。通常は、以下のように指定すればよいでしょう。
unix charset = EUC-JP |
UNIX側が「EUC-JP」の場合 |
unix 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 |
という記述があることを確認のうえ、makeを行ってください。なお、Kerberosを標準以外の場所にインストールしている場合は、--with-krb5オプションで場所を指定するとうまくいくかもしれません。
3. 設定ファイルの準備
/etc/krb5.confの中に、
[libdefaults] |
という記述を追加、修正します。また、smb.confには、
[global] |
という記述を行ってください。「realm」と「ads server」のパラメータの値は、環境によって変化します。
4. Active Directoryへの参加
ここまで準備が整ったら、いよいよActive Directoryへの参加です。まずはAdministrator(もしくはそのほかの管理者権限のあるアカウント)としてActive
Direcotoryにアクセスします。以下のように、kinitコマンド(/usr/kerberos/bin/kinit)を発行してください。適切なパスワードを入力した場合は何のメッセージも表示されません。
# kinit administrator |
なお、Active Direcotoryの仕様(?)のため、Active Directory構築後にAdministratorアカウントのパスワードを一度も変更していない場合はkinitに失敗します。同じパスワードで構わないので、一度パスワードを変更しておいてください。パスワードを変更していないと、
# kinit administrator |
のようにいわれてしまい、kinitコマンドに失敗してしまいます。
kinitコマンドに続き、net ads joinコマンドを発行してActive Directoryに参加します。
# ./net ads join |
正常に終了した場合は、上記のように「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グローバルグループの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] |
のようにして複製パートナーの設定を行ったうえで、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
|
|
|
||||
|
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系列の新機能、インストール方法、国際化の現状を解説する |
|
|
- 【 pidof 】コマンド――コマンド名からプロセスIDを探す (2017/7/27)
本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、コマンド名からプロセスIDを探す「pidof」コマンドです。 - Linuxの「ジョブコントロール」をマスターしよう (2017/7/21)
今回は、コマンドライン環境でのジョブコントロールを試してみましょう。X環境を持たないサーバ管理やリモート接続時に役立つ操作です - 【 pidstat 】コマンド――プロセスのリソース使用量を表示する (2017/7/21)
本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、プロセスごとのCPUの使用率やI/Oデバイスの使用状況を表示する「pidstat」コマンドです。 - 【 iostat 】コマンド――I/Oデバイスの使用状況を表示する (2017/7/20)
本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、I/Oデバイスの使用状況を表示する「iostat」コマンドです。
|
|