
ファイルサーバとして用いるにはフリーで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 |
# /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 |

| チューニングあり | ||||
| 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) |