Samba

Windows とファイルやプリンタを共有するためのソフトです。
うちでは今のところ、とても不安定な動作しかしていません。
どうやら、Samba で NFS 越しにファイルを参照しようとするとダメの模様です。


インストール

ports で一発です。japanese/samba に行って make install clean しましょう。 最初にオプションを聞いて来ますが、 とりあえず全部チェック入れてみます。 ただし、あとで smbpasswd によるパスワード認証をしたい場合は、 LDAP サポートを除いておいてください。

設定1(テキストファイルを編集する)

設定ファイルの名前は、smb.conf で、デフォルトでは /usr/local/etc/smb.conf に置くことになっているようです。

設定ファイルのサンプルは、/usr/local/etc/smb.conf.default にあり、 これをコピーして説明を読みながら編集します。
# cd /usr/local/etc
# cp smb.conf.deafult smb.conf
# vi smb.conf

設定2(SWAT を使う)

上の方法で smb.conf が編集できれば、 この項は必要ありません。

GUI を使って設定する場合は、まず SWAT を使えるようにします。

/etc/inetd.conf に swat に関する1行があると思いますので、 先頭のコメントマーク(♯)を外しておきます。
swat stream tcp nowait/400 root /usr/local/sbin/swat swat

つぎに、inetd を起ち上げる、もしくは再起ち上げをします。
まず、ps ax などで inetd が起ち上がっているか確認します。
# ps ax | grep ined
何も反応がなければ、起ち上がっていません。 FreeBSD 5.1-RELEASE ではデフォルトでは起ち上がってないので、
# inetd
とします。すでに inetd が起ち上がっている場合は、再起ち上げです。
# killall -HUP inetd

SWAT が起ち上がるようになったら、samba サーバで root になって ウェブブラウザを起ち上げ、 http://localhost:901/を見に行きます。 すると、GUI な設定画面が見えることでしょう。

設定が終ったら不要な SWAT が起ち上がらないように、 /etc/inetd.conf を元に戻して inetd を kill (もしくは再起ち上げ) しておきましょう。

設定ファイルの例

設定ファイル smb.conf の例です。
[global] # 全体の設定
	coding system = EUC           # UNIX の日本語コーディング
	client code page = 932        # Windows の日本語コーディング
	workgroup = YOUR_WORKGROUP_NAME # Windows 側と同じ名前
	server string = Samba %v      # Windows から見える名前。適当でよい
        security = user               # 他に domain, server, share がある。
                                      # UNIX で認証を行うには通常これ。下の Yes が必須。
        encrypt passwords = Yes       # smbpasswd による暗号化パスワードを使う
	smb passwd file = /usr/local/private/smbpasswd  # smbpasswd の場所
	map to guest = Bad User
	log file = /var/log/log.%m    # ログファイルの場所
	max log size = 50
	socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
	os level = 0
	preferred master = No
	local master = No
	domain master = No
	dns proxy = No
	create mask = 0644
	hosts allow = 10.20.30.40 10.20.30.41 # Samba に参加できるホストの IP アドレス
	map archive = No
	oplocks = No
	follow symlinks = No

[printers] # プリンタ共有の設定
	comment = All Printers in /etc/printcap
	path = /var/spool/samba        # スプールディレクトリ
	printable = Yes
	browseable = No

[homes] # ホームディレクトリ共有の設定
	comment = %U's Home Directories
	path = /home/%u
	valid users = %S
	writeable = Yes
	browseable = No

[public] # 誰でも読み書きできるディレクトリの設定。セキュリティー上は推奨されていない
	comment = Public Space
	path = /home/samba
	writeable = Yes
	guest ok = Yes      # パスワード認証なしでもアクセスを許可する

[cdrom] # CD-ROM ドライブを共有する設定 
	comment = CD-ROM on %h
	path = /cdrom       # /cdrom にマウントしてからでなければ読めない
	guest ok = Yes

赤字で書いたところは、 それぞれの環境に合わせて変更して下さい。 あとはそのままでも大丈夫と思います。

グループによるファイルの共有

UNIX でのグループが同じ人たちだけでファイルを共有することもできます。 例えば、foo というグループの人達だけで /home/foo というディレクトリの ファイルを共有したいとしましょう。 このときは、次のようにします。

グループの準備

  1. foo というグループがなければ、/stand/sysinstall などで作ります
    [User Management] から [Add Group] です。
  2. 適当なエディタ (vi とか ee とか)で、/etc/group をいじります
    foo の行の : の後ろに、foo グループに参加させたいユーザ名を、
    コンマで区切ってスペースなしで列挙します。
    foo:*:1234:foo1,foo2,foo3
    1234 は foo を作るときに設定したグループID番号で、 foo1,foo2,foo3 は foo グループに参加するユーザ名です。

smb.conf の書き方

上で設定した smb.conf にグループ用の設定を書き足します。
[foo]
       comment = Your Comment  # Windows で見えるコメント
       path = /home/foo        # 共有するディレクトリ
       create mask = 0640      # 新たに作られるファイルのパーミッション設定
       directory mask = 0750   # 新たに作られるディレクトリのパーミッション設定
       browseable = Yes
       writable = Yes
       guest ok = No

テスト

設定が終ったら、testparm で設定をテストします。
# testparm

パスワード認証のための準備

Windows からパスワード認証を経て /home 下の自分のディレクトリに アクセスする場合、smbpasswd で samba 用のパスワードを作っておきます。

ただし、ユーザ名とパスワードについては、 つぎの条件をみたさなければならない事に注意してください。

まず、root で元になる smbpasswd を作ります。 デフォルトでは、/usr/local/private/smbpasswd.sample ができていますので、 まずこれを /usr/local/private/smbpasswd にコピーします。
# cd /usr/local/private
# cp smbpasswd.sample smbpasswd

次に、各ユーザのパスワードを設定します。
# smbpasswd -a USERNAME
これで、ユーザ USERNAME のパスワードが設定されました。 root ではなくユーザ自身がパスワードを設定するばあいは、 引数なしで smbpasswd を起動します。
% smbpasswd

最後に、/usr/local/private や smbpasswd が一般ユーザから見えないように、 パーミッションを落としておきます。 デフォルトではすでにこのパーミッションになっているようです。
# chmod 500 /usr/local/private
# chmod 600 /usr/local/private/smbpasswd
# chmod 600 /usr/local/private/secrets.tdb

パスワード認証のしくみ

Windows 側では暗号化したパスワードを UNIX に送ろうとします。
しかし、Windows と UNIX では暗号化の方式が違うために、 このままでは認証できません。
そこで、Windows の暗号化方式に合わせたパスワードファイルを 用意しておくのです。
それが smbpasswd です。

起動

/usr/local/etc/rc.d に samba.sh.sample がありますので、 これを samba.sh という名前に直してから起動します。
# cd /usr/local/etc/rc.d
# mv samba.sh.sample samba.sh
# ./samba.sh start

Windows 側の設定

とりあえず、XP と仮定します。

Workgroup 名の設定

workgroup の名前を決めたときは、Windows 側も同じ workgroup 名に しておくとよいらしい。XP の場合は、 「マイ コンピュータ」 -> 「システム情報を表示する」 -> 「コンピュータ名」 -> 「変更」 でワークグループ名を変更するよろし。

見るべきところ

「マイ ネットワーク」に samba で参照できるファイルシステムがあります。

んで、エクスプローラの「マイ ネットワーク」の文字を削って、 「\\samba サーバのホスト名」を入れると、 samba で共有しているプリンタなどがすべて見えます。

プリンタの設定

上で見えたプリンタのアイコンをカチカチすると、 プリンタ設定のウィザードが立ち上がるので、 Windows でローカルプリンタを設定するように設定します。

要パスワード認証な共有ファイルへのアクセス

Windows にパスワード付きでログインしたことを持って、 Samba のパスワード認証に替えられるようで、 共有ファイルへ問題なくアクセスできます。

トラブルシューティング

プリンタがアクセス拒否される

プリンタを設定したとしても、「プリンタとFAX」を見ると 「アクセス拒否 -接続できません」 と出るかも知れません。 でも気にせずテストプリントをしてみたら、できました。あらあら。

ホームディレクトリがうまく共有できない

NFSを使っている場合、 ホームディレクトリの設定(path)をうまく 書かないと問題が発生するかもしれません。 うちでは、Samba サーバが再起動しまくる、という現象がありました。 例えば NFS で /mnt を「見張りディレクトリ」にした場合、 [homes] の path は
path = /mnt/home/%u
とするとうまく行くかも知れません。が、動作は不安定。。。

ソースからコンパイルするとき、configure に --with-automount という オプションを渡すと automount に対応するそうです。 FreeBSD ではどうするのか、うまくいっているのか、不明です。。。

「マイ ネットワークで表示されるが、不明とでる」

XP の Service Pack 2 を当てるとセキュリティーレベルが上がるとかで、 ファイアウォール機能が付き Samba のプロトコルがカットされます(たぶん)。 Windows 側で、新しく「ブリッジ」というものを通して ネットワークをウィザードで構築しなおせばOKです(たぶん)。

FreeBSD の部屋


Last modified: Wed Apr 20 16:07:19 JST 2011