※ちょっと中途半端なインストールログになったかもしれません。m(_ _)m
  sambaは機能が多すぎてなかなかまとめることができませんでした。
  参考にならないかもしれません!!悪しからず!

ファイルサーバとして用いるにはフリーでsambaを使うことが多いのでは?
最近はファイルサーバにUNIX+sambaは最近ちょっと少なくなったような気もするが・・・
PCとファイルをやり取りしたいという要求はなくならないので、sambaもなくなることはないでしょう。
また、sambaを導入することによりPC側のドライブをunix側から見ることも出来るようになる。

※最近一番良く見かけるのはhttp://www.netapp.com/ようなNASですね。
 そのほかにはNAS製品も世の中には山ほどあるのでLINUX WORLD や SUNWORLDなどの雑誌で確認すると良い。

【準備】
●sambaのダウンロード
http://www.samba.gr.jp/
今回は2.2.2ja1.0が最新である。
アーカイブは/work/samba(Linuxの場合のインストールポリシーに従う)
solarisの場合は/usr/local/arc/samba

ftp://ftp.psy.uq.oz.au/pub/Crypto/SSL/
から最新版のSSLeayをダウンロードする。
今回はSSLeay-0.9.0bを使用。


samba-2.0.10-ja-1.2 ではssl対応にするにはSSLeayを使わなくては
コンパイルに失敗していたのに、今回の2.2.2ja1.0ではopensslでなくては
コンパイル時にエラーが出るようになった。
sslのオプションも少し変更になっていたので何か仕様が変わったのかも
知れないが実際のところはどうなのかわかりません。m(_ _)m
ということでとりあえずopensslを使うことにします。

●opensslのダウンロード
http://www.openssl.org/source/
から最新版をダウンロード
今回はopenssl-0.9.6c.が最新。

少なくともGNU版gettextはインストールを先にしておく。
パッケージで良いのでftp://sunsite.sut.ac.jp/pub/sun-info/Solaris/
からgettextをダウンロードして
# gzip -d gettext-0.10.37-sol8-sparc-local.gz
# pkgadd -d ./gettext-0.10.37-sol8-sparc-local
をしておきましょう。
Linuxの場合は最初から入ってるから別に意識しなくてもいいのでは?

【インストール】

※今回sambaの構築はsslをサポートしたセキュアなsambaの実験もする。
 大規模なネットワークでCADデータやマルチメディアデータなどマシンもローエンドなマシンではなく
 ハイエンドなサーバマシンをお勧めする。
sslについては基本的にsambaはSSLeayでのssl化を前提にされているのでOpenSSLでの
ssl化はコンパイルの際にエラーを招く元。素直にサポートされているSSLeayを使いましょう。
また、OpenSSLを/usr/local/sslにインストールしている場合はSSLeayを
どこか違う場所にインストールしないとインストール先が同じなので上書きされてしまいます。
気をつけましょう!


Opensslを入れるのでSSLeayのインストールはする必要はない。
OpenSSLをデフォルトの/usr/local/sslにインストールしておきましょう。
もしかするとSSLeayも/usr/local/sslにインストールしておけば大丈夫かもしれない・・・
また、実験しておきます。


以下solaris8でのログです。
このようなフリーソフトのインストールは済ませていることを前提、Linuxでは気にしないでよいでしょう。
Linuxでも基本的にインストール手順は同じ。
SSLeayもインストールしたのでそのときのログはこんな感じ。何かの参考になれば幸いと思いログとっておきました。

●openssl
Configureオプションは展開したソースの中のREADME参照
今回はデフォルトでMakefileを作成します。


# ./config 2>&1 |tee config.log
# make 2>&1 | tee make.log
# make install 2>&1 | tee make_install.log
以上でopensslが/usr/local/sslにインストールされます。

●samba
# gzip -d < samba-2.2.2-ja-1.0.tar.gz |tar xf -
# cd samba-2.2.2-ja-1.0/source/

configureのオプションはたくさんあるので必要な機能(仕様)を決めて使うとよい。

[今回SSL対応させるときに失敗したこと]
※SSLeayは/usr/local/SSLeay
※OpenSSLは/usr/local/ssl
にインストールしている状態。

1.--with-ssl --with-sslinc=/usr/local/SSLeay/include --with-ssllib=/usr/local/SSLeay/lib
 をつけてconfigureすると「configure: error: summary failure. Aborting config」
 なんか出てきてconfigureが完了できない。

2.--with-ssl --with-sslinc=/usr/local/SSLeay/include --with-sslib=/usr/local/SSLeay
 をつけてconfigureするとconfigureがすべて通るがmakeでsslの部分でけられた。

3.--with-ssl --with-sslinc=/usr/local/ssl/include/openssl --with-ssllib=/usr/local/ssl/lib
 をつけてconfigureすると「configure: error: summary failure. Aborting config」が
 でてきてconfigureが通らない。

4.--with-ssl --with-sslinc=/usr/local/ssl/include --with-ssllib=/usr/local/ssl/lib
 をつけてconfigureすると「configure: error: summary failure. Aborting config」が
 でてきてconfigureが通らない。

結果として--with-sslだけで
やるとconfigureもmakeもすべて通った。
後でもわかるが結局opensslをつかってコンパイルされている。

その他quotaとMS Dfsそしてswatも有効にしておく。
 その他にnetatalkなどインストールしていれば--with-netatalk などを
つけてnetatalkサポートも有効に出来る。
linuxでやるなら--with-smbmountもつけてもいいでしょう。

# ./configure  --with-i18n-swat \
           --with-quotas \
           --with-ssl \
           --with-msdfs \
           --with-included-gettext |tee configure.log
※一応--with-msdfsなんかをつけてDFs対応にしているが今回の説明の中ではこの機能について特に触れていません。M$な方はぜひともこの機能を堪能してみてください。
# make 2>&1|tee make.log
# make install 2>&1|tee make_install.log
# make installman 2>&1|tee make_installman.log
【設定】
通常のsambaの設定であればこったことをしない限り案外簡単に構築できるが、今回はsslを使うので
やや通常より記述する内容が多い。apacheなどでssl化をやったことがあれば割と理解しやすい。
というか同じです。もしssl自体はじめて触るという方は、苦労してでもこの機会に「なんちゃって」でもよいのでsslに触れておいても損はないのでは?
一度はSSLeayでやったのでが今回のsambaではopensslを使わなくてはできなかったので
以下はそのログですが、SSLeayでやったときのログもごみですがココに残してます。

●乱数の作成

# PATH=$PATH:/usr/local/ssl/bin export PATH
# openssl rand -rand /var/adm/messages -out /var/tmp/.rnd 1024

 110981 semi-random bytes loaded


※種に/var/adm/messagesを使ったのはある程度容量のあるテキストファイルを作るのが面倒だからです。
  別に自分で作ったテキストファイルを使ってもかまいません。


●かぎペアの作成
# /usr/local/ssl/bin/openssl genrsa -des3 -rand /var/tmp/ -out /usr/local/ssl/home3-key.pem 1024

512semi-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:もう一回パスワー


●CSRの作成
# /usr/local/ssl/bin/openssl req -new -key /usr/local/ssl/home3-key.pem -out home3-csr.pem

Using configuration from /usr/local/ssl/openssl.cnf
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]:JA
State or Province Name (full name) [Some-State]:Yuzo Nitta
Locality Name (eg, city) []:Osaka
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, YOUR name) []:Yuzo Nitta
Email Address []:yuzo@jinjin.org

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:test

An optional company name []:


●プライベートCA作成のための準備作業
# cd /usr/local/ssl
# cp -r /work/openssl/openssl-0.9.6b/apps/demoCA /usr/local/ssl/CA
# chmod 700 CA
# cd CA
# mv cacert.pem cacert.pem.dist
# cd private/
# mv cakey.pem cakey.pem.dist
# cp /usr/local/ssl/openssl.cnf /usr/local/ssl/CA/
# cd /usr/local/ssl/CA/
# vi openssl.cnf
diffの結果参照
[root@home3 CA]# diff openssl.cnf ../openssl.cnf

37c37
< dir = /usr/local/ssl/CA # Where everything is kept
---
> dir = ./demoCA # Where everything is kept


●プライベートCA鍵の作成
# cd /usr/local/ssl/CA/private/
# openssl genrsa -des3 -out cakey.pem 1024

Generating RSA private key, 1024 bit long modulus
............++++++
.....++++++
e is 65537 (0x10001)
Enter PEM pass phrase:
Verifying password - Enter PEM pass phrase:


●プライベートCA用のCRTの作成
# cd ../../CA
# openssl req -new -x509 -key private/cakey.pem -out cacert.pem

Using configuration from /usr/local/ssl/openssl.cnf
Enter PEM pass phrase:
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]:JA
State or Province Name (full name) [Some-State]:Yuzo Nitta
Locality Name (eg, city) []:Osaka
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, YOUR name) []:Yuzo Nitta
Email Address []:yuzo@jinjin.org


●CSRを署名してCRTへ(自分自身が認証局なので自分自身でhome3のCSRを署名)
# mkdir /usr/local/ssl/CA/newcerts
            (newcertsディレクトリがないとエラーがでるので)

# openssl ca -config ./openssl.cnf -policy policy_anything -in ../home3-csr.pem -out home3-cert.pem

Using configuration from ./openssl.cnf
Enter PEM pass phrase:
Check that the request matches the signature
Signature ok
The Subjects Distinguished Name is as follows
countryName :PRINTABLE:'JA'
stateOrProvinceName :PRINTABLE:'Yuzo Nitta'
localityName :PRINTABLE:'Osaka'
organizationName :PRINTABLE:'Internet Widgits Pty Ltd'
commonName :PRINTABLE:'Yuzo Nitta'
emailAddress :IA5STRING:'test@home'
Certificate is to be certified until Jul 7 14:16:30 2002 GMT (365 days)
Sign the certificate? [y/n]:y


1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated


●sambaの設定

# LANG=ja export LANG
# cp /usr/local/src/samba/samba-2.2.2-ja-1.0/examples/smb.conf.default.ja /usr/local/samba/lib/smb.conf
# vi /usr/local/samba/lib/smb.conf

# Global parameters
[global]
coding system = EUC
client code page = 932
workgroup = KISHIWADA
server string = home3 powered by Samba%v
interfaces = hme0
bind interfaces only = Yes
security = SHARE
encrypt passwords = Yes
allow trusted domains = No
min password length = 0
map to guest = Bad User
null passwords = Yes
#ssl = Yes
#ssl hosts resign = 192.168.128.  
ここで指定したネットワークからはsslを使いません。
#ssl CA certDir = /usr/local/SSLeay/CA
#ssl server cert = /usr/local/SSLeay/CA/cacert.pem
#ssl server key = /usr/local/SSLeay/CA/private/cakey.pem
#ssl client cert = /usr/local/SSLeay/CA/home3.pem
#ssl client key = /usr/local/SSLeay/CA/home3.key
#ssl egd socket = /var/run/egd-pool
#ssl require clientcert = No
log file = /var/adm/samba/samba.log
max log size = 50000
announce as = win95
max xmit = 65535
socket options = TCP_NODELAY IPTOS_LOWDELAY SO_RCVBUF=8576 SO_SNDBUF=8576
load printers = No
os level = 0
local master = No
dns proxy = No
guest account = guest
hosts allow = 192.168.128. 127.
oplocks = No
dos filetimes = Yes

[homes]
comment = %U's Home Directories
writeable = Yes
browseable = No

[cdrom]
comment = CD-ROM on %h
path = /cdrom/cdrom0

[共有]
comment = 一時共有(読み込みのみ)
path = /tmp
volume = 共有

[data1]
comment = data1
path = /data1
revalidate = Yes
guest account =
valid users = yuzo
writeable = Yes
delete veto files = Yes
#veto files = /*.eml/*.nws/riched20.dll/httpodbc.dll/
↑nimda対策などにはこの設定を有効にしておきましょう。
oplocks = Yes

[data2]
comment = data2
path = /data2
revalidate = Yes
guest account =
valid users = nitta
force group = staff
writeable = Yes
inherit permissions = Yes
delete veto files = Yes
#veto files = /*.eml/*.nws/riched20.dll/httpodbc.dll/
oplocks = Yes
とりあえずコメントアウトしてある部分はこの時点ではまだ有効にしておいても良い。l

# /usr/local/samba/bin/testparm /etc/smb.conf #チェックしておきましょう。OKが最初に出ていればよい

●swatの設定
# vi /etc/services

swat 901/tcp

# vi /etc/inetd.conf

swat stream tcp nowait.400 root /usr/local/samba/bin/swat swat

 ※xinetdの場合はこの表記をxinetdの形式に当てはめて考えてください。
# kill -HUP  (inetdのプロセス番号) 
solaris7以降であれば#pkill -HUP inetdでもOK
RedHat7.x以降でxinetdでswatを起動する場合は
kill USR1 xinetdのプロセス番号


【起動および起動設定】
# cp /usr/local/arc/samba/samba-2.2.2-ja-1.0/examples/svr4-startup/samba.server /etc/init.d/samba
# ln -s /etc/init.d/samba /etc/rc3.d/S99samba
# vi /etc/init.d/samba
自分のインストールした環境に書き換える。
# chmod 744 /etc/init.d/samba
# chown root:sys /etc/init.d/samba
# mkdir /var/adm/samba
# /etc/init.d/samba start
パスワード入力を求められる。
●起動確認
# ps -ef|grep smbd
root 802 1 0 14:56:38 ? 0:00 /usr/local/samba/bin/smbd -D -s/etc/smb.conf
# ps -ef|grep nmbd
root 804 1 0 14:56:38 ? 0:00 /usr/local/samba/bin/nmbd -D -l/var/adm/samba -s/etc/smb.conf

# /usr/local/samba/bin/smbclient -L 192.168.128.4(sambaサーバ自身)

SSL: negotiated cipher: DES-CBC3-SHA

という表示が見えればちゃんとsmbプロトコルがSSL化されているということです。
windows系のクライアントはデフォルトではsmbプロトコルのssl通信をサポートしていないので
クライアントもstunnelでsmbのsslプロキシを立ててそこからアクセスするということになるので
あまり現実的ではありません。
※もしやりたいのであればこの辺を参考に!!そんなに難しくはないはず。
よって今回はsmbのssl化はできるという実験だけにとどめておきます。
SSLの設定はしたままではクライアントからネットワークコンピュータからアクセスすると
ネットワークパスが見つからない状態になっています。よってsslの部分ははずしてしまいましょう。
もう一度プロセスを再起動しておきましょう。
# /etc/init.d/samba stop
# /etc/init.d/samba start


もう一度
# /usr/local/samba/bin/smbclient //192.168.128.4/d -U administrator
これでhome2というコンピュータの共有名「d」にユーザadministratorでアクセスする。
そうするとプロンプトが「smb: \>」に変わるのでcdコマンドで移動出来るようになっている。
smb: \>help
とすればftpライクなコマンドたちが出てくるので使い方は大体予想できるでしょう!
swatが動いているかどうかは
http://server名:901
にブラウザーでアクセスすれば分かる。
ただしrootのパスワードが必要です。

●ユーザの追加
※windowsでログオンするときのユーザをunix側にも追加しておきます。
  先にunix側のアカウントを追加しないとsamba側のユーザを作ることができないため。
  システムアカウントとsamba専用のアカウントを2つ作ることになります。

# useradd -c "for samba" -d /data1 -g staff -s /bin/false yuzo
システムにアカウントを作ったら、swat(http://sambaサーバ:901)からsambaのユーザを作成します。

windowsから実際にアクセスしてみましょう!ちゃんと共有したものが見えているはずです。

※swatではrootのパスワードが必要になるしhttpでは平分で流してしまうので
tcpdumpなどでキャプチャーされると一発でばれてしまうので、swatを使った運用をする場合は
ssl化しておきましょう!これにはstunnelが必要になってきます。
stunnelのインストールは普通です。特に難しくはありません。
bash-2.05# tar zxf stunnel-3.22.tar.gz
bash-2.05# cd stunnel-3.22
bash-2.05# ./configure 2>&1|tee configure.log
bash-2.05# make 2>&1|tee make.log

writing new private key to 'stunnel.pem'
-----
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) [PL]:JA
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:Osaka
Organization Name (eg, company) [Stunnel Developers Ltd]:company
Organizational Unit Name (eg, section) []:Development
Common Name (FQDN of your server) [localhost]:home3.jinjin.com
test 1 -eq 1 || test ! -f "" || \
/usr/local/ssl/bin/openssl gendh -rand "" 512 >> stunnel.pem
test 1 -eq 1 || test -f "" || \
/usr/local/ssl/bin/openssl gendh 512 >> stunnel.pem
/usr/local/ssl/bin/openssl x509 -subject -dates -fingerprint -noout \
-in stunnel.pem
subject= /C=JA/ST=Some-State/L=Osaka/O=company/OU=Development/CN=home3.jinjin.com
notBefore=Jan 26 13:28:24 2002 GMT
notAfter=Jan 26 13:28:24 2003 GMT
MD5 Fingerprint=39:E0:AD:C8:2E:70:BE:01:04:C7:0F:14:51:81:DD:4A

bash-2.05# make install 2>&1|tee make_install.log
後はsambaユーザ会の情報を参考に。
http://www.tac.tsukuba.ac.jp/~yamato/samba/5000/msg00166.html

bash-2.05# vi /etc/inetd.conf
bash-2.05# pkill -HUP inetd
とりあえずientdのswatのエントリは削除しておきます。
bash2.05# /usr/local/sbin/stunnel -d 901 -l /usr/local/samba/bin/swat -- swat
bash2.05# pgrep -lf stunnel
一応プロセスが起動している確認をして
クライアントからhttps://ホスト名:901にアクセスしてみましょう!

【ちょっとしたチューニング】
ただの受け売りになって申し訳ないですが、少しチューニングも
運用上いると思います。使っていてデフォルト設定ではすこし遅い気がしてきたので
ドキュメントどおりの設定をして見ました。
インストールしたディレクトリの中にそのドキュメントはあります。
「/usr/local/samba/swat/using_samba/ja」のAppendix B: Samba のパフォーマンスチューニング
を参考にします。

[global] log level = 1 # Default is 0
  max xmit = 65535
  socket options = TCP_NODELAY IPTOS_LOWDELAY SO_RCVBUF=8576 SO_SNDBUF=8576
  read raw = yes # Default
  write raw = yes #
  Default oplocks = yes # Default
  max xmit = 65535 # Default
  dead time = 15 # Default is 0
  getwd cache = yes
  lpq cache = 30
[okplace]
  veto oplock files = this/that/theotherfile
[badplace]
  oplocks = no
設定したら再起動
# /etc/rc3.d/S99samba stop
# /etc/rc3.d/S99samba start

実際にベンチマークするにはどうしたらよいかが難しかったので
とりあえずsambaで共有しているディレクトリをwindowsXPクライアントから
ネットワークドライブとしてB:ドライブに割り当てました。
そしてhdbench3.30でディスクのベンチマーク先をB:200MBに指定して行いました。

これで計測を行った結果。
少し向上したかも??!!
チューニングあり
ALL Read Write Copy Drive
3348 9458 6006 4626 B:\200MB
チューニングなし
ALL Read Write Copy Drive
3236 9294 5312 4811 B:\200MB
チューニングあり2回目
ALL Read Write Copy Drive
3379 9358 6003 4914 B:\200MB
チューニングあり(サイズ違い)
ALL Read Write Copy Drive
3211 8384 5934 4949 B:\500MB
すくなくとも何もしないよりは向上しているのがお分かりいただけるでしょうか?
大きいファイルは伸び率が悪いように見えるが、これもちゃんとチューニング項目を
少しづつ調整しながらいろんなパラメータを触ることで値は変わってくるでしょう。
今回はドキュメントに書いてあるとおりに設定するだけでも、すこし性能アップ
するということを証明してみた。
各環境によって各自試してみていただきたい。
#でも心なしか早くなったようなきが・・・気のせいか・・・
sambaインストール (2002/01/24)