[an error occurred while processing this directive]
Contents
Sambaとは?
Samba日本語版
ドキュメント
技術情報
紹介&リンク
Community
プロジェクト
メーリングリスト
イベント
ユーザー会
etc...
お問合せ
ご支援・ご協力
日本 Samba ユーザ会 (Samba Users Group Japan)

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

  • 共有名、コンピュータ名、コメントの日本語対応
  • SWAT(Samba Web 管理ツール)の日本語化および日本語入力の対応
    Samba 2.0からサポートされたSambaをWebブラウザを使って管理するツールを日本語化しています。
  • ドキュメントの日本語化
    http://www.samba.gr.jp/ で公開されている日本語ドキュメントを同梱し、SWATから簡単に参照できるようにしてあります。

最新版は、日本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をソースからコンパイルする必要があります。

  • コンパイルには、CコンパイラやMake,patchコマンドなどの開発環境が必要です。
  • Samba2.0.5a以降のsmbmountはLinuxカーネル2.2用にできているため、Linuxカーネル2.0ではコンパイルできません。
  • Samba日本語版のSPECファイルはすべてのOS用が用意されていません。

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

(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がまったく動かない場合は以下を確認下さい。

  • /etc/inetd.conf に 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のプロセス番号)
  • /etc/pam.d/samba があるか確認下さい。もしなければソースのパッケージディレクトリからコピーします。
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つを選ぶ必要があります。

  • security = share (共有認証モード)

    共有(ファイル/プリンタ)を決まった固定ユーザを使ってアクセスします。
    パスワードだけで、アクセス制御できるため、新規ユーザのために新しくアカウントを作成する必要がありません。
    小規模な部門サーバやSOHO用に適しています。

  • security = user (ユーザ認証モード)

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

  • security = domain (ドメイン認証モード)

    共有(ファイル/プリンタ)を決まった個別のユーザを使ってアクセスします。
    必ずUNIXアカウントが必要ですので、新規ユーザのために新しくアカウントを作成する必要があります。
    しかし、ユーザ認証はWindowsドメインにしてもらいます。
    すでに、Windowsドメインが構築されていて、そこにSambaマシンを追加する場合に適しています。

  • security = server (サーバ認証モード)

    共有(ファイル/プリンタ)を決まった個別のユーザを使ってアクセスします。
    必ずUNIXアカウントが必要ですので、新規ユーザのために新しくアカウントを作成する必要があります。
    しかし、ユーザ認証は他のWindowsサーバやSambaサーバにしてもらいます。
    すでに、SambaやWindowsによるWindowsドメインやWindowsワークグループが構築されていて、そこにSambaマシンを追加する場合に適しています。

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

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

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

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

全体設定 [Global]

基本オプション

  • workgroup

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

例: workgroup = EIGYO1

  • server string

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

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

既定値: server string = Samba %v

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

  • interfaces

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

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

セキュリティ オプション

  • security

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

  • map to guest

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

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

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

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

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

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

チューニング オプション

  • socket options

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

socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192

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

  • coding system

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

    • sjis
      SambaをWindows NT Serverの代替として使うならば、シフトJISを使うのが便利です。
      しかし、Linux上で漢字ファイル名を操作するには工夫が必要です。
    • euc
      SambaをUNIX - Windows 連携機能として使うならば、EUCを使うのが便利です。
      Linux上で漢字ファイル名を操作するのが容易です。
      しかし、EUCはクライアントのSJISコードをすべてマッピングできると限らないので文字化けが発生することがあります。
    • hex
      ファイル名を16進数で扱うため、sjisとeucの中間の特性を持ちます。
      つまり、シフトJISのマッピングを誤ることもなく、Linux上で漢字ファイル名を操作することも可能です。(16進表示を見やすくするツールなどはいくつか存在します)
    • cap
      hexと同じ特性を持ち、CAPやNetatalkを使ってマッキントッシュとの共有するときに使用します。
  • client code page

    クライアントに日本語Windowsを使用する時は、932を必ず指定します。

WINSオプション

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

  • wins server

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

  • wins support

    Sambaマシン自身をWINSサーバにする場合、yesにします。

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

以下は設定例です。

[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]

基本オプション

  • comment

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

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

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

  • path

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

例: path = /home/kikaku

セキュリティ オプション

  • read only

    更新のある共有は、read only = No とします。

  • create mask

    Samba によって作成されるファイルに設定されるUNIX のモード・ビットのパーミッションを8進数で指定します。

  • directory mask

    Samba によって作成されるディレクトリに設定されるUNIX のモード・ビットのパーミッションを8進数で指定します。

  • force user

    クライアントが接続したときのユーザ名は無視され、全てのファイル操作は「強制されたユーザ forced user」によって実行されたことになります。

  • guest only

    guest ok = yes の時、全てのファイル操作は guest によって実行されたことになります。

  • guest ok

    接続するときにパスワードが不要になり、guestでアクセス可能とします。

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

  • browseable>

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ドメインへの参加方法

まず下準備として 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以降ではここは、* を指定します。
  • add user script と del user script を設定する

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://www.da-cha.org/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 ドメインコントローラ機能も正式にサポートされる予定です。

  • SambaをWinodwsドメインコントローラとして設定する

まず、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: \>というプロンプトが現れます。ここからは以下のコマンドが利用できます。

  • lsとdir
    リモートのファイル一覧を表示
  • lcd
    ローカルのディレクトリ変更
  • cd
    リモートのディレクトリ変更
  • pwd
    リモートのカレントディレクトリを表示
  • get
    リモートからローカルへファイルを1つ転送
  • mget
    リモートからローカルへファイルを複数転送
  • put
    ローカルからリモートへファイルを1つ転送
  • mput
    ローカルからリモートへファイルを複数転送
  • rename
    リモートのファイル名を変更
  • more
    リモートのファイル内容を表示
  • mask
    ファイルマスクを指定します
  • delとrm
    リモートのファイルを削除
  • mkdirとmd
    リモートにディレクトリを作成
  • rmdirとrd
    リモートのディレクトリを削除
  • prompt
    mputとmgetでプロンプトが出ません
  • recurse
    mputとmgetでサブディレクトリを転送します
  • translate
    印刷時、テキストモードに変更します
  • lowercase
    get時にファイル名を小文字に変換します
  • print
    ローカルファイルを印刷します
  • printmode
    印刷モードをテキストとグラフィックスに切り替えます
  • queue
    リモートプリンタのキューを表示します
  • qinfo
    リモートプリンタのキュー情報を表示します
  • cancel
    リモートプリンタのキューを削除します
  • quitとqとexit
    終了します
  • newer
    mget時、新しいファイルだけを持ってきます
  • tar
    tarを実行します
  • tarmode
    tarのモードを<full|inc|reset|noreset>から指定します
  • setmode
    ファイルのモードを指定します
  • helpと ?
    helpを表示します
  • !
    シェルを実行します

●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ユーザ会小田切 耕司高橋 基信はま野 賢一朗


ミラーサイト: [ WWW: master ] [ FTP: ring | kddilabs | plathome | mex | master ]

Copyright © 1999-2018 日本 Samba ユーザー会 (Samba-JP)
2011-12-19 01:17:51 JST 更新