料理の方法
Microsoft WindowsNT 4.0 + Service Pack 3 よりパスワードが DES 暗号化されました。それに対応した samba を作成する場合には緑色の場所も行ってください。
DES への対応が必要が無い場合は読み飛ばしてください。
また、 WinNT4.0 側で対応する場合は、赤色を行ってください。
材料
材料の入手
ソース・コードを入手しないと話になりませんので、誰かにもらうかお買い物に行きましょう。
下記の場所や雑誌の付録から入手してください。
Web siet だと総本山 http://samba.anu.edu.au/samba/ にありますし、 ftp ミラーサイトだと ftp://ring.asahi-net.or.jp/archives/net/samba/ とか ftp://ring.aist.go.jp/archives/net/samba/ とか ftp://ftp.win.ne.jp/pub/network/samba/ があります。
今回は、 ftp://ftp.win.ne.jp/pub/network/samba/ より samba-1.9.18p10.tar.gz をもってきました。
DES の下拵え
DES ライブラリの用意をします。DES ライブラリの料理方法 を参考に作っておいてください。
DES ライブラリで samba に必要な以下のもの ( libdes.a, des, des.h ) を適当なディレクトリにまとめておきます。 ( libdes は /usr/local にインストールされ、まとめて置くパスは /usr/local/libdes にしています。 )
# cd /usr/local
# mkdir libdes
# cd libdes
# ln -s ../lib/libdes.a
# ln -s ../bin/des
# ln -s ../include/des.h
下拵え
まず材料を解凍します。
パスは[ /usr/bin /usr/sbin /usr/ccs /usr/ccs/bin /usr/openwin/bin /usr/openwin/bin/xview /usr/local/bin . ]に貼ってあります。
# cd /usr/local/compile
# gzip -dc samba-1.9.18p10.tar.gz | tar xvf -
# cd samba-1.9.18p10
# cd source
さてコンパイル
Makefile を OS と環境に合わせて変更しましょう。
gcc を使うように設定して、 Solaris2.6 なので Solaris2.4 and later の場所の GLAGSM, LIBSM, AWK をコメントアウトし、日本語ファイルを扱うために FLAGSM に -DKANJI=\"euc\" を追加します。
WORKGROUP の設定もありますが後で smb.comf で変更できるようなので、ほっておきます。
DES の設定も追加しておきます。
# vi Makefile
# CC = gcc → CC = gcc
# This is for SUNOS5.4 and later (also known as Solaris 2.4 and later)
# contributed by Andrew.Tridgell@anu.edu.au
# FLAGSM = -DSUNOS5 -DSHADOW_PWD -DNETGROUP -DFAST_SHARE_MODES
# LIBSM = -lsocket -lnsl
# AWK = nawk
↓
# This is for SUNOS5.4 and later (also known as Solaris 2.4 and later)
# contributed by Andrew.Tridgell@anu.edu.au
FLAGSM = -DSUNOS5 -DSHADOW_PWD -DNETGROUP -DFAST_SHARE_MODES -DKANJI=\"euc\"
LIBSM = -lsocket -lnsl
AWK = nawk
DES_BASE = /usr/local/libdes
DES_FLAGS = -I$(DES_BASE)
DES_LIB = -L$(DES_BASE) -ldes
PASSWD_FLAGS = -DUSE_LIBDES -DSMB_PASSWD=\"$(BINDIR)/smbpasswd\" -DSMB_PASSWD_FILE =\"$(BASEDIR)/private/smbpasswd\"
# make
さぁ、盛り付け 1
Makefile に install オプションがあるのでそれを使いましょう。デフォルトだと /usr/local/samba にゴシャゴシャ盛り付けられます。違う場所を望む場合は Makefile の中の BASEDIR の値を変更して一つ戻る。オイオイ
# make install
mksmbpasswd.sh というのが残ってしまいますので、コピーしておきます。
# cp mksmbpasswd.sh /usr/local/samba/bin
盛り付け 2
設定ファイルのサンプルを所定の場所にコピーします。
# cp ../examples/simple/smb.conf /usr/local/samba/lib
# cd /usr/local/samba/lib
基本的な設定だけおこないます。 [ global ] [ homes ] [ printers ] [ public ] と雛形設定があるのでそれをベースに設定します。
コメントアウトは、セミコロン [ ; ] です。
WORKGROUP は tamatama にしました。
# vi smb.conf
[ global ] 全体に対する設定
- workgroup = tamatama : ワークグループ名をここで指定しました。
- printing = sysv : Solaris.x なので SYSTEM V なので sysv 。 ( bsd/hpux/aix ... )
- princap name = lpstat : /etc/printcap は無いので lpstat 。
- guest account = nobody : サービスにアクセスするユーザー名。
- password level =8 : パスワードは 8 文字まで有効なので、承認に失敗した時、そのなかで大文字小文字の組み合わせを自動でやってくれるようになるそうです。
1 だと ABCD -> Abcd, aBcd, abCd, abcD を試してくれるそうです。
2 だと 1 に加え ABCD -> ABcd, AbCd, AbcD, aBCd ... などまで試してくれるそうです。
- coding system = euc : euc モードで漢字を使用するので Makefile で -DKANJI で指定したものと同じものを指定しましょ。
- log file = /usr/local/samba/var/log.%m : どこでもいいですけど、ログが必要ならそれを収めるディレクトリです。
- encrypt passwords と security は DES の設定です。
[global]
printing = bsd
printcap name = /etc/printcap
load printers = yes
guest account = pcguest
; This next option sets a separate log file for each client. Remove
; it if you want a combined log file.
log file = /usr/local/samba/log.%m
↓
[global]
encrypt passwords = yes
security = user
workgroup = tamatama
printing = sysv
printcap name = lpstat
load printers = yes
guest account = nobody
password level = 8
; This next option sets a separate log file for each client. Remove
; it if you want a combined log file.
log file = /usr/local/samba/var/log.%m
log level = 1
coding system = euc
[ homes ] ホームディレクトリに対する設定
- create mode = 0640 : 作成されるファイルのパーミッションだけ変更しました。
[homes]
comment = Home Directories
browseable = no
read only = no
create mode = 0750
↓
[homes]
comment = Home Directories
browseable = no
read only = no
guest ok = no
create mode = 0640
[ printers ] プリンターに関する設定
- path = /tmp : スプール用テンポラリディレクトリを /tmp にしてみました。
[printers]
comment = All Printers
browseable = no
printable = yes
public = no
writable = no
create mode = 0700
↓
[printers]
comment = All Printers
path = /tmp
guest ok = yes
print ok = yes
available = yes
browseable = no
printable = yes
public = yes
writable = no
create mode = 0700
[ public ] パブリックディレクトリに関する設定
- path = /export/home/public : chmod 777 で作成された誰でもアクセスできるディレクトリです。
- create mode = 0666 : ここでの作成されるファイルのパーミッションでやんす。
;[public]
; comment = Public Stuff
; path = /usr/somewhere/public
; public = yes
; writable = no
; printable = no
; write list = @staff
↓
[public]
path = /export/home/public
public = yes
only guest = yes
writable = yes
printable = no
create mode = 0666
#
盛り付けの確認
smb.conf がちゃんと書けたかチェックするツールが付属していますので、これを起動してエラーが出るかどうか見てみましょう。
# ../bin/testpram
チロチロとメッセージが出ます。ここで warning とか error が無ければとりあえず大丈夫じゃないでしょうか。で、 [ Return ] すると設定がバラバラバラと表示されます。設定された内容を確認してみましょう。もし、 warning とか error があったらどこでエラーになっているか確認して smb.conf を修正しましょ。
ただのスペルミスなんかだったりしますです。
盛り付け - 2
samba 用のパスワードファイルを作成します。
# cd /usr/local/samba/bin
# mkdir /usr/local/samba/private
# cat /etc/passwd | /usr/local/samba/bin/mksmbpasswd.sh > /usr/local/samba/private/smbpasswd
# chmod 600 /usr/local/samba/private/smbpasswd
samba へのパスワードの設定をおこないます。
/usr/local/samba/smbpasswd を使用します。ログイン名 pochi さんで設定する場合には、引数としてログイン名を与えるようです。
# cd /usr/local/samba/bin
# ./smbpasswd pochi
New SMB password:
Retype new SMB password:
Password changed
/usr/local/samba/private/smbpasswd を確認するとちゃんとパスワードが設定さえているのが確認できると思いますよ。
使用する人全部のパスワードを設定しましょうね。
味見 1
さて daemon として起動してみて Windows 系マシンで見えるか試してみましょう。
# cd ../bin
# smdb -D
# nmdb -D
これで samba の daemon が起動しました。後は Windows の方の設定になります。
味見 2
[ コントロールパネル ]-[ ネットワーク ] で、
- Microsoft ネットワーククライアント
- TCP/IP プロトコル
- ネットワークカード
- Microsoft ネットワーク共有サービス
を設定しておきましょう。
Windows のログイン名と同じログイン名が Solaris 側の /etc/passwd にあることを確認しましょう。 Solaris 側でのパスワードが必要になります。
[ ネットワークコンピュータ ]-[ ネットワーク全体 ] をダブルクリックしてみましょう。 samb で設定したワークグループ名が見えると思います。
それをダブルクリックすると Solaris のホスト名のコンピュータが見えると思います。
それをまたダブルクリックすると、プリンターやパブリックのフォルダーや自分のホームディレクトリのフォルダーが見えると思います。
パブリックのフォルダーはダブルクリックすると、承認なしで開くでしょ ?
ホームディレクトリはダブルクリックすると、パスワードを要求してくると思います。 Solaris 側のパスワードを入力してみてください。開くでしょ ?
プリンタをクリックするとプリンタの設定ウィンドウが開くと思います。その指示に従いドライバなどをインストールすると使用できるようになります。
問題無く動けば OK !!
プリンタなど試したていたら削除しておきましょう。
Solaris 側では daemon 化している smdb と mndb を ps -A で探して kill して味見はおしまい。
味見 3
WinNT4.0 での対応策で、 WinNT4.0 側でDES 暗号化しないように設定しちゃいましょ。
samba を作り替えなくていいですもんね。:)
- レジストリ・エディタを起動します。
- HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Rdr\Parameters を探します。
- プルダウンメニューで [ 編集(E) ]-[ 値の追加(V) ] をします。
- 以下のような設定にします。
Value Name |
EnablePlainTextPassword |
Data Type |
REG_DWORD |
Data |
1 |
これで WinNT4.0 をリブートしてみてください。 samba にログインできるようになるはずです。きっとなるよなぁ。
食事
ちゃんとコンピュータ起動時に samba も起動するようにしましょう。
rc2.d に置くためのスクリプトのサンプルが /export/home/compile/samba-1.9.18p10/examples/svr4-startup に samba.serverという名前で置かれてあります。これをベースに変更しましょう。
サンプルは /opt/samba にインストールすることを前提としているみたいですね。これを /usr/local/samba に変更しましょ。
samba のログはどこがいいのでしょうね ? 今回の例では samba をインストールしたディレクトリに var なんて作ってますが、他のログもある /var の下に samba なんてディレクトリを作った方が管理が楽そうな気がしますです。ログファイルのパスは smb.conf で指定するか、この S99samba.sever で smbd と nmdb に起動時のオプションで指定できます。起動時のオプションの方が採用されるようですね。
# cd /export/home/compile/samba-1.9.18p10/examples/svr4-startup
# cp samba.server S99samba.server
# vi S99samba.server
/opt/samba/bin/smbd -D -s/opt/samba/smb.conf
↓
/usr/local/samba/bin/smbd -D -s/usr/local/samba/lib/smb.conf
/opt/samba/bin/nmbd -D -l/opt/samba/log -s/opt/samba/smb.conf
↓
/usr/local/samba/bin/nmbd -D -l/usr/local/samba/var/log -s/usr/local/samba/lib/smb.conf
# cp -i S99samba.server /etc/rc2.d
これでコンピュータの起動時に samba が起動するようになります。
/etc/rc2.d にコピーする前に試したい時は、
スタート : # S99samba.server start
ストップ : # S99samba.server stop
で、試してくださいな。
後片付け
ソース・コードなどはバックアップしておいて作業した生ごみは必要がなければ消してしまいましょう。
# cd /usr/local/compile
# rm -r samba-1.9.18p10 samba-1.9.18p10.tar.gz
味付け - 1
マウントした時点でクライアントにメッセージを送るようにします。つねに接続しているようなクライアントの使い方だと意味が無いですねぇ。
クライアント側では、 WindowsNT の場合 message service というサービスが動いていること、 Windows95/98 の場合 c:\windows\winpopup.exe が起動している事が条件になります。
方法としては、 /usr/local/samba/bin/smbclient を smb.conf から起動します。
/export/home/public が共有フォルダとします。
まず、送るメッセージの内容を共有フォルダに作成します。
# vi /export/home/public/.messages
Welcome to samba directory.
#
次に /usr/local/samba/lib/smb.conf の [public] セクションに preexec を追加します。
# vi /usr/local/samba/lib/smb.conf
preexec = sh -c '/usr/local/samba/bin/smbclient -U %h -M %m < /export/home/public/.messages'&
#
これで samba を再起動してフォルダをマウントするとメッセージが送られてくるようになります。
マニュアルで UNIX 側から送るには sbmclient に直接メッセージを放り込みます。
# sbmclient -M ホスト名 < メッセージファイル
味付け - 2
WINS client にしちゃいます。当然ですが srever 機能はなくなります。
/usr/local/samba/lib/smb.conf の [global] セクションに設定します。
# vi /usr/local/samba/lib/smb.cnf
wins support = no
wins server = IPaddress_of_WINSserver
#
これでいいと思います。実は試してませんです。:)