Sambaを入れる
sambaとは、UNIXでNetBIOS互換のプロトコルで通信するためのソフトウェアです。 /03/03/15/
sambaデーモンを実行させて、Windowsネットワーク上からWindowsNTと同様に認識させます。これによってファイルやフォルダ、プリンタの共有などが可能になります。
Windowsばかりのネットワークでファイル交換を行う方法としては、親和性の高い手段と言えるでしょう。
またsambaにはオリジナルと日本語版があります。オリジナルはsamba-x.x.x.tar.gzとなっていますが、日本語版sambaだとja-samba.x.x.x.tbz(バイナリ)もしくはsamba-x.x.x-ja.tar.gz(ソース)となっています。
といってもオリジナルだと日本語ファイルが通らない、という訳ではありません。
日本語版だと、例えばsmb.confのコメントが英語ではなく日本語表記であったり、swatの各項目が日本語表示される。あるいは日本語のNetBIOS名に対応している、ということです。(詳しくは日本Sambaユーザ会)
しかし日本語も良いことばかりではありません。例えばsmb.confを標準コンソールで編集しようとすると、当然日本語部分が文字化けします。EUC表示できるエディタかビューワを使いましょう。
日本語も一長一短なので、徹底してコンソールという人はオリジナルを入れたほうが良いでしょうし、別に標準で日本語表示ばかりしているという人は日本語Sambaでも良いでしょう。
ただオリジナルと日本語の二種類が存在しており、自分はどちらをインストールしたかを把握していないと、インストール後に驚いたり、戸惑ったりするでしょう、というハナシです。
sambaの導入は、portsかpackageから入れる場合と、ソースをダウンロードしてきてコンパイルする方法とがあります。
どちらでも構いませんが、それぞれインストール後のファイル構造が異なります。
1.portsからインストールした場合
最新のsambaが導入出来ます。インストール後には、sambaデーモンは/usr/local/sbinに入ります。
2.パッケージから導入した場合
ports同様のファイル構造になります。パッケージに依存するバージョンとなります。
3.ソースコンパイルする場合
もちろん最新版のソースを取得します。インストールすると/usr/local/sambaディレクトリを作成し、samba関係のファイルは全てその中に保存されます。
ここではports/パッケージ法とソースコンパイル法の両方を示しますが、お好みの方で行えばいいでしょう。
インストールが終了すれば、設定項目は共通です。
ports/packageインストール
・portsの場合
>su
#cd /usr/ports/net/samba (日本語版はports/japanese/samba20です)
#make configure
#make
#make install
・packageの場合
・オリジナルsamba
[/stand/sysinstall]-[Configure]-[Packages]-[メディア]-[Net]-[samba]
・日本語samba
[/stand/sysinstall]-[Configure]-[Packages]-[FTP]-[japanサーバ]-[japanese]-[ja-samba]を選択してインストールします。
というのも、FreeBSD5.0Relの段階でDisc1のpackageには日本語対応のja-sambaが収録されていないからです。
packageサーバからFTPでダウンロードするのも、良い手でしょう。
ports/packageでインストールすると
/usr/local/sbin以下に smbd, nmbd, swat
/usr/local/bin以下に nmblookup, smbclient. 他実行ファイル
/usr/local/etc以下に smb.conf
が入ります。
ソースコンパイルの場合
まずソースを取得してきます。
・オリジナルsamba(拡張子tar.gzの物を選びましょう)
ftp://ftp.ring.gr.jp/pub/net/samba/
ftp://ftp.samba.gr.jp/pub/samba/
・日本語samba
ftp://ftp.samba.gr.jp/pub/samba-jp/samba-2.2.2-ja/samba-2.2.2-ja-1.0.tar.gz
現在(2003/02/10))ならオリジナルの最新は2.2.7a、日本語版の最新版なら2.2.2です。最新のものを選びましょう。(ここでは拡張子tar.gzを選びましょう。tar.bz2は圧縮方法が違うだけで、内容は同じです)
>fetch -a ftp.samba.gr.jp/pub/samba/samba-2.2.7a.tar,gz
ダウンロードしたら、ホームディレクトリで展開します。展開後configureでMakefileを生成したら、rootでインストールします。日本語版ならファイル名、ディレクトリ名が異なるだけですので読み替えてください。
>tar zxvf samba-2.2.7a.tar.gz
>cd samba-2.2.7a/source/
>./configure
>#make
>su
#make install clean
インストールが完了したら、Sambaが使うロックディレクトリを作成します。
ロックディレクトリとは誰かが使用中なら他の人には使わせないという「排他的制御」を行うディレクトリです。
# mkdir /usr/local/samba/var/locks
# chmod 755 /usr/local/samba/var/locks
# touch /usr/local/samba/var/locks/STATUS..LCK
ソースコンパイルでインストールすると
/usr/local/samba/bin以下に smbd, nmbd, swat
/usr/local/samba/bin以下に nmblookup, smbclient, 他実行ファイル
/usr/local/samba/lib以下に smb.conf
が入ります。
ここまででがインストールの違いで、ここからは内容は共通です。とはいえ、インストールディレクトリが異なるということはパスの違いが今後もつきまとうということですが。
まず、サービスポートを指定します。
「/etc/services」の中の以下のコメントアウトを外して、ポートを開かせます。
netbios-ns 137/udp
netbios-ssn 139/tcp
略
swat 901/tcp
次にsmb.confを設定します。これは不要なネットワークトラブルを防ぐためsambaを起動する前に行っておきましょう。(swatの意味が無くなってしまいますが)
オリジナルの設定ファイルが/usr/local/etcにあります。インストールの仕方によって有効となる設定ファイルのパスが違うので、そこへファイルを移します。(※オリジナルを残しておきましょう)
・ports/packageでインストールした場合
有効なsmb.confのパスは「/usr/local/etc」です。
>su
#cd /usr/local/etc
#cp smb.conf.default smb.conf
・ソースコンパイルでインストールした場合
有効なsmb.confのパスは「/usr/local/samba/lib」です。
>su
#cd /usr/local/etc
#cp smb.conf.default /usr/local/samba/lib/smb.conf
smb.confを編集し、動作を設定します
smb.confは非常に多くの設定項目を持っていますが、ここでは最低限必要なものを追加します。それ以外のものに関しては後で補足します。
[grobal]
workgroup = ワークグループ もしくは NTドメイン名
netbios name = hostname
encrypt password= yes コメントアウトを外す
#for Japanese Users
client code page = 932
coding system = EUC
注意:もし貴方のインストールしたのが日本語sambaなら、「vi smb.conf」と打ち込んだら意味不明の文字が画面一杯に現れて面食らったでしょう。これはEUCで記述されている日本語ファイルです。ktermやjlessなど、日本語表示出来る環境で閲覧する必要があります。
もっとも設定項目は英語なので、文字化けなど気にせず項目だけ設定してしまえば事足ります。
・日本語ファイル名取得
sambaは標準では日本語ファイル名を取得できません。(ファイル閲覧するときに、「日本語ファイル名が表示出来ない」と「日本語ファイル名取得が出来ない」を誤解することがあります)
smb.confの「for Japanese user」の下の「client code =932」と「codign system=cap」のコメントアウトを外し、「coding system=EUC」と書き換える。ここには文字コードを指定します。文字コードはEUCの他に、SJIS,CAP,HEXなどがあり、ネットワークの文字コードに合わせます。
シフトJISコードを使うならSJIS、MacやNetatalkなどAppleTalkを使うのならCAP、UNIXベースならHEXでいいでしょう。
日本語sambaをインストールした場合、この日本語部分は標準で設定されています。
smb.confの設定について、他はデフォルトで大丈夫でしょうが、なにか不都合があったりセキュリティを高めたいなど、自分のネットワークポリシーがあるなら、設定を変更します。設定項目は見ただけで分かるものも多いです。
尚、「netbios name」項目はデフォルトではありません。これはマシンが自分のNetBIOS名を名乗るときに使うものですが、sambaは「WinNTのTCP/IP上のネットワーク共有」として振る舞うため、(そもそもNetBIOSベースではなくTCP/IPベースで稼働しているのですから)本来NetBIOS名は必要ありません(環境に名前解決をするサーバ、つまりWINSかDNS。もしくは固定のIP名前テーブルがあれば良いことになる)。
しかし現実的に限定されたネットワーク内でDNSやWINSが走っていることは少なく、固定IPではなくDHCPを使用している場合も多いでしょう。
自然とNetBEUIのマスターブラウザに名前解決を頼ることになります。
そんな場合は「netbios name」を入力しておくことで名前解決が楽になります。
smb.confは非常に多くの設定項目を持ちます。日本Sambaユーザ会に詳しいsmb,confの設定があるので参考にしてください。
日本Sambaユーザ会
次にsambaの起動ですが、起動方法は三種類あります。
1.inetd.confから呼び出す。(スーパーデーモンから呼び出されます。ログインプロンプト前に起動します)
2.rc.localから呼び出す。(デーモンとして起動。ログインプロンプトが表示される前に起動します)
3.シェルスクリプトで呼び出す。(ログインプロンプト後に起動します。起動の内容を細かく指定できます)
起動自体、他のプログラムと不整合さえ起こらなければどれでも構わないでしょう。ただサービスがたくさん立ち上がっていなかったり、不具合がなかったりすれば、inetd.confで良いでしょう。
1.inetd.confから呼び出す。
/etc/inetd.confの最期の方にあるコメントアウトされてる下記の行から先頭の#を取り除く。
# netbios-ssn stream tcp nowait root /usr/local/sbin/smbd smbd
# netbios-ns dgram udp wait root /usr/local/sbin/nmbd nmbd
# swat stream tcp nowait/400 root /usr/local/sbin/swat swat
ports/packageではなくコンパイルインストールした場合、「/usr/local/sbin/」の部分が「/usr/local/samba/bin/」になるのを忘れないように修正しておきましょう。
次にinetdを再起動します。
>su
#kill -HUP `cat /var/run/inetd.pid`
これで再起動します。しかしもし「inetd.pidが見つからない」の類のエラーが出る場合、そもそもinetdが起動していないことを意味します。inetdを起動させましょう。
[/stand/sysinstall/]-[Configure]-[Network]-[inetd」にチェックを入れて、再起動します。
2.rc.localから呼び出す。
/etc/rc.localに以下の記述を追加します。
if [ -f /usr/local/etc/smb.conf];then
/usr/local/sbin/smbd -D (/usr/local/samba/bin/smbd -D)
/usr/local/sbin/nmbd -D (/usr/local/samba/bin/nmbd -D)
echo -n ' Samba Start'
fi
記述したら再起動します。
3.シェルスクリプトで呼び出す。
/usr/local/etc/rc.d/samba.sh.sampleをsamba.shにリネームするだけです。
>su
#cd /usr/local/etc/rc.d/
#mv samba.sh.sample samba.sh
再起動します。
sambaが起動しているかを確認します。
といっても、sambaの前にswatの確認をしましょう。外部からでもローカルからでも良いので、ブラウザでswatにアクセスします。
http://swatHostName:901/
ユーザー名を求められたら、一般ユーザかrootでログインします。現れたブラウザベースの設定プログラムがswatです。オリジナルsambaを入れたのなら英語で、日本語sambaを入れたのなら日本語のswatが現れたでしょう。
ここからsambaの設定などが変更できたりします。しかしswatはTCP/IPベースでどこからでもアクセス出来る上、パスワードもネットワーク上を平文で流れています。セキュリティ的観念では、swatは極力無効にしておいたほうが良いでしょう。
次にWindowsマシンを用意し、sambaが起動しているかを確認します。
sambaでNetBIOS名を指定した、もしくはネットワーク内に名前解決のサーバがある場合は、Windowsのマイネットワークでマシン名が表示されていればsambaは無事起動しています。
すぐに表示されない場合は、Windowsのコンソールで「nbtstat -R」と打って名前テーブルを更新した後、少し待ってからpingを打ってみましょう。応答があれば、第一段階クリアです。
第二段階は、もちろんファイル共有です。
Windowsマシンからマイネットワークもしくはファイル名実行で「\\sambaホスト名」を打ち込みます。するとアカウントを求められるので、ユーザー名を入力してみましょう。
ログインできません。
そう、まだログイン出来ないのです。というよりもログイン出来ないことを確認したのです。
つい混合しがちなのですが、sambaアカウントとUNIXアカウントは別々に存在しているため、いくらFreeBSD側にユーザーアカウントがあったとしても、それはsambaのアカウントとしては利用できないのです。
別途sambaのアカウントを作る必要があります。
>smbpasswd
もしくは
>su
#smbpasswd -a username
一般ユーザでsmbpasswdを実行すると、自分のアカウント名でsambaアカウントを作ります。
通常sambaアカウント名はUNIXアカウント名と一致させることが多いです。だからユーザー名が「misya」なら、sambaアカウント名も「misya」にしておきます。
自分のユーザ名のsambaアカウント制作は一般ユーザで出来ますが、自分のユーザ名以外のsambaアカウント名の制作はrootしか出来ません。
とりあえずsambaアカウント名を制作したら再びWindowsマシンからアクセスしてみましょう。
自分のホームディレクトリが見えたら成功です。
もしログイン出来なかったら、見落としがちな問題が二種類あります。
一つはsmb.confで「encrypt password= yes」を有効にしていない場合。これはWin95以降ではネットワーク上を流れるMSファイル共有はユーザー名やパスワードなどを暗号化して通信します。Windowsは暗号化してユーザー名とパスワードを送ってくるので、sambaは受け取ったデータを暗号として認識するかという設定です。
もう一つはWindows9x系においてアクセス制御が「共有レベル」になっていて、かつログオン名が異なっている。ということです。解決としては、Windowsログオンユーザー名をsambaアカウント名と一致させるか、アクセス制御を「ユーザーレベル」に変更します。
変更はマイネットワークのプロパティで変更します。
NTは標準でユーザーレベルでアクセスするので、sambaアクセス時にユーザー名とパスワードを問い合わせてきます。
無事アクセス出来れば、あとはプリンターの共有でもドメインコントローラでも、いろいろ遊べば良いでしょう。