Using Samba

Using Samba

Robert Eckstein, David Collier-Brown, Peter Kelly 共著
第一版 1999 年 11 月
1-56592-449-5, 注文番号: 4495
416 ページ, 34.95 ドル

ハードコピー版(英語)を購入する

目次


Previous: A.2 要求条件 Appendix A
SambaをSSL化する設定
Next: A.4 SSLプロキシのセットアップ
 

A.3 SSLeayのインストール

Sambaはサーバ側でSecure Socket Layerのサポートを提供するためにEric Youngが作成したSSLeayのパッケージを利用する。しかしU.S.の輸出法規制のため、SSLeayのパッケージは合衆国に端を発するSambaの配布パッケージには含めることができない。その為Sambaの作成者はこれを完全に別のパッケージとして分離したままにしている。SSLeayの配布パッケージは以下のいずれかのサイトからダウンロードできる:

本書執筆時点での最新版は0.9.0bである。Sambaの配布パッケージと同じサーバ上にダウンロードし、展開後しておくこと。ディレクトリは SSLeay-0.9.0bのままにしておくこと。 ディレクトリを変更後、Sambaと同様にしてSSLの暗号化パッケージをconfigureして構築する。

SSLeayはPerlベースの configureスクリプトを利用する。このスクリプトはSSLeayパッケージのユーティリティやライブラリを構築するたけのMakefikeを修正する。デフォルトのスクリプトでは、Perlのパスが /usr/local/bin/perlに固定されているので、 configureスクリプトでUNIXシステム上のPerl実行ファイルの位置を指定するようにスクリプトを変更する必要があるかも知れない。Perl実行形式の位置は、以下のようにして見付けることができる:

# which perl
/usr/bin/perl

適切なPerlを利用するために、 configureスクリプトの先頭行を修正すること。例えばRed Hat Linuxのシステムでは以下のようになる:

#!/usr/bin/perl
#
# see PROBLEMS for instructions on what sort of things to do
# when tracking a bug -tjh
...

この作業を行なった後で、構築対象のプラットフォームを特定するために、 configureスクリプトを実行する必要がある。対象のプラットフォームは以下のうちのいずれかになる:

BC-16              BC-32              FreeBSD            NetBSD-m86
NetBSD-sparc       NetBSD-x86         SINIX-N            VC-MSDOS
VC-NT              VC-W31-16          VC-W31-32          VC-WIN16
VC-WIN32           aix-cc             aix-gcc            alpha-cc
alpha-gcc          alpha400-cc        cc                 cray-t90-cc
debug              debug-irix-cc      debug-linux-elf    dgux-R3-gcc
dgux-R4-gcc        dgux-R4-x86-gcc    dist               gcc
hpux-cc            hpux-gcc           hpux-kr-cc         irix-cc
irix-gcc           linux-aout         linux-elf          ncr-scde
nextstep           purify             sco5-cc            solaris-sparc-cc
solaris-sparc-gcc  solaris-sparc-sc4  solaris-usparc-sc4 solaris-x86-gcc
sunos-cc           sunos-gcc          unixware-2.0       unixware

ここでは以下を入力した:

# ./Configure linux-elf
CC            =gcc
CFLAG         =-DL_ENDIAN -DTERMIO -DBN_ASM -O3 -fomit-frame-pointer 
EX_LIBS       =
BN_MULW       =asm/bn86-elf.o
DES_ENC       =asm/dx86-elf.o asm/yx86-elf.o
BF_ENC        =asm/bx86-elf.o
CAST_ENC      =asm/cx86-elf.o
RC4_ENC       =asm/rx86-elf.o
RC5_ENC       =asm/r586-elf.o
MD5_OBJ_ASM   =asm/mx86-elf.o
SHA1_OBJ_ASM  =asm/sx86-elf.o
RMD160_OBJ_ASM=asm/rm86-elf.o
THIRTY_TWO_BIT mode
DES_PTR used
DES_RISC1 used
DES_UNROLL used
BN_LLONG mode
RC4_INDEX mode		

パッケージがconfigureされたら、 makeと入力することで、バイナリを構築できる。構築がうまくいかなかった場合は、配布パッケージ中のドキュメントやhttp://www.cryptsoft.com/ssleay/のFAQにある詳細情報をみて対処すること。構築が成功したら、 make installと入力して、ライブラリをシステムにインストールする。makefileはデフォルトで /usr/local/sslにパッケージをインストールする点に注意すること。別のディレクトリにインストールした場合は、SambaをSSLを利用するようにconfigureする際に注意する必要がある。

A.3.1 SSLeayをシステムに応じて設定する

最初にやるべきことは、システムの PATH環境変数の値にSSL配布パッケージの /binディレクトリを含むように設定することである。これは以下のようにすることで行なえる:

PATH=$PATH:/usr/local/ssl/bin

ここまでは簡単である。引続きSSLeayの乱数発生機のためのランダムな文字列を生成する必要がある。乱数発生機はクライアントとサーバ両方のキーペアを生成する際に利用される。この文字列は、ある程度の長さのランダムな文字列が入ったテキストファイルから生成することも可能である。以下のように、好みのエディタを用いてランダムな文字列からなるテキストファイルを作成することもできるし、以下のコマンドを用いて任意の文字列を標準入力から入力することも可能である:

cat >/tmp/private.txt

Sambaのドキュメントでは、Control-Dを押して入力を終了するまで、少なくとも1分以上は文字列を入力し続けることを推奨している。Try not to type only the characters that are under your fingers on the keyboard; throw in some symbols and numbers as well. ランダムな文字列のファイルを作成したら、以下のコマンドでそれを乱数発生機に引き渡す:

# ssleay genrsa -rand /tmp/private.txt >/dev/null
2451 semi-random bytes loaded
Generating RSA private key, 512 bit long modulus
..+++++
.................................+++++
e is 65537 (0x10001)

このコマンドの出力に関しては無視して差し支えない。完了したら、乱数発生機で秘密鍵を再生成されないように、キーを作成するのに使ったランダムな文字列は削除しておく:

rm -f /tmp/private.txt

このコマンドを実行することで、. rndという隠しファイルが, ホームディレクトリに作成される。SSLeayは今後キーペアを作成する際にこのファイルを利用する。

A.3.2 Configuring Samba to use SSL

ここで、SambaをSSLを利用できるようにコンパイルする。Chapter 2, Installing Samba on a Unix Systemを読み返して、Sambaをコンパイルする前にmakefileを設定するためconfigureスクリプトを実行する必要があると言ったことを思い出して欲しい。SambaでSSLを利用するためにはmakefileを以下のように再度configureする必要がある:

./configure --with-ssl

その後で、以下のコマンドでSambaをコンパイルする:

# make clean
# make all

ssl.hがないというエラーが smbdのところで発生した場合は、恐らくSSLeayがデフォルトのディレクトリにインストールされていない。 --with-sslincというconfigureオプションを利用して、SSL配布パッケージのインストール先ディレクトリを指定すること。この場合、 include/ssl.hを含むディレクトリを指定する。

問題なくコンパイルできた場合は、次の段階である証明書の作成に入る。

A.3.3 認証局を立ち上げる

SSLプロトコルではプロトコルのハンドシェイクの際、互いに身元を確認するためX.509の証明書が必要である。実際に公開されているWebサイトで用いられているような証明書には年間300ドル程度の費用が発生する。これは証明書に 認証局の電子署名が行なわれている必要があるためである。認証局は自身の秘密鍵で署名することで、電子証明書の正当性を保証する団体である。これによって証明書の正当性を確認したい場合は、単に認証局の公開鍵を用いて署名を確認を行なえば良い。

SSLeayでも公開されている認証局を利用することが可能であるが、必須ではない。SSLeayでは、自分自身を信頼されている認証局として宣言することで、どのクライアントを信頼するかを指定することが可能である。これを行なうには、SSLeayの配布パッケージを用いて幾つかの作業を行なえば良い。

最初に行なうべきことはクライアントの証明書と場合によってはサーバの証明書が置かれる安全な場所を指定することである。ここでは /etc/certificates にした。以下のコマンドを root で実行する:

# cd /etc
# mkdir certificates
# chmod 700 certificates

このディレクトリに対しては root 以外の全ユーザのアクセスを禁止する。これは非常に重要である。

次ぎにSSLeayのスクリプトと設定ファイルが証明書をこのディレクトリに保存するように設定を行なう。この為に、まず /usr/local/ssl/bin/CA.shディレクトリにある CA.sh スクリプトについて作成したディレクトリに保存するように修正を行なう。以下を含む行を見つけ:

CATOP=./demoCA

これを以下のようにする:

CATOP=/etc/certificates

次に /usr/local/ssl/lib/ssleay.cnf ファイルも同じディレクトリをさすように修正する。以下のエントリをみつけ:

[ CA_default ]
dir     = ./demoCA             # Where everything is kept

以下のように変更する:

[ CA_default ]
dir     =  /etc/certificates   # Where everything is kept

更に証明書作成のため、認証局の作成スクリプトである CA.sh を実行する。これは前述した乱数発生機を実行したのと同じユーザで実行する必要があることに注意すること:

/usr/local/ssl/bin/CA.sh -newca
mkdir: cannot make directory '/etc/certificates': File exists
CA certificate filename (or enter to create)

Enterキーを押してCAの為の証明書を作成する。以下の出力が行なわれる筈である:

Making CA certificate ...
Using configuration from /usr/local/ssl/lib/ssleay.cnf
Generating a 1024 bit RSA private key
.............................+++++
.....................+++++
writing new private key to /etc/certificates/private/cakey.pem
Enter PEM pass phrase:

証明書のパスフレーズを入力する。SSLeayは2回正しく入力されないと受理しない:

Enter PEM pass phrase:
Verifying password - Enter PEM pass phrase:

このパスフレーズを忘れないこと。将来、クライアントの証明書に署名を行なう際に必要となる。SSLeayがパスフレーズを受理したら、X509証明書の各フィールドに関する一連の問い合わせが行なわれる:

You are about to be asked to enter information that will be
incorporated into your certificate request.
What you are about to enter is what is called a Distinguished
Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.

自分の組織の情報で残りのフィールドを埋めていく。我々の場合は以下のようになる:

Country Name (2 letter code) [AU]:

US
State or Province Name (full name) [Some-State]:

California
Locality Name (eg, city) []:

Sebastopol
Organization Name (eg, company) []:

O'Reilly
Organizational Unit Name (eg, section) []:

Books
Common Name (eg, YOUR name) []:

John Doe
Email Address []:

doe@ora.com

入力が完了すると、SSLeayが認証局を作成して、Sambaサーバに接続するクライアントマシン用の証明書に署名を行なうことが可能になる。

A.3.4 クライアント用の証明書の作成

クライアントマシン用の証明書を作成するには簡単である。まず各クライアント毎に公開鍵と秘密鍵のペアを作成して、証明書要求ファイルを作成する必要がある。それが済んだら SSLeayを使って、信頼された認証局が署名を行なう。

例えば phoenixというクライアントマシンがあった場合、3つのSSLeayのコマンドを発行すればよい。最初にクライアントのキーペアを作成して、 phoenix.key という名称で保存する。この例では秘密鍵をトリプルDESを用いて暗号化している。パスフレーズを要求されたら入力すると、次の段階へ進める:

# ssleay genrsa -des3 1024 >phoenix.key
1112 semi-random bytes loaded
Generating RSA private key, 1024 bit long modulus
........................................+++++
.............+++++
e is 65537 (0x10001)
Enter PEM pass phrase:
Verifying password - Enter PEM pass phrase:

コマンドが完了したら、続いて以下のコマンドを入力する:

# ssleay req -new -key phoenix.key -out phoenix-csr
Enter PEM pass phrase:

パスフレーズには作成したばかりのクライアント証明書のパスフレーズを入力する(認証局のものではない)。 ここで再度質問に答える必要がある。今回はクライアントマシンに関するものである。チャレンジパスワードとオプションのcompany nameについても入力する必要があるが、今回は使われない。コマンドが完了すると phoenix-csrという証明書要求ファイルが作成されている。

ここで信頼している認証局に証明書要求に署名をしてもらう必要がある。以下のコマンドを入力する:

# ssleay ca -days 1000 -inflies phoenix-csr >phoenix.pem

コマンドを実行すると、 認証局のPEMパスフレーズの入力が求められる。作成したクライアントの証明書のPEMパスフレーズではないことに注意すること。正しいパスフレーズを入力すると、以下のような出力が行なわれるはずである:

Check that the request matches the signature
Signature ok
The Subjects Distinguished Name is as follows:
...

この後にクライアント証明書に入力した情報が続く。フィールドにエラーが発生した場合は表示される。うまく行った場合、SSLeayは証明書に署名をしてデータベースをコミットしてよいかの確認を求めてくる。これにより証明書発行の履歴が /etc/certificates/newcerts ディレクトリに追加される。

この結果 phoenix.key phoenix.pem というファイルがカレントディレクトリに作成される。これらのファイルはSSLが有効なSambaサーバに接続するクライアントに渡され、SSLプロキシによって使われることになる。

A.3.5 Samba サーバの設定

次の段階はSambaの設定ファイルが以下のオプションを含むように修正することである。これらのオプションは認証局の証明書のディレクトリが /etc/certificates に作成された場合の例である:

[global]
	ssl = yes
	ssl server cert = /etc/certificates/cacert.pem
	ssl server key = /etc/certificates/private/cakey.pem
	ssl CA certDir = /etc/certificates

ここでSambaデーモンをkillして手動で再起動する:

# nmbd -D
# smbd -D
Enter PEM pass phrase:

Sambaデーモンを起動するときには認証局のパスフレーズを入力する必要があるので、プログラムを通常の方法で起動する際に問題が発生することになる。しかし、高度なスクリプト言語である Expect や Python を用いることでこの問題を解決することが可能である(monyo 訳注: これらのスクリプトを用いる場合平文のパスフレーズを保存しておく必要がある。それよりは予め復号化した証明書を用いる方法を推奨したい)。

A.3.6 smbclient によるテスト

Samba が正しく動作しているかどうかを確認するには、 smbclient プログラムを用いるのがよいであろう。Samba サーバ上で以下のコマンドを実行する。共有名とユーザ名は適切なものに置き換えること:

# smbclient //hydra/data -U tom

以下のようにネゴシエートされる暗号化方式を示す行にはじまる数行のデバッグメッセージが表示されるはずである:

SSL: negotiated cipher: DES-CBC3-SHA

その後パスワードを入力することで通常通り共有に接続できる。動作したならば、Samba は正しくSSL接続をサポートできていると考えて良いだろう。次はクライアントの設定である。


Previous: A.2 要求条件 目次 Next: A.4 SSLプロキシのセットアップ
A.2 要求条件 書籍索引 A.4 SSLプロキシのセットアップ

O'Reilly Home | O'Reilly Bookstores | How to Order | O'Reilly Contacts
International | About O'Reilly | Affiliated Companies

© 1999, O'Reilly & Associates, Inc.