Windows とファイルやプリンタを共有するためのソフトです。
うちでは今のところ、とても不安定な動作しかしていません。
どうやら、Samba で NFS 越しにファイルを参照しようとするとダメの模様です。
ports で一発です。japanese/samba に行って make install clean しましょう。 最初にオプションを聞いて来ますが、 とりあえず全部チェック入れてみます。 ただし、あとで smbpasswd によるパスワード認証をしたい場合は、 LDAP サポートを除いておいてください。
設定ファイルの名前は、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
上の方法で smb.conf が編集できれば、 この項は必要ありません。GUI を使って設定する場合は、まず SWAT を使えるようにします。
/etc/inetd.conf に swat に関する1行があると思いますので、 先頭のコメントマーク(♯)を外しておきます。
swat stream tcp nowait/400 root /usr/local/sbin/swat swat
つぎに、inetd を起ち上げる、もしくは再起ち上げをします。
まず、ps ax などで inetd が起ち上がっているか確認します。何も反応がなければ、起ち上がっていません。 FreeBSD 5.1-RELEASE ではデフォルトでは起ち上がってないので、
# ps ax | grep ined
とします。すでに 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 というディレクトリの ファイルを共有したいとしましょう。 このときは、次のようにします。グループの準備
- foo というグループがなければ、/stand/sysinstall などで作ります
[User Management] から [Add Group] です。- 適当なエディタ (vi とか ee とか)で、/etc/group をいじります
foo の行の : の後ろに、foo グループに参加させたいユーザ名を、
コンマで区切ってスペースなしで列挙します。1234 は foo を作るときに設定したグループID番号で、 foo1,foo2,foo3 は foo グループに参加するユーザ名です。
foo:*:1234:foo1,foo2,foo3 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 用のパスワードを作っておきます。ただし、ユーザ名とパスワードについては、 つぎの条件をみたさなければならない事に注意してください。
- UNIX におけるユーザ名 = Windows におけるユーザ名
- smbpasswd に登録するパスワード = Windows におけるログインパスワード
まず、root で元になる smbpasswd を作ります。 デフォルトでは、/usr/local/private/smbpasswd.sample ができていますので、 まずこれを /usr/local/private/smbpasswd にコピーします。
# cd /usr/local/private
# cp smbpasswd.sample smbpasswd
次に、各ユーザのパスワードを設定します。
これで、ユーザ USERNAME のパスワードが設定されました。 root ではなくユーザ自身がパスワードを設定するばあいは、 引数なしで smbpasswd を起動します。
# smbpasswd -a USERNAME
% 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
とりあえず、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です(たぶん)。