Samba

WindowsXPとの接続

smb.confに以下を追加

[global]

        encrypt passwords = yes
        update encrypted = no
        smb passwd file = /etc/smbpasswd


登録ユーザからsambaユーザの作成

# cat /etc/passwd | mksmbpasswd.sh > /etc/smbpasswd

読み取り権限の変更(rootのみ可)

# chmod 600 /etc/smbpasswd

sambaバスワードの設定

# smbpasswd [username]

ユーザ追加(sambaユーザのみの追加)

# smbpasswd -a [username]

samba再起動。

sambaのインストール


インストールは,
samba-2.0.10-ja-1.1/sourceの下で

./configure --with-i18n-swat
--with-i18n-swatはweb上からsambaをコントロールするソフト
swatをインストールするオプション

make

make install

でOK

/usr/local/sambaにインストールされる
/usr/local/samba/lib/smb.conf
のconfファイルが設定ファイルになる
/usr/local/src/samba-2.0.10-ja-1.1/examples/smb.conf.default.ja
をコピーするか、swatを利用して作成

swatを動作させるには

/etc/pam.d/sambaを以下のような2行を作成

auth required /lib/security/pam_pwdb.so nullok shadow
account required /lib/security/pam_pwdb.so

/etc/inetd.conf

# SWAT
swat stream tcp nowait.400 root /usr/local/samba/bin/swat swat
を追加

kill -HUP (inetdのpid)

swatへの接続はhttp://hostname:901/


sambaの起動は

/usr/local/samba/bin/nmbd -D
/usr/local/samba/bin/smbd -D


ここからsamba.conf

[global]

	security = user (ユーザ認証モード)
	共有(ファイル/プリンタ)を決まった個別のユーザを使ってアクセス
します。
	必ずUNIXアカウントが必要ですので、新規ユーザのために新しくアカウント
を作成する必要があります。
	SambaだけでWindowsドメインやWindowsワークグループを作成する場合に
適しています。
	そのほかshare,domain,server がある

        coding system = EUC
	Linuxマシン側で扱うファイル名のコーディングシステムを指定します。
	sjis,euc,hex,capなどが選べますが、以下の指針を参考にして下さい。

        client code page = 932
	日本語は932でOK

        workgroup = MATSUNET0
	ワークグループ名

        server string = Samba %v on %h VineLinux
        encrypt passwords = Yes
	パスワードの暗号化

        socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
	この値が推奨

        os level = 2
	Sambaをmaster browserにさせようとするなら、smb.confの[global]
セクションで"os level"のオプションを高い数に設定します。デフォルトは0で34
にすれば他のどんなシステムよりも優先してmaster browserになれます
(Sambaは除きますが)。
"os level"が2のときはWfWgやWin95より高く設定できますが、NTASよりは低いです。
NTASの domain controllerのos levelは32になっています。

        preferred master = Yes
        domain logons = Yes
        domain master = Yes
        local master = yes
        dns proxy = No
        oplocks = No
        logon script = %U.bat
	%Uにはユーザ名がはいる。各ユーザごとにユーザ名.batがlogon
バッチとして動く

[homes]
ここの設定がLinuxユーザのホームディレクトリが見える設定

        comment = %U's Home Directories
        writeable = Yes

        browseable = No
	他人からはフォルダの存在を見せない設定	

[netlogon]
        comment = The domain logon service
        path = /home/samba/logon
	logonバッチの置くディレクトリ/home/samba/logon/%U.batが動く

        public = no
        writeable = no
        browsable = no


以下の2のセッションで2つのディレクトリを公開する設定
[student_RW]
        comment = Student ReadWrite
        path = /home/samba/student_rw
        writeable = Yes
[student_R]
        comment = Student ReadWrite
        path = /home/samba/student_r
        writeable = No




SambaでWindows NT Server と同じ転送速度を確保する方法

何か適当なファイル、 5Mbyte から10Mbyte ぐらいのファイルを用意してください。 
これは転送速度を計測する際に用います。 


--------------------------------------------------------------------------------

さて、以下の例では Samba Server のマシン名を 濃紫(Nohshi.my.domain) 、 Windows
 client (Windows98) マシン名を 菖蒲(Ayame.my.domain) としましょう。 


--------------------------------------------------------------------------------

まずは、Nohshi 上で tcpdump を起動してください。 記録を後で調べる必要がある
ので、root 権限で 

# tcpdump > logfile
を実行しておいてください。 

次いで、Ayame 上から Nohshi を開いてください。 

Nohshi から Ayame へのファイル転送を行ってください。 上記の 5Mbyteほどの
ファイルを転送するのであれば、 ウィンドウを Drug&Drop でコピー してもいい
ですし、 ftp しても構いません。 これは Winsock2 の問題であって 
SMB protocol 等の問題ではないので、 TCP 通信でありさえすれば何を使っても
構いません。 

ファイル転送が終了したら、tcpdump を Ctrl-C などで止めてください。 
kill -9 では止めない方がいいです。 最後の方の記録が出力されない可能性が
ありますので。 

logfile 中には tcp の通信記録が保存されているはずです。 この中から、 

Ayame 、 Nohshi 間の通信記録で、 
 (xxxx の部分は数字)という文字を含んでいる行を 探しだしてください。 
Ayame.my.domain > Nohshi.my.domain
という文字列を含んでいる行と、 
Nohshi.my.domain > Ayame.my.domain
という文字列を含んでいる行の両方があると思いますが、 その両方を調べて、
xxxx という数字の 小さい方 を選んでください。 この数字のことを Maximum 
Segment Size mss と呼びます。 普通、ethernet を使っている場合は、 1460 
か 536 かのどちらかでしょう。 これは、一つの IP packet に入れることの
できる、 最大の data 量を表します。 

smb.conf の [global] 部の最後に 

include = /smb.conf.global.%a
include = /smb.conf.global.%M
include = /smb.conf.global.%a.%M
という行を追加してください。 

 は FreeBSD ports の場合ですと/usr/local/etc
ですが、 これは OS や package によって異なります。 適切なディレクトリを
指定してください。 

smb.conf と同じディレクトリに、 smb.conf.global.ayame.my.domain という
ファイルを作成してください。 このファイルに 

socket options = TCP_NODELAY SO_SNDBUF=yyyy
という一行を書き込みます。 yyyy は、 先に求めた、mss の値の丁度2倍の値を
指定してください。 できの悪い NIC の場合、 1byte でも大きな値を指定すると
一気にパフォーマンスが劣化し、 救いがたい状態が発生します。 

あとは、smbd を再起動してやれば完成です。 


--------------------------------------------------------------------------------

マシンに依存しない、特定の OS 用の設定ファイルは smb.conf.global. 
に、 特定マシンの特定 OS の場合(マルチブートとか)は、 smb.conf.global.
. というファイルに必要な設定を書いてください。 

include ファイル指定行における %M は internet machine name です。 

同様に %a は OS name ですが、 どの OS の場合にどのような文字列になるのかは、
 smb.conf のマニュアルをみてください。