17.4. スタンドアローンファイルサーバーの設定

17.4.1. セキュリティモード

共有するディレクトリの設定は、Samba の設定ファイルである /etc/samba/smb.conf を編集して行いますが、その前に Samba が提供するセキュリティモードについて解説します。セキュリティモードは、Samba がどのようにユーザーの認証を行うかを指定するためのもので、smb.conf の中でもっとも重要な設定の 1 つです。どのセキュリティーモードを選択するかは、smb.conf の[global]セクションで security パラメータを使用して定義します。Samba の規定値は、security = user です。スタンドアローンなファイルサーバーを構築するのであれば変更する必要はありません。

共有(share)レベルのセキュリティ

共有単位(共有ディレクトリ、共有プリンタ)でアクセスを制御します。Windows 95/98 で共有設定する方法と同じレベルの認証方法で、共有ごとにパスワードを設定することでアクセス制御を行います。セキュリティ的には最もゆるい設定で、パスワードさえ知っていれば、Linux システムにアカウントを持っていないユーザーでも共有にアクセスできてしまうため推奨しません。SOHO や小規模な部門のファイルサーバーを運用する場合に利用されることもあります。

ユーザー(user)レベルのセキュリティ

ユーザー単位でアクセスを制御します。つまり、Windows NT/2000/XP で共有設定する方法と同じレベルの認証方法で、ユーザ名とパスワードによる認証を行います。ユーザーは、Linux システム上にアカウントが作成されている必要があります。また、Linux システムのユーザーとは別に、Samba 用のユーザー作成とパスワードの設定も必要になります。これが、Samba の規定値です。

ドメイン(domain)レベルのセキュリティ

ユーザーレベルのセキュリティと同様に、ユーザー単位での共有設定を行いますが、Samba サーバーはクライアントから送信されたユーザー名およびパスワードをそのまま PDC(プライマリドメインコントローラ)として機能する他の Windows サーバー、または Samba サーバーに送信することで認証を委任します。したがって、認証は他のサーバーで行われますが、各ユーザーのアカウントは Linux システム上に作成する必要があります。Samba サーバーは、WindowsNT サーバーの1クライアントとしてみなされますので、WindowsNT のクライアントライセンスに注意してください。

Active Directory(ads)レベルのセキュリティ

Windows 2000/2003 Server で構築した Active Directory ドメインのメンバサーバーとして Samba を参加させる場合に使用します。Active Directory では、Kerberos を使用した認証が行われます。

いずれのセキュリティレベルにおいても、実際に Samba の共有ディレクトリへアクセスするには、Linux におけるアクセス権限の影響を受けることに注意する必要があります。例えば、ログインするユーザーが共有ディレクトリに書き込みをするためには、Linux 上においても共有ディレクトリに対して書き込み権限がなければなりません。

17.4.2. /etc/samba/smb.conf の編集

ここでは、Samba の設定ファイルである /etc/samba/smb.conf ファイルを編集し、Samba による共有ディレクトリの設定方法を解説します。また、Web ブラウザ上で smb.conf ファイルを編集することができる SWAT という設定ツールもあります。SWAT を利用するとテキストエディタで smb.conf を直接編集することなく、GUI による操作で Samba の設定が可能です。また、SWAT からは、Samba の詳細なマニュアルが参照できます。SWAT へのアクセス方法については 項17.8 で解説します。

/etc/samba/smb.conf には、多くのコメントが記述されていますが、コメントを省くとデフォルトの設定内容は以下のようになります。ファイル内の ; または # で始まる行はコメントとして扱われます。

[global]
        dos charset = CP932
        unix charset = UTF-8
        display charset = UTF-8
        map to guest = Bad User
        workgroup = MYGROUP
        server string = Samba Server
        printcap name = /etc/printcap
        load printers = yes
        log file = /var/log/samba/smbd.log
        max log size = 50
        security = user
        socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
        dns proxy = no

[homes]
        comment = Home Directories
        browseable = no
        writable = yes

[printers]
        comment = All Printers
        path = /var/spool/samba
        browseable = no
        guest ok = no
        writable = no
        printable = yes

smb.confファイルは、[ ]で囲まれた複数のセクションで構成され、各セクションにオプションを指定することで設定を行います。セクションには、すでに予約されているものがあり、[global]、[homes]、[printers]の 3 つが存在します。各セクションの概要は以下の通りです。

表 17-3. 予約セクション

[global]Samba の全体的な設定を行うためのセクション
[homes]ホームディレクトリの共有に関する設定を行うためのセクション
[printers]プリンタ共有に関する設定を行うためのセクション

Samba で Windows クライアントに提供する共有ディレクトリを新たに設定するには、セクションを定義し、各セクションにいくつかのパラメータを指定することで行います。セクション名は任意に設定することができます。このように、/etc/samba/smb.conf で定義された各セクションは、 [global] セクションを除き、Samba が Windows クライアントに提供する共有ディレクトリ、もしくは共有プリンタの設定を意味します。

例えば、以下の場合は、[public]というセクションを定義し、path というパラメータで、/var/samba/ ディレクトリの共有に関する設定を行っています。

[public]
path=/var/samba
...

定義した[public]セクションは、public というフォルダ名で、Windows のネットワークコンピュータからブラウズしたときに表示されます。

ここでは以下の設定例をもとに基本的なパラメータについて解説します。セキュリティモードは、Samba の規定値である security = user を選択するものとして解説します。必要であれば、デフォルトの smb.conf のバックアップをとってください。

ティップ

/etc/samba/smb.conf には、ここで解説するパラメータの他にも数多くのパラメータを指定できます。日本 Samba ユーザー会の Web サイトやオンラインマニュアルを参照してください。オンラインマニュアルは、SWAT から閲覧することができます。

[global]
        dos charset = CP932
        unix charset = UTF-8
        display charset = UTF-8
        security = user
        workgroup = TURBODOC
        
        server string = Samba Server
        log file = /var/log/samba/smbd.log
        max log size = 50
        socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192

        map to guest = Bad User
        guest account = smbguest
        passdb backend = tdbsam

[homes]
        comment = %U's Home directory
        writable = Yes
        browseable = No

[share1]
        path = /var/samba/share1
        writeable = Yes
        guest ok = Yes
        guest only = Yes


[share2]
        path = /var/samba/share2
        writeable = Yes
        force user = smbuser

[share3]
        path = /var/samba/share3
        writeable = Yes
        create mask = 0664
        directory mask = 0775

17.4.2.1. [global]セクション

[global]セクションは、smb.conf ファイルの冒頭に記述し、Samba の全体的な設定を定義します。各オプションの意味は以下の通りです。

注意

Samba 2.2.x の smb.conf で指定されていた client code page や coding system パラメータは削除されたことに注意してください。

dos charset

Windows クライアントで使用されている文字コードを指定します。日本語版の Windows を使用している場合には、CP932 を指定します。

unix charset

Linux システム上で使用している文字コードを指定します。Turbolinux 11 Server の場合は、UTF-8 を指定します。

display charset

Samba の Web 管理ツール SWAT の画面表示に使用する文字コードを指定します。Turbolinux 11 Server では、デフォルトで UTF-8 が指定されています。

workgroup

Samba サーバーを所属させる Windows ネットワークのワークグループ名を指定します。ここでは TURBODOC を指定しています。

server string

サーバーに関する説明を指定します。ここで指定した文字列は、Windows クライアントのネットワークコンピュータからブラウズしたときに「コメント」の欄に表示されます。

map to guest

Samba サーバーにアクセスするユーザーが Linux システムにアカウントが存在しない場合にどう対処するかを指定します。このパラメータは、以下の 3 つの値のうちのどれかを指定します。ここでは Bad User を指定しています。

表 17-4. map to guest の値

NeverSamba の規定値です。不正なパスワードによる Linuxユーザーのログインを拒否します。
Bad User不正なパスワードによる Linuxユーザーのログインは拒否しますが、ユーザー自体が登録されていない場合は、guest account オプションで指定されたゲストユーザーとして扱います。
Bad Password不正なパスワードによる Linuxユーザーのログインを、guest account オプションで指定したゲストユーザーとして扱います。

通常は、Never か Bad User を指定することを推奨します。Bad Password を指定してしまうと、正式に登録されたユーザーであるにもかかわらず、パスワードのタイプミスにより、ゲストユーザーとしてログインしてしまう恐れがあるからです。このとき、エラーメッセージなどは表示されませんので、ユーザーはゲストユーザーとしてログインしたことに気づかずに作業してしまう可能性があります。

socket options

Samba サーバーのパフォーマンスを調整するためのオプションです。通常は、変更する必要はありません。

guest account

ゲストユーザーのユーザー名を指定します。各セクションのパラメータで guest ok = Yes と設定した場合は、ここで設定したユーザーでログインします。ここでは、smbguest というユーザーを作成し、このユーザーを samba のゲストユーザーとして指定したものとして解説します。なお、Samba の規定値は nobody です。

passdb backend

Samba では、Linux システム上のユーザーとは別に Samba 用のユーザーを登録する必要があります。このパラメータでは、Samba ユーザーの情報やパスワードを格納するユーザー管理データベースの形式を指定します。指定可能な形式には、いくつかの種類がありますが、通常は smbpasswd、tdbsam、ldapsam から選択します。 Samba をスタンドアローンなファイルサーバーとして使用するのであれば、smbpasswd か tdbsam を指定します。ldapsam は、複数の Samba サーバーを運用する場合に、ユーザー情報を LDAP サーバーで統合管理する場合に利用されます。

ティップ

Samba 3.0 のデフォルト設定は、smbpasswd です。smbpasswd を指定すれば、Samba-2.2.x と同様に /etc/samba/smbpasswd ファイルを参照しますが、Samba-3.0 では tdbsam の使用を推奨しています。Samba ユーザーの登録方法については、項17.4.4 で解説します。

17.4.2.2. [homes]セクション

[homes]セクションは、ユーザーのホームディレクトリを共有するためにあらかじめ用意されているセクションです。

comment

ディレクトリに関する説明を指定します。指定した文字列は、Windows クライアントのネットワークコンピュータからブラウズしたときに「コメント」の欄に表示されます。

writeable

書き込みを許可するかどうかを指定します。このパラメータの値は Yes か No のどちらかです。ここでは Yes と指定し、共有ディレクトリへの書き込みを許可しています。

browseable

Windows クライアントのネットワークコンピュータからブラウズした場合、このディレクトリを表示するかどうかを指定します。[homes]セクションの場合は、No を指定します。

17.4.2.3. [share1]セクション - 誰でもアクセス可能な共有ディレクトリ

[share1]セクションは、Linux にアカウントがないユーザーであってもアクセス可能な共有ディレクトリ(/var/samba/share1)の設定例です。

[global]セクションに map to guest = Bad User が指定されていることに注意してください。この場合、不正なパスワードによる Linux ユーザーのログインは拒否しますが、アカウント自体が Linux システムに登録されていない場合は guest account オプションで指定したゲストユーザーとして扱われます。この場合、smbguest ユーザーで Linux システムにログインすることになります。

また、実際に共有ディレクトリへアクセスするには、Linux におけるアクセス権限の影響を受けることに注意してください。つまり、/var/samba/share1 ディレクトリの所有者を smbguest とし、アクセス権限を 755(rwxr-xr-x)などに設定しておく必要があります。

[share1]セクションで定義されている各オプションの意味は以下の通りです。

path

共有するディレクトリをフルパスで指定します。

writeable

すでに説明したように、書き込みを許可するかどうかを指定します。

guest ok

ゲストアカウントからのアクセスを許可するかどうかを指定します。許可する場合は、[global]セクションの guest account パラメータで指定したユーザーアカウントでアクセスすることになります。

guest only

guest ok = Yes の時に、このオプションの値を Yes に指定すると、共有ディレクトリへの接続はゲストユーザーでのみ許可されます。つまり、共有ディレクトリに対する全ての操作はゲストユーザー(ここでは、smbguset)で実行されます。

17.4.2.4. [share2]セクション - Samba ユーザーであればアクセス可能な共有ディレクトリ

[share2]セクションは、Samba に登録されたユーザーであればアクセス可能な共有ディレクトリ(/var/samba/share2)の設定例です。Samba ユーザーの登録は、項17.4.4 を参照してください。

[share2]セクションでは、force user = smbuser が指定されていることに注意してください。force user オプションを利用すると、実際に共有ディレクトリへアクセスするユーザーを指定することができます。ここでは、smbuser を指定していますので、いかなる Samba ユーザーがアクセスしたとしても smbuser として共有ディレクトリへアクセスすることになります。つまり、共有した /var/samba/share2 ディレクトリの所有者を smbuser とし、このユーザーだけが読み書き可能なアクセス権限を設定すれば、Sambaユーザーとして登録されたユーザーのみアクセス可能とすることができます。なお、この例では事前にユーザー smbuser を Linux 上で登録しておいてください。

また、ある特定のユーザーのみにアクセスを許可するには、valid user オプションが利用できます。例えば、[share2]セクションに以下の指定を追加すると、Samba に登録されたユーザーの中から taro と jiro だけに共有ディレクトリへのアクセスが許可されます。アクセスを拒否するユーザーを指定したい場合は、invalid users オプションを利用できます。

valid user = taro, jiro

17.4.2.5. [share3]セクション - 特定のユーザーのみアクセス可能な共有ディレクトリ

[share3]セクションは、Samba に登録された特定のユーザーのみにアクセスを許可する共有ディレクトリ(/var/samba/share3)の設定例です。

すでに述べたように、Samba で共有されたディレクトリへアクセスする場合でも、実際には Linux におけるアクセス権限の影響を受けます。よって、ユーザーをある特定のグループに所属させ、共有ディレクトリに対してそのグループだけが書き込み可能なアクセス権限を設定すれば、そのグループに属する Samba ユーザーのみアクセス可能とすることができます。例えば、project1 というグループが存在し、このグループに taro、jiro というユーザーが属している場合、/var/samba/share3 ディレクトリのグループを project1 とし、アクセス権限を 775(rwxrwxr-x)と設定すれば、この共有ディレクトリは、project1 に属するユーザーにだけ書き込みが許可され、他のユーザーは読み込みのみ許可されることになります。

また、[share3]セクションでは、create mask = 0664 および directory mask = 0775 を指定しています。create mask は、ファイルが作成されるときのモードを 4 桁の 8 進数で指定することができます。Samba の規定値は create mask = 0744 です。この例では、作成されたファイルへの書き込みをグループに属するユーザーへ許可するために、0664(rw-rw-r-x)と指定しています。directory mask は、ディレクトリが作成されるときのモードを 4 桁の 8 進数で指定することができます。Samba の規定値は create mask = 0755 です。この例では、作成されたディレクトリへの書き込みをグループに属するユーザーへ許可するために、0775(rwxrwxr-x)を指定しています。

なお、ここでも valid users や invalid users オプションを指定してグループの特定のユーザーのみアクセスを許可するように制限することも可能です。

17.4.3. /etc/samba/smb.conf のテスト

/etc/samba/smb.conf が正しく編集されているかどうか確認するために testparm コマンドを使用できます。

# testparm -v
Load smb config files from /etc/samba/smb.conf
Processing section "[homes]"
Processing section "[share1]"
Processing section "[share2]"
Processing section "[share3]"
Loaded services file OK.
Server role: ROLE_DOMAIN_PDC
Press enter to see a dump of your service definitions

ここでいったん表示がとまり、もし smb.conf に誤りがあれば、その箇所を示すエラーが表示されます。続けて[Enter]キーを押すと、smb.conf ファイルに指定されているオプションがリスト表示されます。

17.4.4. Samba ユーザーの作成と管理

Samba で共有したディレクトリに Windows からアクセスするには、Linux システム上のユーザーとは別に Samba 用のユーザーを作成する必要があります。Samba 2.2 のときには、Linux 上のユーザーアカウントを useradd コマンドで作成したあとに、smbpasswd コマンドを実行しましたが、Samba 3.0 では、smbpasswd コマンドの代わりに、pdbedit コマンドを使用します。従来の smbpasswd コマンドは、Samba ユーザーのパスワードを変更する際に利用します。

Samba ユーザーを登録するには、はじめに Linux 上のユーザーを作成し、次に pdbedit コマンドに -a -u オプションを指定して以下のように実行します。ここでは、ユーザー taro を追加しています。

# useradd taro
# pdbedit -a -u taro
new password: secret <- パスワードを入力します。
retype new password: <- 再度パスワードを入力します。
Unix username:        taro
NT username:
Account Flags:        [U          ]
User SID:             S-1-5-21-2447034565-313163976-2394279239-2002
Primary Group SID:    S-1-5-21-2447034565-313163976-2394279239-513
Full Name:
Home Directory:       \\server.example.com\jiro
HomeDir Drive:
Logon Script:
Profile Path:         \\server.example.com\jiro\profile
Domain:               server.example.com
Account desc:
Workstations:
Munged dial:
Logon time:           0
Logoff time:          never
Kickoff time:         never
Password last set:    月, 05 11月 2007 10:37:57 JST
Password can change:  月, 05 11月 2007 10:37:57 JST
Password must change: never
Last bad password   : 0
Bad password count  : 0
Logon hours         : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

追加した Samba ユーザーを削除するには -x オプションを指定します。

# pdbedit -x taro

-L オプションを指定すると、登録済みのユーザーをリスト表示することができます。なお、-v オプションを指定すると、より詳細な情報が表示されます。

# pdbedit -L
taro:500:
jiro:501:

17.4.5. Windows クライアントからのアクセス

ユーザーは、Turbolinux 11 Server で設定した Samba 用のユーザー名とパスワードを使用して Windows にログインします。Windows 2000/XP をご使用の場合は、共有ディレクトリにアクセスした際に、ユーザー名とパスワードを入力するダイアログが表示されますので、そのときにユーザー認証を行うこともできます。

Samba で共有ディレクトリの設定を行うと デスクトップにある "マ イネットワーク" あるいは "ネットワークコンピュータ" のアイコンから Turbolinux 11 Server 上のホームディレクトリや共有ディレクトリにアクセスできるようになります。"マイネットワーク" には、Turbolinux 11 Server のホスト名、あるいは netbios name パラメータで指定したコンピュータ名のアイコンが表示されます。

ただし、アイコンが表示されるまでに時間のかかる場合がありますので、表示されない場合はエクスプローラのロケーションバーに \\computer name と指定します。

コンピュータ名のアイコンをクリックすると、Samba で設定した共有ディレクトリにアクセスすることができます。