samba

※UNIX環境にSMBファイルアクセスをもたらします。
 要するに、Windowsマシンなどから直接、Linuxマシンの
 ファイルのやりとりができるようになるわけです。
 (もちろん、その逆も可能です)
 UNIXでファイル共有といえば、NFSやNISが有名ですが、
 これだけWindowsが普及すると、SMBプロトコルは
 やはり便利です。Linuxマシンが、あたかもWindows
 マシンであるかのように見えますので、都合がいいです。

 ファイルのやりとりには「文字コード」の問題が大きく
 のしかかりますので、なるべくSambaは「日本語版」を
 使うようにしましょう。

※今までSamba-2.0.10-jaを利用してきましたが、
 今後は最新の2.2.xを利用するようにしました。
 最適のパフォーマンスを得るには、カーネルを
 2.4系にした方が良いみたいですが、とりあえず
 カーネルは2.2系のままSambaを新しくします。


【ダウンロード】
http://www.samba.gr.jp/

※上記サイトより、Samba日本語版「samba-2.2.11-ja-1.0.tar.bz2」を
 ダウンロードしてください。

※sambaはLinux(Unix)上で動作するわけですが、
 UnixとWindowsとでは、パスワードの暗号化方法が
 異なり、そのままでは比較できないのです。
 そのため、以下を選択しなくてはなりません。

   1.Windowsで暗号化をやめる
   2.sambaにWindowsのパスワードをおぼえさせる

1.はいまどきネットワーク上を平文でパスワードを流すなんて
時代錯誤もいいところですから、是非2.を選択してください。

また、困ったことに、Windows95(OSR2以降を除く)、
WindowsNTSP3より前のマシンは、デフォルトでは
平文パスワードを使用しています。
それ以後のWindowsは暗号パスワードが標準になっています。
ですから、2.を選択した場合、暗号化が必要なWindowsの場合は、
パッチをあててください。これにより、デフォルトが暗号化パスワード
になります。

Windows95で暗号パスワードをデフォルトとするパッチはこちらです。
(OSR2も修正パッチがでていますが)


【展開】
(以下の作業はrootで行ってください)
# cd /usr/src
# bzip2 -cd samba-2.2.11-ja-1.0.tar.bz2 | tar xvf -

すでにsamba が起動していたら停止させます。
# /etc/rc.d/init.d/smb stop

【コンパイル】
# cd /usr/src/samba-2.2.11-ja-1.0
# cd source
# ./configure --with-i18n-swat
# make clean
# make

【インストール】
# make install

※実行ファイルをコピー
# cd /usr/local/samba/bin
# cp smbd /usr/sbin/.
# cp nmbd /usr/sbin/.
# cp swat /usr/sbin/.
# cp winbindd /usr/sbin/.
# cp addtosmbpass /usr/bin/.
# cp convert_smbpasswd /usr/bin/.
# cp make_printerdef /usr/bin/.
# cp findsmb /usr/bin/.
# cp make_nftable /usr/bin/.
# cp make_smbcodepage /usr/bin/.
# cp make_unicodemap /usr/bin/.
# cp nmblookup /usr/bin/.
# cp rpcclient /usr/bin/.
# cp smbcacls /usr/bin/.
# cp smbclient /usr/bin/.
# cp smbpasswd /usr/bin/.
# cp smbspool /usr/bin/.
# cp smbstatus /usr/bin/.
# cp smbtar /usr/bin/.
# cp tdbbackup /usr/bin/.
# cp testparm /usr/bin/.
# cp testprns /usr/bin/.
# cp wbinfo /usr/bin/.

(面倒なので、後でバッチスクリプトをご紹介いたします)



【設定】
# cd /usr/local/samba/lib
# mv smb.conf smb.conf.org
(「/etc/smb.conf」がない場合は、「touch /etc/smb.conf」と入力してください)
# ln -s /etc/smb.conf smb.conf
# mv lmhosts lmhosts.org
# ln -s /etc/lmhosts lmhosts


※この後、sambaの設定ファイルを編集するのですが、
 「swat」という大変便利なツールを使うと、簡単に
 設定できます。でも、最初は勉強のため手動で
 設定するのもよいかと思います。

----------------------------------------
<NT/2000-Serverあり:smb.confの例はこちら
----------------------------------------


----------------------------------------
<NT/2000-Serverなし:smb.confの例はこちら
----------------------------------------



vi lmhosts (例:皆さんの環境に合わせて作成してください)
----------------------------------------
127.0.0.1 localhost
192.168.1.2 xa200-1
192.168.1.3 nx-1
192.168.1.4 versa
192.168.1.5 v200-1
192.168.1.6 v166-1
192.168.1.7 dell-1
192.168.1.8 v13-2
192.168.1.9 v13-1
192.168.1.10 ebara-1
192.168.1.11 pv3000-3
192.168.1.12 lavie-1
192.168.1.13 gp7-1
192.168.1.14 nori-1
192.168.1.15 miura-1
192.168.1.100 linux
192.168.1.101 linsvr
192.168.1.102 linfw
192.168.1.103 freebsd
192.168.1.104 plamo
192.168.1.105 mvp3e
192.168.1.106 ntsvr
192.168.1.107 xa7e
192.168.1.90 lbp740
192.168.1.91 rnp638c6f
192.168.1.92 rnp62b5fd
192.168.1.93 lp8200
----------------------------------------
「:wq!」で保存終了します。

【起動準備】
# testparm | more で「smb.conf」に設定エラーがないか確認します

# cd /usr/local/samba/bin
# mkdir old
# mv *.old old/.

実行ファイルをコピーするバッチファイルを作成
# vi sambacp
----------------------------------------
#!/bin/sh
#copy to /usr/sbin
cp smbd /usr/sbin/.
cp nmbd /usr/sbin/.
cp swat /usr/sbin/.
cp winbindd /usr/sbin/.
#copy to /usr/bin
cp addtosmbpass /usr/bin/.
cp convert_smbpasswd /usr/bin/.
cp make_printerdef /usr/bin/.
cp findsmb /usr/bin/.
cp make_nftable /usr/bin/.
cp make_smbcodepage /usr/bin/.
cp make_unicodemap /usr/bin/.
cp nmblookup /usr/bin/.
cp rpcclient /usr/bin/.
cp smbcacls /usr/bin/.
cp smbclient /usr/bin/.
cp smbpasswd /usr/bin/.
cp smbspool /usr/bin/.
cp smbstatus /usr/bin/.
cp smbtar /usr/bin/.
cp tdbbackup /usr/bin/.
cp testparm /usr/bin/.
cp testprns /usr/bin/.
cp wbinfo /usr/bin/.

----------------------------------------
「:wq!」で保存終了します。
# chmod 700 sambacp

こうしておくと、
# ./sambacp
で実行ファイルのバッチコピーができます。



# cd /etc/rc.d/init.d
# vi smb
----------------------------------------
</etc/rc.d/init.d/smbの例はこちら
----------------------------------------
「:wq!」で保存終了します。
# chmod 750 smb
# chown root.root smb

# chkconfig --add smb
# chkconfig --level 1 smb off
# chkconfig --level 2 smb off
# chkconfig --level 4 smb off
# chkconfig --level 6 smb off

# chkconfig --level 3 smb on
# chkconfig --level 5 smb on
# chkconfig --list | grep smb


※念のため「/etc/hosts.allow」で、LANネットワークでのアクセスが
 許可されているかを確認しておいてください。
# cat /etc/hosts.allow
(sambaはこのファイルを参照していませんが、念のためです。)


【起動】
# /etc/rc.d/init.d/smb start
 または
# /usr/local/samba/bin/smbd -D -s /etc/smb.conf
# /usr/local/samba/bin/nmbd -D -H /etc/lmhosts -s /etc/smb.conf

【バージョンの確認】
# /usr/local/samba/bin/smbstatus

※エラーがでたら、以下を試してください。
# mkdir /usr/local/samba/var/locks
# chmod 700 /usr/local/samba/var/locks
# touch /usr/local/samba/var/locks/STATUS.LCK

この後、smbstatus を実行してみてください。


【停止】
# /etc/rc.d/init.d/smb stop

【再起動】
# /etc/rc.d/init.d/smb restart

【samba専用パスワードの設定】
まず、sambaを停止します。
# /etc/rc.d/init.d/smb stop

# smbpasswd -a (ユーザID名)   ←新規登録
# smbpasswd -e (ユーザID名)   ←samba使用許可

※エラーが起きる場合は、以下を試してみてください。
---------------------------------------------------------------
# touch /etc/smbpasswd
# mkdir /usr/local/samba/private
# chmod 700 /usr/local/samba/private
# ln -s /etc/smbpasswd /usr/local/samba/private/smbpasswd

# mkdir /usr/local/samba/var/locks
# chmod 700 /usr/local/samba/var/locks
# touch /usr/local/samba/var/locks/STATUS.LCK

この後、smbpasswd を実行してみてください。
---------------------------------------------------------------


一人一人の設定では面倒という方は、以下をお試しあれ。
# mksmbpasswd.sh < /etc/passwd > /etc/smbpasswd
※この操作をした場合、上のsamba使用許可をする必要があります。

属性を変更します。
# chmod 600 /etc/smbpasswd

sambaを起動します。
# /etc/rc.d/init.d/smb start

また、smbpasswd でパスワードを変更したら、自動的に
/etc/passwdも変更してくれるオプションを「smb.conf」の
[global]領域に指定することもできます。

unix password sync = Yes
passwd program = /usr/bin/passwd %u
passwd chat = *New*UNIX*password* %n\n *ReType*new*UNIX*password* %n\n *passwd:*all*authentication*tokens*updated*successfully*
(passwd chatの文は長いですが1行です)


ただし、以下の場合は同期されません。

  1. rootがsmbpasswdコマンドでローカルユーザのSambaパスワードを変更した場合
  2. passwdコマンドでUNIXパスワードを変更した場合

 
ちなみにわたしは、面倒ですが いつもそれぞれ個別に設定しています。
つまり同期の機能は利用してはいません。設定自体は行っているのですが、
結局useraddでユーザを新規登録したり、メールのAPOP認証のユーザを
追加したりするので、各ソフトごとに、いちいちパスワードを設定するように
しています。スクリプトで自動化する手もありますが、わたしの場合、
ユーザの人数がせいぜい20人くらいなので、これで十分です。

必要が生じたときに、すべてのソフトのパスワードを変更します。
APOPなどは、rootでないと変更できないのですが、パスワード
入力のときだけキーボードをわたして当人に入力させる、という
原始的な方法でやっています。(笑)

※swatの利用
クライアントマシンのWEBブラウザから、Linuxのsambaの設定が
行える便利なツールです。ヘルプも充実していますので、これを
使うと理解が深まると思います。

ただし、swatで設定した場合、コメント部分が削除される
ことがあります。一度手動で設定ファイル(smb.conf)を
作成した方は、念のためバックアップをとっておくと
よいでしょう。

1.コンパイルするときに「--with-i18n-swat」をつける
2.「/etc/services」にポート901としてswatを登録
3.「/etc/inetd.conf」に901としてswatを登録
4.「inetd」を再起動


1.については、すでに説明済みです。

2.「/etc/services」の最後にでも、以下を追加します。
 (すでに追加されていれば、この処理は不要です)
swat 901/tcp

3.「/etc/inetd.conf」の最後にでも、以下を追加します。
 (すでに追加されていれば、この処理は不要です)
swat stream tcp nowait.400 root /usr/local/samba/bin/swat swat

4.「inetd」を再起動します。
# kill -HUP (inetdのプロセス番号)
(inetdのプロセス番号は「ps aux | grep inetd」でわかります)


以上の設定をしますと、クライアントマシンから、以下のように
アドレスを入力すると、Linuxのsambaを設定できます。
【アドレス】http://(LinuxのsambaサーバのIPアドレス):901/

ログインのダイアログウィンドウがでますので、ユーザ名に
「root」を指定し、rootのパスワードも入力してEnterキーを
押してください。


【LinuxからWindowsの共有フォルダにアクセスする】
この場合、Windowsマシンがファイルサーバとして機能します。
$ smbclient //(サーバ名)/(共有フォルダ名)

パスワードを聞いてきたりしますので、入力してください。
接続が成功すると、「smb: \>」というプロンプトが表示されます。
「HELP」と入力すると、使用できるコマンド一覧が表示されます。
FTPに近いコマンドが利用できます。「quit」で終了します。