SambaによるWindowsファイルサーバ構築

− Samba入門 −

日本Sambaユーザ会小田切 耕司高橋 基信はま野 賢一朗

はじめに

Samba(サンバと読みます)はLinuxなどのUNIXマシンをWindowsのファイルサーバにするオープンソースソフトウェアです。

Sambaは、はじめUNIXとWindowsを接続する「異機種間ファイル共有」のためのツールでしたが、現在は「Windows NT Server を置換するためのWindowsファイルサーバ」という位置づけになってきています。

例えば、UNIXで一般的なファイル共有の機能であるNFS(ネットワークファイルシステム)は、Windowsファイルサーバとしての必須機能であるOLE 32ビットロッキングをサポートしていないため、UNIX - Windows間のデータ交換程度にしか使用できず、機能や性能面でWindows NT Server を置換することは不可能なのです。

では、なぜSambaでファイルサーバを構築するのがいいのでしょうか?

答えは簡単です。Windows NT Serverと違ってソフトウェアのライセンス費用がまったくかからなくなるからです。

<OLE 32ビット ロッキング>

OLE(Object Linking Embedding)は、WordやEXCELといったマイクロソフトの製品で図やグラフを共用できるようにするために、開発されたマイクロソフトの独自仕様で、アプリケーション間でのソフトウェア共有を実現します。

OLEが持っているさまざまな機能は、クライアントOS(Windows)側に実装されているものが多いのですが、ファイルロッキング(排他制御)に関する機能は、ファイルサーバ側にも実装されるべき重要な必須機能です。

その中でもファイルの中のオフセットを指定して、データの一部部分だけをロックするOLE独自の機能は、UNIXの一般的なファイル共用機能であるNFSでは実装されていなかったり、一部分ではなくファイル全体をロックする機能で代替していたりします。

ですからこうしたNFSでマイクロソフトのオフィス製品を使うと正しくファイルロックがされずにデータが破壊されてしまうことがあります。

Sambaはこのファイル内のオフセット指定を32ビット変数で扱えるOLEの32ビット ロッキングをサポートしています。

WindowsNTはオフセット指定を64ビット変数で扱えるOLEの64ビット ロッキングをサポートしており、WindowsNTからSambaをアクセスすると問題になるかと思われますがファイルサイズが2GBを越えない限り、Linuxでは問題とはなりません。

(64ビットファイルシステムをサポートした他のOSでは問題ありません)

ここでは、日本Sambaユーザ会のメンバであり、Samba日本語版の開発プロジェクトを進めているコアメンバによって、「SambaによるWindowsファイルサーバ構築」方法を解説したいと思います。


Samba日本語版とは

Samba日本語版は、オリジナルに対して以下の改良が加えられており、初心者に大変使いやすいものとなっています。

最新版は、日本Sambaユーザ会のWebページ http://www.samba.gr.jp/samba_japan/ で公開していますので、ぜひチェックをお願いします。


Sambaのインストール

それでは、Samba日本語版のインストールをしましょう。

ここでは、RedHat系/Turbo Linux に則したインストール方法を紹介します。
(LASER5 Linux , VineLinux , Kondara MNU LinuxはRedHat系でパッケージに互換性があります)

 Sambaはインストール時に標準で入っていることが少なくないのですが、今回は、すでにSambaがインストールされている場合も、Samba日本語版に置き換えてしまいましょう
(以下の作業は root になって行うものとします)。

まずは、念のためインストールされているSambaを削除します。

$ su -
Password: ********** <-----パスワードを入力します
# rpm -qa | grep samba    <-----インストールされているSambaのパッケージをリストし、すべて削除します
# rpm -e samba-client     <----- Linuxのディストリビューションによってパッケージの種類は異なります。
# rpm -e samba
# rpm -e samba-common     <----- Linuxのディストリビューションによってパッケージの種類は異なります。
# rpm -e smbfs     <----- Linuxのディストリビューションによってパッケージの種類は異なります。

次に、本誌のCD-ROMに入っているSambaのインストールします。

# mount /dev/cdrom
# cd /mnt/cdrom/samba/redhat/  <---お使いのディストリビューションにあわせて設定してください。
# rpm -ihv samba-common            <----- Linuxのディストリビューションによってパッケージの種類は異なります。
# rpm -ihv samba-client                <----- Linuxのディストリビューションによってパッケージの種類は異なります。
# rpm -ihv samba

これで、Samba日本語版のインストールは終了です。

バイナリパッケージが無いときのインストール方法

あなたの使用しているLinux用のバイナリパッケージがない場合は、以下に注意して自分でSambaをソースからコンパイルする必要があります。

以下に簡単にコンパイル手順を述べます。

(1) RPMの作成(RedHat系、Turbo系の場合)

# tar xvzf samba-2.0.5aJP2.tar,gz              <----ファイルの解凍 (ディレクトリはどこでも構いません)
# cd samba-2.0.5aJP2/samba-jp/packaging/RedHat
# sh makerpms.sh                                  <----RPMを作成します

(2) RPMのインストール
上記?の後、/usr/src/redhat/RPMS/i386/にうまくRPMが作成できたら、先に述べた方法でRPMをインストールします。

# cd /usr/src/redhat/RPMS/i386/
# rpm -ihv samba-common
# rpm -ihv samba-client
# rpm -ihv samba

(3) RedHat系、Turbo系以外のSamba日本語版インストール
上記?でうまくRPMが作成できない場合、以下でインストールします。

# tar xvzf samba-2.0.5aJP2.tar,gz              <----ファイルの解凍 (ディレクトリはどこでも構いません)
# cd samba-2.0.5aJP2/source
# ./configure
# make  install

上記の場合の、Sambaのインストール先は、/usr/local/samba/の下になり、以下の標準Linuxの構成と異なります。

以降の説明では、ファイルの場所を注意して読んで下さい。

ファイル名 説明 Sambaデフォルト インストール先 RedHat Linux系でのRPMによるインストール先
smb.conf
lmhosts
printers.def
設定ファイル /usr/local/samba/lib/ /etc/
smbpasswd パスワード・ファイル /usr/local/samba/private/ /etc/
codepages コードページ・ファイル /usr/local/samba/lib/codepages/ /etc/codepages/
log.* ログ・ファイル /usr/local/samba/var/ /var/log/samba/
STATUS..LCK ロック・ファイル /usr/local/samba/var/locks/ /var/lock/samba/
smbd,nmbd,swat デーモン・プログラム /usr/local/samba/bin/ /usr/sbin/
smbclient,smbsh,
その他プログラム
コマンド /usr/local/samba/bin/ /usr/bin/
*.html SWAT用HELPファイル /usr/local/samba/swat/help/ /usr/share/swat/help
man manファイル /usr/local/samba/man/ /usr/man/

Sambaの設定

Sambaの設定は、/etc/smb.confにパラメータを記述することで行いますが、Samba日本語版が正しくインストールできると以下のような日本語版SWAT(Samba Web 管理ツール)を使って、簡単にsmb.confの設定が可能になります。

起動方法は、 http://Sambaサーバ名:901/ です。

起動したら、ユーザ名としてrootを、パスワードとしてrootのものを入力します。

しかし、SWATはWindows版のMSIEかNetscapeで使用するようにしてください
できる限り、Linux版のNetscapeなどを使用するのは止めましょう。
理由はNetscapeにバグがあって、設定を変更するとsmb.confが壊れてしまうことがあるからです。
一部のNetscapeは更新しても大丈夫のようですが、Linuxではドキュメントの参照程度にしましょう。

もし、SWATがまったく動かない場合は以下を確認下さい。

  1. /etc/servicesの確認
    以下のエントリがあるか確認し、なければ追加します。
    swat 901/tcp
  2. /etc/inetd.confの確認
    以下のエントリがあるか確認し、なければ追加します。 (/usr/sbin/swatがあることを確認)
    (先頭に #がついていたら削除)
    swat stream tcp nowait.400 root /usr/sbin/swat swat
  3. inetd に HUP を送信
    inetd をリスタートする為に, inetd のプロセスに HUP を送信します。
    kill -HUP  (inetdのプロセス番号)
cp samba-2.0.5aJP2/packaging/RedHat/samba.pamd /etc/pam.d/samba

SWATの表紙

Sambaの設定は画面の上部にある以下のアイコンをクリックして行います。

アイコン 内容
home.gif (1881 バイト) SWATの表紙です。

日本語の説明や技術資料を簡単に見ることができます

globals.gif (1613 バイト) Samba全体の設定を行う[GLOBAL]セクションの設定ができます。
セキュリティ モードもこの中で設定します。
shares.gif (1590 バイト) 共有フォルダ毎の設定ができます。
ユーザホーム機能を提供する[homes]セクションもここで設定します。
printers.gif (1987 バイト) プリンタ共有の設定をします。
プリンタ共有全体を提供する[printers]セクションもここで設定します。
status.gif (2582 バイト) Sambaデーモンの起動・終了ができます。
誰が共有ファイルをアクセスしているか、表示されます。
ユーザのセッションを強制切断することが可能です。
viewconfig.gif (1485 バイト) smb.confの内容を表示します。
passwd.gif (1427 バイト) ユーザの追加・削除、パスワードの変更などを行えます。

まず、表紙にある「導入編」にあるドキュメントは、必ず目を通しておいて下さい。

セキュリティモードの決定

Sambaの設定に先だってまず以下の4つのセキュリティ モードから1つを選ぶ必要があります。

みなさんセキュリティモードは決まりましたか? では、実際の設定に移ります。

では、「全体設定 [GLOBALS] 」アイコンをクリックして、設定を開始しましょう。

パラメータはたくさんでてきますが、今回は紙面の関係上、重要なパラメータだけを解説します。

(SWATは、最初重要なパラメータまたはデフォルト以外を設定しているパラメータを表示します。
「詳細表示」ボタンを押すことですべての設定可能パラメータを表示させることができます)

全体設定 [Global]

基本オプション

Sambaの所属する(あるいはクライアントへ応答する)Windowsワークグループ名/Windowsドメイン名を指定します。
Windowsクライアントで指定するものと同じワークグループ名/ドメイン名を指定しましょう。

例: workgroup = EIGYO1

「ネットワークコンピュータ一覧」で詳細表示した時、「サーバの説明」と「プリンタの説明」に表示する文字列を指定します。

文字列の中の%v は Samba バージョン番号と置換され、%h は ホスト名に置換されます。

既定値: server string = Samba %v

例: server string = Samba %v on %h Linux

このオプションは、Samba サーバが複数のインタフェイスを持つ(つまり、LANカードが2枚以上刺さっているマシンなど)場合にやSambaが正しくサブネットマスクを認識できない時に指定します。

複数のネットワーク・インターフェースを、IP アドレス/ネットマスクのペアのリストで指定します。ネットマスクはビット・マスク、またはビット長となります。

セキュリティ オプション

先に説明したセキュリティ・モードを指定します。

UNIXにユーザアカウントがない場合、guest接続を許すかどうか指定します。

設定は下記の3 種類があります。

"Never" guest接続を許しません。
既定値です。
"Bad User" ユーザ名が無かった場合、ゲストログインとして扱い、 "guest account" で接続します。
"Bad Password" 不正なパスワードの場合、ゲストログインとして扱い、 "guest account" で接続します。
これは、任意のユーザがパスワードをタイプミスしたり、暗号化パスワードを設定し忘れていても、なにも言われずに "guest" としてログインしてしまうことに注意下さい。

暗号化されたパスワードを使用するかどうか、指定します。

Windows NT 4.0 SP3 以降やWindows98,Winodws2000,アップデートの適用されたWindows95では暗号化パスワードが必要になりますので、必ずyesとしましょう。

暗号化パスワードはLinuxの場合、通常 /etc/smbpasswd (または、smb passwd fileで指定したもの)に格納します。

チューニング オプション

性能のために以下を指定することをお薦めします。
(バッファサイズ8KBはWindows NT Serverと同じ値です)

socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192

ファイル名の取扱オプション

WINSオプション

セグメントが複数ある場合やマシンの台数が10台以上ある場合は、できる限りWINSサーバを設置しましょう。
Windows NT Serverがあれば、それをWINSサーバにしましょう。
なければ、SambaマシンをWINSサーバにしましょう。

WINS(Windowsインターネット名前サービス)サーバ(自身以外)のIPアドレスを指定します。

必要なパラメータを入力したら、「設定」ボタンを押して確定します。

以下は設定例です。

[global]
security = user
workgroup = HONSYA
server string = Samba %v on %h
encrypt passwords = yes
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
coding system = euc
client code page = 932
wins support = yes
map to guest = Bad Password

共有フォルダの設定方法

それでは、実際にファイル共有の設定をしてみましょう。

ここでは、全体設定で「security = user (または、domain , server)」を選択したことを前提に解説します。
 「security = share (共有認証モード)」 では、動きが異なります)

SWATを開き、「共有設定」のボタンを押します。
次に新規の共有名を入力し、「新規共有作成」のボタンを押すとパラメータの入力画面が出てきます。
ここでは、例として共有名を「企画」としておきましょう。

共有設定 [Share]

基本オプション

共有名のコメント(説明)を記述します。

通常のSambaでは、ここに日本語は使用できません。
Samba2.0.5aJP2だけが、日本語を使用できます。

例: comment = 企画の共有フォルダ

このパラメータは、ユーザがアクセスするディレクトリを指定します。

例: path = /home/kikaku

セキュリティ オプション

コンピュータ一覧表示オプション

net view コマンドの出力や「ネットワーク コンピュータ」の共有一覧にこの共有を見せるかどうか指定します。

ユーザホーム機能を提供する[homes]の場合は、browseable = Noとします。

既定値: browseable = Yes

パラメーターの詳細は上に示したとおりです。

 これらの入力が終わったら、「設定変更」のボタンを押してください。
これで、Linux側の ディレクトリ が Windows 側に共有されることになります

今回は、公開範囲を3レベル想定し、以下に3つの例をあげます。

例1)決まったユーザ(グループ)だけが、アクセス可能な共有の設定

/home/kikaku の属性を 775(rwxrwxr-x)とし、同一のUNIXグループだけが更新でき、他のUNIXグループは参照が可能な共有を作成します。(valid usersとinvalid usersで、更にグループ内のユーザを制限できます。)
UNIXにアカウントとパスワードの設定のないものはアクセスできません。

[企画]
comment = 企画の共有フォルダ
path = /home/kikaku
read only = No
create mode = 0664
directory mode = 0775

例2)UNIXにアカウントを持つユーザは誰でもアクセス可能な共有の設定

/home/kikaku の属性を 755(rwxr-xr-x)とし、ディレクトリの所有者をkikauというUNIXユーザとします。
UNIXにアカウントとパスワードの設定のあるものは、この共有に誰でもアクセス(更新・参照)できます。
しかし、UNIXにアカウントのないものはアクセスできません。

[企画]
comment = 企画の共有フォルダ
path = /home/kikaku
read only = No
force user = kikaku                    # 全員が、kikakuというUNIXユーザでアクセスします。

例3)誰でもアクセス可能な共有の設定

/home/kikaku の属性を 755(rwxr-xr-x)とし、ディレクトリの所有者をnobodyというUNIXユーザとします。
UNIXにアカウントがあっても、なくても誰でもアクセス(更新・参照)できます。

[global]
map to guest = bad user    # UNIXにアカウントがない場合は、guestでアクセス可能とします

[企画]
comment = 企画の共有フォルダ
path = /home/kikaku
read only = No
guest only = Yes        # アカウントのあるユーザもguestでアクセスさせます。
guest ok = Yes

共有プリンタの設定方法

Sambaサーバで共有プリンタを使うには、まずLinux上でプリンタを使用できるようにする必要があります。

/etc/printcapに設定を記述してもいいですが、今回は初心者向けということで RedHat系でよく使われるprinttoolを使った方法を紹介します。

printtoolを使うには、Linuxに(GNOMEやKDEのような)X-Windowシステムをインストールする必要があります。
そうすれば、プログラムメニューに「コントロールパネル」や「プリンタ設定」がありますので、それを起動しましょう。

もし、見つけられなければ、ktermなどから、 printtool と入力すると以下のような画面が起動するはずです。
(Linuxによっては、以下のメニューは日本語かもしれません)

printtool1.gif (4327 バイト)

新規にプリンタの作成する場合は、「Add」ボタンを押します。
マシンのパラレルポートにつながったプリンタの場合は、以下の「Local Printer」をチェックします。

printtool2.gif (2521 バイト)printtool3.gif (3584 バイト)

Sambaで使うプリンタに「Input Filter」は指定しては、いけません。
(設定にプリンタの型番や種類、Linuxのプリンタドライバは必要ありません)

「Suppress Headers」は、印刷セパレータを使いたい時にチェックをはずします。

以下にこれによって、生成される /etc/printcap の内容を載せます。
printtoolがない環境では、以下を /etc/printcap に記述してください。
(2行目以下の左側空白はタブでないと印刷できないので注意下さい。)
もちろん、その場合は、スプールディレクトリは自分で作成する必要があります。

lp:\
    :sd=/var/spool/lpd/lp:\
    :mx#0:\
    :lp=/dev/lp0:

ネットワーク上にある lpr (lpd)プリンタを使用する時は、以下のように「Remote Unix (lpd) Queue」をチェックします。
(ここでは、プリンタにネットワークカードを指したり、プリンタボックスに接続するネットワークプリンタを想定しています)

printtool4.gif (2605 バイト)printtool5.gif (8678 バイト)

「Remote Host」には、プリンタのホスト名かIPアドレスを、「Remote Queue」には、キュー名(lpが一般的です)を指定します。
ローカルプリンタと同様に「Input Filter」は指定しては、いけません。

以下にこれによって、生成される /etc/printcap の内容を載せます。
printtoolがない環境では、以下を /etc/printcap に記述してください。
(2行目以下の左側空白はタブでないと印刷できないので注意下さい。)

lp0:\
    :sd=/var/spool/lpd/lp0:\
    :mx#0:\
    :rm=lp9200sx:\
    :rp=lp:

printtool6.gif (4819 バイト)

上記は、ローカルプリンタとリモートプリンタを設定した例です。

実はこれでもうできたも同然です。SWATの「プリンタ設定」で以下を設定すればOKです。
(プリンタ毎の設定は通常必要ありません。きめ細かな設定が必要な時のみプリンタ毎に設定して下さい。

なぜなら、OS(の/etc/printcap)に設定してあるすべてのプリンタを、Sambaで公開する設定の「load printers = yes」はデフォルトなので通常指定する必要はないからです。

[printers]
path = /var/spool/samba      # このディレクトリは、chmod 777(rwxrwxrwx)に しておきます
writeable = no
guest ok = yes
printable = yes

Sambaの起動

SWATを使って設定がうまくいったら、引き続いて、Sambaを起動しましょう。

SWATの状態表示(STATUS)ページを開いて、smbd (ファイル共有デーモン) と nmbd (ネームサービスデーモン) を立ち上げます。

動作確認をして問題がなければ、毎回手動で立ち上げるのは大変ですから、次回起動時からはSambaが自動的に立ち上がるように設定しておきます。

Red Hat Linux/Laser5 Linux/Vine Linux /Turbo Linuxの場合は以下のコマンドで行います。

/sbin/chkconfig --add smb

Sambaの起動スクリプトが /etc/rc.d/init.d/smb にあることを確認下さい。
もしなければソースのパッケージディレクトリから、smb.init ファイルをコピーします。


Sambaユーザの作成

Sambaサーバの動作がしたら次は、ユーザーの設定をします。

Sambaのユーザーは、Linuxのユーザー設定とともにSamba独自の設定が必要となります。

● 既存LinuxユーザーをSambaユーザとして登録

まずは、既存のLinuxユーザー設定をそのままSambaの設定に移行してみましょう。

# mksmbpasswd.sh < /etc/passwd > /etc/smbpasswd
# chmod 600 /etc/smbpasswd

但し、この設定は /etc/passwd に記述してあるユーザーをSamba側にエントリされるだけでパスワードは、また個別に設定しなくては行けません。

Sambaユーザーのパスワードの設定はsmbpasswd を用いておこないます。
(例は、hamanoというユーザのSambaのパスワードの設定をしています)

# smbpasswd hamano
New SMB password:        <-----パスワードを入力
Retype new SMB password: <-----再度パスワードを入力
Password changed for user hamano.

rootなどのシステムアカウントをSambaに接続させたくないときは、/etc/smbpasswd からユーザ行を削除しましょう。

● Linuxユーザーの登録

新しくSambaユーザを登録するには、まずLinuxのユーザーを登録する必要があります。

これは、Sambaに限った設定ではなく、一般的なユーザーの登録方法です。
GUIのツール(linuxconfなど)もしくはコマンド(図*)で設定してください。
この設定は、/etc/passwdに格納されます。

# /usr/sbin/useradd -m hamano

● Samba側のユーザー設定

Linuxのユーザーを登録してから、以下のようにSambaユーザを登録します。

# smbpasswd -a hamano
New SMB password:        <-----パスワードを入力
Retype new SMB password: <-----再度パスワードを入力
Added user hamano
Password changed for user hamano.

Windowsクライアントの設定

ここまで、一通り Samba サーバ側の設定を行ないましたので、次に Windows95/98/NT クライアント側の設定について解説します。

とはいえ、基本的に Samba であることによる特別な設定は一切不要です。
既にクライアントを導入している場合は、基本的に何ら設定を変更することなく Samba サーバへのアクセスが可能です。

ただし、Samba サーバにアクセスするには、各クライアントに TCP/IP がインストールされていることが必要です。
最近は少なくなりましたが、現在のネットワーク環境で TCP/IP を利用していない場合は、Samba サーバにアクセスすることは出来ません。

PRTCL95.GIF (12709 バイト)

Samba サーバの設定で新規にワークグループを構築した場合は、以下のようにワークグループ名を先程設定したものにあわせます。
Windows NT でも同様にワークグループ名を変更してください。

Windows95/98の設定例
MSNETW2.GIF (11447 バイト)

WindowsNTでの設定例
WGRPNT1.GIF (14665 バイト)

(注1)
Samba サーバを既存のワークグループに参加させた場合は、クライアント側では何も設定する必要はありません。

(注2)
実際には Samba サーバにアクセスするためには、必ずしもワークグループ名が同一である必要はありません。
例えば WINS 等で名前解決が出来ていれば UNC名(\\サーバ名\共有名)を直接指定してアクセスしても構いません。

再起動後「ネットワークコンピュータ」アイコンをクリックすると、Samba サーバが確認できると思います。
なお、以下のように、最新の Samba 日本語版では、コンピュータ名や共有名に日本語(半角カナは不可)を指定した場合でも、正しく表示されるようになっていますので、既存環境との親和性が更に高まっています。

x-1-256.gif (6709 バイト)

更に共有フォルダアイコンをクリックすると、設定によってパスワードを求められたり、図x-2 のように、そのまま内部を見られたりするはずです。
図-x2 を御覧になれば分かるように、クライアントからは Windows マシンにアクセスしているのか、Samba サーバにアクセスしているのかは全く分かりません。
x-2-256.gif (6639 バイト)x-3-256.gif (9489 バイト)

Sambaのプリンタをクライアントから使用するには、(Linux側にプリンタドライバは必要なく)クライアント側にプリンタドライバが必要です。

プリンタを設定するには、「ネットワークコンピュータ」からSambaマシンをクリックして、現れるプリンタアイコンをダブルクリックするだけでインストールが開始されます。
プリンタドライバの場所を聞いてきますので、プリンタに付属していたものやインターネットで最新のWindows用のものをダウンロードして使用して下さい。


ユーザホーム機能の使い方

共有の表示時に、クライアントのユーザ名を共有名としてマッピングして表示する機能です。

たとえば、yamadaというアカウントでSambaマシンをアクセス(ネットワーク・コンピュータをクリック)した場合、UNIX上の/home/yamadaが共有名yamadaとして表示され、また、suzukiというアカウントでSambaマシンをアクセス(ネットワーク・コンピュータをクリック)した場合はUNIX上の/home/suzukiが共有名suzukiとして表示されます。
これによってユーザごとの専用のディレクトリを提供し、他人のディレクトリをアクセスするのが防げます。
userhome.gif (9267 バイト)

smb.conf設定例(1)

(Linuxに登録した)Sambaユーザ名とWindows(にログオンする時の)ユーザ名が1対1で対応する場合

[global]
security = USER
encrypt passwords = Yes
# SWATの「全体設定」で指定します。
# security = DOMAINまたはSERVERでも構いません
[homes]
comment = %U さん専用の共有です
valid users = %S     
read only = No
browseable = No
# SWATの「共有設定」でhomesという共有を作成します。
# 日本語は、Samba2.0.5aJP2でないと使用できません
# 該当ユーザ以外はアクセスさせない
# 更新可能にします
# homes共有を見せずに、ユーザホームを見せます

smb.conf設定例(2)

(Linuxに登録した)Sambaユーザ名とWindows(にログオンする時の)ユーザ名が1対1で対応しない場合

[global]
security = SHARE
encrypt passwords = Yes
# SWATの「全体設定」で指定します。
# security = SHAREでないと共有設定のusernameは使用できません
[homes]
comment = %U さん専用の共有です
username = %S
only user = Yes
read only = No
browseable = No
# SWATの「共有設定」でhomesという共有を作成します。
# 日本語は、Samba2.0.5aJP2でないと使用できません
# 共有名とユーザ名をマッピングさせます
# 該当ユーザ以外はアクセスさせない
# 更新可能にします
# homes共有を見せずに、ユーザホームを見せます

上記の設定では、「\\sambaサーバ名\ユーザ名」で、Windows 95/98からログインしたものと違うユーザで接続できます。


SambaをWinodwsドメインに加える

企業内ネットワークで Samba サーバを利用するときは、既存の Windows ドメインの一部として、クライアントに Samba サーバであることを感じさせずに運用を行なっていきたいところだと思います。

Samba 2.0 以降では,NT Workstation のようにWindowsドメインに参加することが可能になりました。
ドメインに参加することで、認証を Windows ドメインに統合して、よりシームレスな運用が可能になります。
それでは実際に設定方法を見ていきましょう。

まず下準備として Windows NT Serverの "サーバマネージャ"(svrmgr.exe) を使ってSambaマシンをWindows NT WorkstatonとしてWindowsドメインに追加しておいて下さい。
その後 Samba マシン上でドメイン参加の手続きを行ないます。
この作業は SWAT では行なえませんが、SWAT の "ホーム" から参照できる DOMAIN_MEMBER.txt に詳しく書かれていますので、併せてご一読ください。
参加するWindowsドメインの名前が DOMNAME , PDC(プライマリ・ドメイン・コントローラ) のコンピュータ名が DOMPDC の場合の方法は以下の通りです。

Windowsドメインへの参加 (#はrootユーザのプロンプトです)

# /etc/rc.d/init.d/smb stop <-- Samba サーバの停止
# smbpasswd -j DOMNAME -r DOMPDC
smbpasswd: Joined domain DOMAIN. <-- 成功したときに表示されるメッセージ

事前に忘れずに Samba サーバを停止させておいてください。
また、-r オプションでは、必ず PDC のコンピュータ名(上記の例では DOMPDC)で PDC を指定出来る必要があります。
良く分からない方は、PDC のコンピュータ名と IP アドレスを /etc/hosts に記述しておいてください。

成功すると /etc に ドメイン名.マシン名.mac というファイルができているはずです。
これを確認したら、以下のように security パラメータを DOMAIN にして、Samba サーバを起動します。
起動に成功すれば,晴れて Samba もWindowsドメインのメンバです。

SWATで設定するsmb.confの内容

[global]
security = DOMAIN
encrypt passwords = Yes
workgroup=DOMNAME             # ドメイン名を指定します
password server = DOMPDC     # Samba 2.0.6以降ではここは、* を指定します。

Samba サーバをWindowsドメインのメンバにしたことで、Windowsドメインにログオンしたユーザであれば Samba サーバにもシームレスにアクセスできるようになりました。
そこで更に一歩進んで、Samba サーバ上でのアカウントのメンテナンスを自動化する方法を解説します。

まず、一例として以下のようなスクリプトを /usr/local/sbin に作成します。

スクリプト( /usr/local/sbin/smb-useradd.sh ) の例

#!/bin/sh
/usr/sbin/useradd -m $1
mkdir ~$1/public_html                # これは、ApacheのためのWebホームディレクトリです

スクリプト( /usr/local/sbin/smb-userdel.sh ) の例

#!/bin/sh
/usr/sbin/userdel -r $1

次にSWATでsmb.confに、以下の、add user script と del user script パラメータを設定します。

smb.confの設定

[global]
add user script = /usr/local/sbin/smb-useradd.sh %u
delete user script = /usr/local/sbin/smb-userdel.sh %u

(注1) add user script パラメータは security = server でも設定可能です
(注2)NTのユーザグループとLinuxのグループをマッチングさせたい方は、以下を参照下さい。
http://plaza22.mbn.or.jp/~momokuri/samba/index-j.html 

これで、Windows ドメインにアカウントがあるが、Samba サーバにはアカウントがないユーザで Windows ドメインにログオン後、Samba サーバにアクセスすると、自動的ユーザが登録されホームディレクトリが表示されます。

add user script を設定すると、Windowsドメインで認証されているにも関わらず、Samba サーバに存在しないユーザでアクセスがあったときに、add user script で指定したスクリプトを実行してユーザを自動的に作成することが出来るのです。

del user script は、同様にユーザがWindowsドメインに存在しなくなったときに自動的に消去するためのスクリプトです。

これらを活用することで、Windowsドメイン上でのユーザの追加/ 削除のみで、Samba サーバ上に自動でユーザの作成/ 削除を行なうが可能になり、管理コストが大幅に削減されると思います。


SambaによるWindowsドメインコントローラの構築

Sambaは Windows 95/98 に対して、Winodwsドメインコントローラとして機能することが可能になっています。
企業などで、これから Windows ドメインを採用すべきか検討を行なっている場合には、Samba サーバによるWindowsドメインコントローラの構築も現実的な選択肢ではないかと考えます。

なお、記事の執筆時点ではまだリリースされていませんが、3月頃にリリース予定の Samba 3.0 では、Windows ドメインコントローラ機能も正式にサポートされる予定です。

まず、SWATの「全体設定」で smb.conf を設定して下さい。

[global]
security = USER
encrypt passwords = Yes
domain logons = Yes
domain master = yes
wins support = yes
local master = yes
preferred master = yes
os level = 65
workgroup=
ドメイン名
logon script=%U.bat
# [全体設定]
# セキュリティモード
# 暗号化パスワード設定
# ドメインコントローラ設定
# ドメインマスタブラウザ設定
# WINSサーバ設定

次に「共有設定」で[netlogon]共有を作成し、以下のように設定します。

[netlogon]
path = /home/samba/netlogon
writeable = no
guest ok = yes
# ログオンスクリプトを格納する共有の作成

動作確認のために、Windows クライアント上で 以下のようなログオンスクリプトを記述し,Samba サーバの [netlogon] 共有にユーザ名.batという名前で配置しておきましょう。

net use * \\サーバ名\ユーザ名

Windows 9xクライアントの側では,[コントロールパネル] - [ネットワーク]- [Microsoft ネットワーククライアント] のプロパティを以下のように設定してください。
MSNET1.GIF (14290 バイト)

また Windowsドメインでの設定と同様に、[コントロールパネル] -[パスワード] の"ユーザ別の設定" タブで,以下のように,ユーザ別の設定" をチェックしておくことで、ユーザプロファイルの利用も可能です。

設定を行なったら、Windows クライアントをリブートして下さい。
リブート後起動したら,設定したWindowsドメインにログオンして下さい。
ログオンスクリプトが動作すれば、設定は正しく動いています。
Samba サーバが複数台ある時は、一台のサーバをWindowsドメインコントローラとして設定し、残りのサーバは security パラメータを server にして、認証サーバとしてドメインコントローラの Samba サーバを指定すれば、Windows ドメイン環境のように、一度認証を受ければ、すべての Samba サーバにアクセスできるようになります。


LinuxからWindowsファイルシステムを使用する

●Sambaのマウント機能

Sambaを使ってWindowsの共有フォルダをLinuxのファイルシステムとしてマウントすることが出来ます。

ここでは、その使用方法について紹介します。

例として、 Windows(名前は"Nt1")の「kikaku」という共有フォルダをLinux側の /home2 に共有することにしましょう。
特に今回は、簡単のためユーザー「hamano」が持つWindows上での権限をそのままLinux側で実現することにします。

 Linux側でrootになり、ディレクトリ /home2 を作り、smbmountコマンドを以下のように実行します。
パスワードが要求されるので、ユーザー「hamano」のWindows側でのパスワードを入力します。

# mkdir /home2
# smbmount //Nt1/kikaku /home2 -U hamano
Password: ********* (← hamano のパスワードを入力)

これで、マウントの設定は終わりです。
実際にマウントされているかどうかを df コマンドを使って確かめて下さい。
マウントされた共有は、通常のファイルシステム同様に cd や ls などのコマンドを使って操作することができます。

# df
ファイルシステム     Kバイト  使用済   使用可   使用率  マウント場所
/dev/hda2            3958767  1767546  1986394     47%   /
/dev/hda6            1232895   559948   609243     45%   /usr
/dev/hda7             257598   164542    79752     64%   /var
//Nt1/D-Drive       1124896   422176   702720     38%   /home2

●SAMBAクライアント機能

smbclientコマンドを使用するとFTPコマンドのようなインタフェースでLinuxからWindowsのファイルをアクセスできます。

使用方法は以下の通りです。

smbclient service <password> [-p port] [-d debuglevel] [-l log] [-t termcode]

引数とその意味:
        -p port               ポート番号を指定します
        -d debuglevel         デバッグレベルを設定します
        -l log basename.      ログまたはデバッグ・ファイル名を指定します
        -n netbios name.      NetBIOSでのマシン名を指定します
        -N                    パスワードの問い合わせを抑止します
        -P                    プリンタに接続する時に指定します。
        -M host               ポップアップ(winpopup)メッセージをマシンに送ります
        -m max protocol       最大プロトコルレベルを指定します
        -L host               利用可能な共用資源一覧を表示さいます
        -I dest IP            接続先のIPアドレスを指定します
        -E                    メッセージを標準出力(stdout)ではなく、エラー出力(stderr)に出します
        -U username           接続時のユーザ名を指定します
        -W workgroup          接続時のワークグループ名を指定します
        -c command string     コマンドを区切りのセミコロンを指定します
        -t terminal code      漢字コードを {sjis|euc|jis7|jis8|junet|hex} で指定します
        -T<c|x>IXgbNa         tarコマンドを実行します
        -D directory          初期ディレクトリを指定します

使用例1) 一番簡単な方法、commonという共有名に接続します。

smbclient \\\\nt1\\common

使用例2) NetBIOS名とTCP/IPのホスト名が違う時

smbclient \\\\nt1\\common -I 10.23.45.67

使用例3) 接続先のユーザ名を指定する

smbclient \\\\nt1\\common -U odagiri

使用例4) プリンタに接続する

smbclient \\\\nt1\\epson1 -P

接続に成功すると、smb: \>というプロンプトが現れます。ここからは以下のコマンドが利用できます。

●SAMBA(smbtar)を使ってWindowsファイルをUnixのテープ装置などにバックアップ

SAMBAを使えば、WindowsファイルをUnixマシンにつながっているバックアップ装置でバックップすることができます。

注)ここでいうバックアップはユーザデータのバックアップです。
UNIXからWindowsシステムのバックアップをしたり、WindowsからUNIXシステムのOSのバックアップはできません。
これは、ファイルとして、OSディレクトリの下をバックアップすることは可能なのですが、OSがクラッシュした場合、リストアすることができないためです。

これには、smbtarというシェルコマンドが使用できます。
Unix側からSAMBAを使って、Windowsのファイルをテープなどにtar形式でバックアップできます。

smbtar [<options] [<include/exclude files]

Options: 意味 規定値
-r テープからPCへリストアします  PCからテープへセーブします
-i 増分(Incremental)モード フル・バックアップ・モード
-v コマンドをエコーします エコーしません
-s <server> PCサーバ名を指定します  
-p <password> PC側のパスワードを指定します  
-x <share> PCの共有名を指定します backup
-X 専有(Exclude)モードにします 共有(Include)
-N <newer> 指定日付より新しいものをセーブします  
-b <blocksize> テープのブロックサイズを指定します  
-d <dir> 共有名の中のディレクトリを指定します  
-l <log> SAMBAのログレベルを指定します 2
-u <user> ユーザ名を指定します  
-t <tape> テープデバイス名を指定します   tar.out

・Unixからのバックアップの例)

nt1というWindowsマシンの共有kikakuをtar.outというファイルにバックアップします。
(共有のパスワードは、kikakuとします)

smbtar -s nt1 -x kikaku -p kikaku

日本Sambaユーザ会の紹介

ここで簡単に日本Sambaユーザ会を紹介したいと思います。

日本Sambaユーザ会(略称:Samba-JP) http://www.samba.gr.jp/

1999年11月12日に「Sambaの研究開発、国際化および普及促進を図る」「 Sambaに関する情報の収集と公開、技術移転の促進」「会員相互および外部との技術的・人間的交流を図る」ためにユーザ会が発足しました。

個人ユーザを対象とした一般会員はもちろん、企業やユーザ団体を対象にした賛助会員も随時募集していますので、よろしくお願いします。

Sambaについてもっと知りたい方は、日本Sambaユーザ会のWebページ( http://www.samba.gr.jp/ )をぜひご覧下さい。

ユーザ会メーリングリストもいくつか運営されており、初心者の方も安心して参加できます。

もちろん、上級者向けSamba日本語版開発プロジェクト メーリングリストもあり、開発に参加することもできます。

では、メーリング リストでお待ちしています。(^_^)/~~~


日本Sambaユーザ会小田切 耕司高橋 基信はま野 賢一朗