公開日: 2021年7月4日 / 最終更新日: 2024年9月4日

Samba を使って Windows とファイルを共有する

Samba を使用すると Windows パソコンとの間でディレクトリやファイルを共有することができるようになります。ほかにもプリンタの共有などができますが、この記事ではあまり凝ったことはせず、単純に Windows とのファイル共有に内容を絞ります。VMware Player でホストとゲストの間でファイルをやり取りするのにも使えます。

概要

FreeBSD 側が Samba サーバー、Windows 側が Samba クライアントになります。共有するディレクトリの本体は FreeBSD 側に作成し、所有するユーザーとアクセス権限を決め、Windows 側からアクセスする場合はそのユーザーとしてパスワード認証が必要となるように設定します。以前はゲストユーザーとしてパスワード入力が不要な設定が可能だったのですが、とある時期から Windows 10 での共有フォルダへのアクセスが厳しくなったらしく(?)いろいろ試してもそのような設定ができなかったので、ここは素直に従いたいと思います。

サーバー側 (FreeBSD) の設定

まずは packages を使用して Samba をインストールします。pkg search して Samba4 系の最新版を探してインストールしましょう。
# pkg search samba
...
samba411-4.11.15           Free SMB/CIFS and AD/DC server and client for Unix
samba412-4.12.9_1          Free SMB/CIFS and AD/DC server and client for Unix
samba413-4.13.1_1          Free SMB/CIFS and AD/DC server and client for Unix

# pkg install -y samba413
/etc/rc.conf に次の 1 行を追加して、OS 起動時に Samba サーバーが起動するようにしておきます。
/etc/rc.conf
samba_server_enable="YES"
共有するディレクトリを作成し、所有者とアクセス権限を設定します。下の例では共有ディレクトリを /home/share とし、所有者を mijinco (システムに登録されている一般ユーザー)、アクセス権限は、所有者と wheel グループに読み・書き・実行を許可としてあります。
# mkdir /home/share
# chown mijinco:wheel /home/share
# chmod -R 0770 /home/share
# ls -la /home/ | grep share
drwxrwx---   2 mijinco  wheel  512 Jan 23 17:08 share
下記の内容で /usr/local/etc/smb4.conf を新規作成します。
/usr/local/etc/smb4.conf
[global]
dos charset = CP932
unix charset = UTF-8
workgroup = WORKGROUP
server string = FreeBSD
netbios name = freebsd
security = user

[share]
path = /home/share
create mask = 0770
directory mask = 0770
guest only = No
guest ok = No
browseable = No
read only = No
writable = Yes
2行目:Windows クライアントとの通信に使用する文字コードを指定する。
3行目:Samba サーバー側の FreeBSD マシンで使われる文字コードを指定する。
4行目:Windows 側で設定したワークグループ名に合わせる。
5,6行目:適当に決める。
10行目:共有するディレクトリのパス。
11,12行目:共有ディレクトリに作成されるファイル/ディレクトリのパーミッションに適用されるビットマスク。「0770」にすると、所有者 (上の例では mijinco) とグループに所属するユーザには読み・書き・実行を許可する。
13,14行目:ゲストユーザーは門前払いする。
15行目:何だっけ?
16,17行目:この共有ディレクトリを書き込み可能にする設定。"read only = No" か "writable = Yes" のどちらかだけ書いておけばよかった気がする。
smb.conf の記述を極めたい方は smb.conf(5) のマニュアルを見てください。
さて、mijinco はシステムのユーザーとしては登録されていますが、それだけでは駄目で、Samba ユーザーとして登録しパスワードを設定する必要があります。これには pdbedit コマンドを使用します。
# pdbedit -a -u mijinco
new password: (パスワード入力)
retype new password: (パスワード再入力)
...
# pdbedit -L
mijinco:1002:Mijinco
オプションの意味は、"-a" がユーザー追加、"-u" が追加するユーザーの名前です。また、"-L" で登録されているユーザーの一覧を表示します。登録したユーザーをやっぱり削除したいという場合は "-a" の代わりに "-x" を使用し、"-u" で削除したいユーザーを指定します。
それでは満を持して Samba サーバーを起動します。
# /usr/local/etc/rc.d/samba_server start
コマンドオプションは "start" のほかに、ステータス表示する "status"、サーバーを再起動させる "restart"、停止させる "stop" などがあります。
最後に、ifconfig コマンドでこのマシンの IP アドレスを確認しておきます。あとで Windows からアクセスするのに必要になります。環境によって異なりますが、下の例では 192.168.52.128 とわかります。
% ifconfig -a
em0: ...
inet 192.168.52.128 netmask 0xffffff00 broadcast 192.168.52.255
...

クライアント側 (Windows) の設定

ワークグループ名を smb4.conf に設定したものと同じものにしてください。たいていはデフォルトの "WORKGROUP" になっていると思います。[コントロールパネル] > [システム] から変更することもできます。その他は特に設定することはありません。共有フォルダにアクセスするには、エクスプローラのアドレスバーに、"\\<Samba サーバーの IP アドレス>\<共有ディレクトリ名>" と入力します。前の節で設定した例であれば "\\192.168.52.128\share" です (図 1)。その際、図 2 のようにネットワーク資格情報の入力画面が表示されますので、Samba サーバー側の pdbedit コマンドで登録したユーザー名とパスワードを入力します (初回のみでいいようです)。
図 1
図 1
図 2
図 2

追記: VMware Player を使う場合

ホストオンリー接続を使う

VMware Player のゲスト OS とホスト OS の間だけで通信をしたいときは、既存のネットワークアダプタとは別にもう 1 個ネットワークアダプタを追加して「ホストオンリー」接続を選ぶやり方がよいようです。情報源:

ホストから NAT 設定のVMWARE の仮想マシンのゲスト OS にアクセスする
https://qiita.com/m-tmatma/items/fa91530e3439dbc94445

現状のゲスト OS 側 (FreeBSD) の NIC を確認すると、動作しているのは em0 とループバック・デバイス (lo0) のみです。

% ifconfig -a
em0: ...
    inet 192.168.162.133 netmask 0xffffff00 broadcast 192.168.162.255
    ...
lo0: ...

ゲスト OS 側をシャットダウンして、次の手順でネットワークアダプタを追加します。

  1. VMware Player のメイン画面で仮想マシンを選択し、[仮想マシン設定の編集] をクリックする。
  2. [ハードウェア] タブの下のほうにある [追加] をクリックする (図 3(a))。
  3. ハードウェア追加ウィザードにて [ネットワークアダプタ] を選択し、[完了] をクリックする (図 3(b))。
  4. [ハードウェア] タブに戻ると [ネットワークアダプタ 2] が追加されている。これを選択し、[ホストオンリー] を選択して [詳細] をクリックする (図 3(c))。
  5. [ネットワークアダプタの詳細設定] ダイアログの [MAC アドレス] 欄で [生成] をクリックする (図 3(d))。
  6. 仮想マシン設定画面を閉じる。
図 3
図 3

再度 ゲスト OS を起動して先ほどと同様に確認すると、em1 が追加されていました。

% ifconfig -a
em0: ...
    inet 192.168.162.133 netmask 0xffffff00 broadcast 192.168.162.255
    ...
em1: ...
    inet 192.168.101.128 netmask 0xffffff00 broadcast 192.168.101.255
    ...
lo0: ...

これで新しく追加された em1 の IP アドレスにホスト側から接続することができます。この例の場合は、上のほうで作った /home/share ディレクトリに「\\192.168.101.128\share」でアクセスすることができます。

基本的にはこれでいいんですが、この IP アドレスは VMware の仮想 DHCP が割り当てたものなので、場合によってころころ変わるかもしれず、なにかと不都合です。そこで、次の節では IP アドレスが固定されるように設定してみます。

ゲスト側の IP アドレスを固定する

まず、VMware の仮想 DHCP が割り当てる IP アドレスの範囲を調べます。これはホスト側 (Windows) の C:\ProgramData\VMware\vmnetdhcp.conf を見るとわかります。VMnet1 というのがホストオンリー接続に使用されるネットワークアダプタなので、そのあたりに注目して読むようにします。

C:\ProgramData\VMware\vmnetdhcp.conf
...
# Virtual ethernet segment 1
# Added at 04/25/23 07:46:30
subnet 192.168.101.0 netmask 255.255.255.0 {
range 192.168.101.128 192.168.101.254;            # default allows up to 125 VM's
...
}
...

サブネットは 192.168.101.0、ネットマスクは 255.255.255.0、割り当てられる IP アドレスの範囲は 192.168.101.128 ~ 192.168.101.254 であることがわかります。そこで、ゲスト OS (FreeBSD) 側のアダプタ em1 に 192.168.101.128 を手動で割り当てることにします。

/etc/rc.conf に追加。

/etc/rc.conf
ifconfig_em1="inet 192.168.101.128 netmask 255.255.255.0"

ネットワークを再起動します。

# service netif restart

これで、いつも変わらず「\\192.168.101.128\share」で 共有ディレクトリにアクセスできるようになったはずです。