気の向くままに辿るIT/ICT/IoT
システム開発

Windows/Debian/Fedora/NetBSDからNetBSD上のSamba共有パスにアクセス

ホーム前へ次へ
ネットワーク越しにファイルを共有

Windows/Debian/Fedora/NetBSDからNetBSD上のSamba共有パスにアクセス

Windows/Debian/Fedora/NetBSDからNetBSD上のSamba共有パスにアクセス

 このページでは、NetBSDでSambaサーバを構成する方法とSambaクライアントとしてWindows、Fedora(Linux)、NetBSD、(2016/08/29追記)Debianからアクセスする方法について記します。

NetBSD上でSambaサーバを設定

 NetBSD上にSambaサーバ(共有フォルダ)を構成する場合、コンパイル済みのバイナリパッケージはないようなので[/usr/pkgsrc/net/samba]で[make install clean]してソースコードからインストールします。(NetBSDについては、パッケージは、これだけでOKです。)

 次にWindowsクライアントが利用する可能性のあるNetBIOS(NetBIOS over TCP)用にファイル共有及びプリンタ共有を提供するデーモン[smbd]、WindowsベースのシステムにおいてSMB/CIFSによって生成されるようなNetBIOSネームサービス要求を解釈し応答するデーモン[nmbd]関連の設定として次の2行を[/etc/inetd.conf]に追記し(コメントアウトされている場合は、コメントを外し)、inetdを再起動します。

$ sudo vi /etc/inetd.conf
...
netbios-ssn stream tcp nowait root /usr/pkg/sbin/smbd
netbios-ns dgram udp wait root /usr/pkg/sbin/nmbd
...
$ /etc/rc.d/inetd restart
...
$
$ sudo cp /usr/pkg/share/examples/rc.d/smbd /etc/rc.d
$ sudo cp /usr/pkg/share/examples/rc.d/nmbd /etc/rc.d
$ sudo cp /usr/pkg/share/examples/rc.d/samba /etc/rc.d
$

 NetBSDにSambaをインストールすると[/usr/pkg/share/examples/rc.d]に[smbd]、[nmbd]、[samba]というデーモンがあるはずなので[/etc/rc.d]にコピーしておきます。

$ sudo /etc/rc.d/smbd onestart
$ sudo /etc/rc.d/nmbd onestart
$ sudo /etc/rc.d/samba onestart
$

 Samba関連のサービスをマシンを再起動させることなく、起動させるためには、[smbd]、[nmbd]、[samba]をonestart(実行)しておきます。

$ sudo vi /etc/rc.conf
...
smbd=yes
nmbd=yes
samba=yes
...
$

 起動時、常にSamba関連のサービスを起動させるようにするためには、[/etc/rc.conf]に[smbd=yes]、[nmbd=yes]、[samba=yes]を追記しておきます。

$ sudo /etc/rc.d/smbd start
$ sudo /etc/rc.d/nmbd start
$ sudo /etc/rc.d/samba start
$

 尚、Sambaをインストールしたばかりで、かつ、マシンを再起動させていない場合には、先のように[onestart]や[onerestart]/[onestop]などとする必要があります(、そうしないと警告とこれらを使用する旨のメッセージが表示され、結果何も起こりません)が、[/etc/rc.conf]にこのように記述した後であれば、マシンを再起動させることなく、[start]/[restart]/[stop]...etc.としてもSamba関連サービスの操作を行なうことができます。

 ちなみに、この時、追記しなくても後の検証には影響ないものの、Windows NT/2000/Windows Server 2003...etc.を実行中のサーバにおいてユーザーとグループを解決するサービスをUNIXライクなプラットフォームでも認識できるようにするデーモン[winbindd=yes]を追記しておいてもよいかもしれません。

 [winbindd]を有効にしていない場合、[samba]を[start]する際や[status]を確認する際にSamba 3.6.23では、「[winbindd]が[/etc/rc.conf]で設定されてないよ」という警告と、とりあえず起動するなら[/etc/rc.d/winbindd onestart]してね」といったメッセージが、Samba 3.6.24では、警告ではなく、eval(評価)扱いで「winbinddもあるよ」といった旨のメッセージが表示されました。

$ sudo vi /usr/pkg/etc/samba/smb.conf
...
[global]
...
workgroup=WINDOWS_WORKGROUP
server string="NetBSD Samba Server"
hosts allow = 192.168.1. 192.168.0.
encrypt passwords = yes
...
# ↓ マウント時、共有フォルダとして指定する任意の名称
[shared]
comment = Shared
path = /home/foo/bar
browseable = yes
writable = no
valid users = samba
$

 次に[/usr/pkg/etc/samba/smb.conf]にSamba自体の設定をします。

 ちなみにNetBSDのデフォルトでは、インストールされたパッケージは、[/usr/pkg]に置かれることもあって、設定ファイルが、その下の[etc]に置かれるケースもあり、通常のケース(ルート直下の[/etc]以下)とはパスが若干異なっています。

 これらの設定項目は、既にあるものとないもの、あってもコメントアウトされているものやされていないものもあるので、なければ追記、コメントアウトされていれば、コメントを外します。

 Windows 95/98などがクライアントにある場合、[dos charset = CP932]を、古いUNIXライクなOS用には[unix charset = EUC-JP]を追加しておくと文字化けを回避することができますが、執筆時点では、セキュリティを考慮すれば、前者のOSが存在することはないでしょうし、後者については、[UTF-8]が主流となった近年、これがデフォルトなのでOSが[UTF-8]なら設定する必要はありません。

 何れにしても前述の通り、設定オプションは多彩であり、ここに定義したものは、極々一例に過ぎない為、必要に応じて適宜設定します。

$ sudo useradd samba
...
$ sudo smbpasswd -a -U samba
...
$

 NetBSDに[usradd]コマンドでSamba用のアカウント(ここではsamba)を作成します。

 この時、[-m]オプションをつけていない為、「ホームディレクトリが作成されてないよ」といった警告が表示される場合がありますが、ここでは、必要ないので無視します(が、ココで作成してそのホームディレクトリを共有するというの1つの手です)。

 [smbpasswd]コマンドを使ってSamba用にNetBSD上で追加したユーザー[samba]のパスワードを設定します。

$ sudo smbclient -U samba -L localhost
...
$

 ここで[smbclient]コマンドを使うとNetBSD側でSambaが起動しているかどうか確認することもできます。

Windowsの共有フォルダにSambaサーバ側からアクセス

$ sudo smbclient //IP_for_Windows/shared_folder
...
$

 また、[smbclient]コマンドは、(当検証では、NetBSDから)Windowsの共有フォルダにアクセスするために使うこともできます。

NetBSD上のSamba共有ディレクトリにWindowsからアクセス

 この時点でWindowsからNetBSD上のSambaサーバにアクセスすることができるようになっているはずです。

 尚、WindowsマシンのIPアドレスが、[smb.conf]の[hosts allow]の右辺に指定した範囲にないと接続を拒否されるので、該当しなければ追加する必要があります。

ipconfig/WindowsでIPアドレスを確認
コマンドプロンプトでipconfigを実行

 WindowsマシンのIPアドレスを調べる方法の1つにコマンドプロンプトで[ipconfig]コマンド(Linux/*BSD/PC-UNIXなどでは[ifconfig])を実行する方法があるので今回は、これで確認してみました。

$ sudo vi /usr/pkg/etc/samba/smb.conf
...
hosts allow = 192.168.1. 192.168.0. 10.0.2.
...
$

 結果、[10.0.2.15]とあり、これをそのまま使って特定してもよいのですが、ここでは、より汎用的に[10.0.2.](そうした場合、最後のドットは重要かつ必須)としてSambaサーバのあるNetBSD上の[smb.conf]の[hosts allow]の右辺に半角スペース区切りで追加することにしました。

NetBSD上のSambaサーバにWindows 7からアクセス1
ネットワークドライブの割り当て
NetBSD上のSambaサーバにWindows 7からアクセス2
参照ボタンをクリックするとポップアップが表示される
そこでドライブ、共有フォルダを指定
NetBSD上のSambaサーバにWindows 7からアクセス3
無事接続できた様子
NetBSD上のSambaサーバにWindows 7からアクセス4
切断する際は、フォルダを選択し、右クリック
[切断(D)]を選ぶ

 Windows 7で共有フォルダをマップする方法の1つとしてエクスプローラーを開いて[コンピュータ]アイコンや[ネットワーク]アイコン上などで右クリック、[ネットワークドライブの割り当て(N)]で表示されるポップアップ上の[ドライブ(D):]で未使用のドライブを選択(既に選択されているはず)、そこにある例を参考に[フォルダー(O):]で直接入力、または、[参照ボタン]をクリックの上、共有フォルダを指定するとエクスプローラー上に共有フォルダが表示され、アクセスできるようになります。

 尚、サーバ指定の書式は、Windowsの場合、円マーク(バックスラッシュ)2つ[\\]に続けてホスト名、もしくは、IPアドレス、円マーク(バックスラッシュ)1つ[\]、共有フォルダのニックネーム([smb.conf]で以下に共有ディレクトリを指定したpath行を含む"[]"内に付けた名称)とします。

 パスワードを求められた場合には、Sambaサーバ側(今回は、NetBSD)において[smbpasswd -a -U samba]で設定したSamba用パスワードを入力します。

 接続を切断する場合には、ネットワーク共有フォルダ上などで右クリックすると[切断]メニューがあるのでそれをクリックします。

 ちなみに当サイト検証としては、以前、SOTEC e-oneに入れたNetBSDとPavilion Slimline上のWindows Vistaでやってみたこともあります。

IPアドレスとホスト名(.ドメイン名)間の名前解決

 Sambaクライアントでマウントする際などにIPアドレスの代わりにホスト名やドメイン名を使う場合には、名前解決されている必要があります。

$ cat /etc/hosts
...
IP Address    HostName
...
$

 *BSD/PC-UNIX/Linux上にSamba共有ディレクトリがある場合、これを行なう最も手軽で確実な方法は、各OS上で[/etc/hosts]を編集し、[IPアドレス]と[ホスト名]及び[ホスト名.ドメイン名]をタブ区切りでマッピングしておくことでしょう。

 ただし、/etc/hostsに書く方法だとIPアドレスをDHCPで自動割り当てしている場合、割り振られるIPアドレスが変わる都度、変更する必要があります。

NetBSD上のSamba共有ディレクトリにNetBSDからアクセス

 更にNetBSD上のSamba共有フォルダに他の物理マシンにインストール済みのNetBSDからアクセスしてみます。

 NetBSD(*BSD)からSamba共有ディレクトリにアクセスする場合、ファイルシステムのタイプをSMBFS/Server Message Block File Systemとしてマウントします。

 [mount_smbfs]、または、[mount -t smbfs]を使うことができます。

 当初、NetBSDクライアントからのアクセス方法がわからず、Fedoraクライアントからアクセス時、パスワードを求められた際の[root@//...]など含め、試行錯誤した結果、ちょっと意外な、というか、レトロな感じの方法でできることがわかりました。

$ sudo mount -t smbfs //samba@netbsdsrv/shared /mnt
または
$ sudo mount -t smbfs //samba@netbsdsrv.netbsdsrv.org/shared /mnt
または
$ sudo mount -t smbfs //samba@192.168.0.3/shared /mnt
または
$ sudo mount_smbfs //samba@netbsdsrv/shared /mnt
または
$ sudo mount_smbfs //samba@netbsdsrv.netbsdsrv.org/shared /mnt
または
$ sudo mount_smbfs //samba@192.168.0.3/shared /mnt

Password:
$

 NetBSDの場合、サーバ指定の書式は、スラッシュ2つ[//]に続けてSambaサーバ上の[Samba用アカウント](ユーザー名)に[@]、[ホスト名]、または、[ホスト名.ドメイン名]、もしくは、[IPアドレス]に続けてスラッシュ1つ[/]、共有ディレクトリのニックネーム([smb.conf]で以下に共有ディレクトリを指定したpath行を含む"[]"内に付けた名称)とします。

 マウントすると[Password:]のようにパスワードを求められる場合、Sambaサーバ側(今回は、サーバ側もNetBSD)において[smbpasswd -a -U samba]で設定したSamba用パスワードを入力します。

 ちなみに[mount_smbfs]には、[-I](あい)オプションにIPアドレスを指定することもできますが、何れにしても[ホスト名]や[ホスト名.ドメイン名]を使う場合には、名前解決できている必要があります。

 尚、ここで指定を間違えると[unable to open connection: syserr = Permission denied]などといったエラーが表示されたりします。

NetBSD上のSamba共有ディレクトリにFedoraからアクセス

 次にFedora(に限らず、Linux)からNetBSD上のSamba共有ディレクトリにアクセスする方法です。

 FedoraからSamba共有にアクセスするには、smbclientパッケージが必要です。([追記:2016/08/29]これをインストールするとmount -t cifsした際に実行される/sbin/mount.cifsスクリプトも生成されるようです。)

fedora:~$ sudo mount -t cifs -o username=samba,password=samba //netbsdsrv/shared /mnt
fedora:~$ ls /mnt
...
または
fedora:~$ sudo mount -t cifs -o username=samba,password=samba //netbsdsrv.netbsdsrv.org/shared /mnt
fedora:~$ ls /mnt
...
または
fedora:~$ sudo mount -t cifs -o username=samba,password=samba //192.168.0.3/shared /mnt
fedora:~ $ ls /mnt
...

...etc.

 LinuxからSamba共有ディレクトリにアクセスする場合、ファイルシステムのタイプをCIFS/Common Internet File Systemとしてマウントします。

 [mount.cifs]も使うことができます。

 Linuxの場合、サーバ指定の書式は、スラッシュ2つ[//]に続けて[ホスト名]、または、[ホスト名.ドメイン名]、もしくは、[IPアドレス]に続けてスラッシュ1つ[/]、共有ディレクトリのニックネーム([smb.conf]で以下に共有ディレクトリを指定したpath行を含む"[]"内に付けた名称)とします。

 -oオプションにusername=xxx,password=yyyを渡しますが、これらの値は、Sambaサーバ側(今回は、NetBSD)において[smbpasswd -a -U samba]で設定したSamba用のユーザー(アカウント)とパスワード(パスフレーズ)です。

 尚、共有ディレクトリのパーミッションは少なくとも755にする必要があったかも?

NetBSD上のSamba共有ディレクトリにDebianからアクセス

[追記:2016/08/29]

 次にDebian(GNU/Linux)からNetBSD上のSamba共有ディレクトリにアクセスする方法です。

debian:~ $ sudo apt-get install smbclient cifs-utils
debian:~ $

 DebianもLinuxなのでFedoraと同様にSamba共有にアクセスできますが、Debian(少なくともJessie)の場合、smbclientとcifs-utilsパッケージがインストールされている必要がありました。

 また、確認時点では、Debian Jessieのman mountには、smbfsの記述はある一方、cifsの記述はありませんでした。

 その一方で、man(の表現は今ひとつわかりづらいですが、そこ)にある通り、mountに-tオプションを指定する場合、存在すればの話ですが、実際に実行されるのは、/sbin/mount.xxxである為、例えば、smbfsを使う場合には、/sbin/mount.smbfsという適切な実行可能なスクリプトが必要となるだろうといった旨の記述があり、確認してみると/sbin/mount.smbfsは存在しない為、smbfsについては該当するパッケージがあるのか?それとも自分で作る必要があるのかはわかりませんが、別途用意する必要があるようです。

 が、見つかるのは、cifs-utils...。

 というわけでDebianにsmbclientとcifs-utilsパッケージがインストールされていれば、/sbin/mount.cifsも作られ、Fedoraと同様の指定でSamba共有にアクセスすることができるようになります。

注意

 改めて書いておきますが、共有ディレクトリ名は、[smb.conf]で[path =]の右辺に設定した実際に共有するパス(前述の例では、/home/foo/bar)ではなく、path行を含む当該ブロックを表わす見出しかのように命名した"[]"内に付けた任意の名称(前述の例では、shared)にしないとアクセスできないので注意が必要です。

 ちなみに正しく指定しないと[mount error(112): Host is down]とか、[Retrying with upper case share name]のような解決の糸口を見出だしにくいエラーに遭遇したりします。

Sambaとファイアウォール

 何らかのエラーで接続できない場合、いくつかの原因が考えられますが、まずは、以下を確認してみましょう。

 遮断されている場合には、ポートを開ける(信頼できるサービスとして)設定をしておきます。

 これらの設定は、一時的(実行時)、もしくは、常時(永続的)有効/無効に設定できるケースもあり、その場合、必要に応じて設定します。

 例えば、ここでは、Fedora 21をSambaクライアントとしていますが、Fedora 21をSambaサーバとする場合には、ファイアウォールの設定上、samba-clientやmountdなど関連するサービスを許可する必要がありました。

SambaとSELinux

 今回の検証では、特に必要ありませんでしたが、場合によっては、SELinux(Linuxカーネルに強制アクセス制御(MAC)機能を付加するモジュール)が有効となっている場合、Samba設定中に一時的に無効にする必要があるケースもあるかもしれません。

ちなみに

 今回の検証においてSambaクライアントとして使ったFedora 21とNetBSD/i386 6.1.5は、それぞれ物理マシン(HP PavilionTOSHIBA dynabook)にインストール後、アップグレードしたもの、Sambaサーバとして使ったNetBSD/i386 6.1.4は、Fedora 21上の仮想化ソフトウェアであるVMware Player 6.0.3を使って起動した仮想マシンにインストール済みで後にアップグレードしたもの、Windowsは、Fedora 21上のVirtualBox 4.3.20を使って起動した仮想マシンにインストール済みだったWindows 7(日本語評価版)を使用しました。

 ちなみに各種仮想マシンに入れたNetBSDとWindows 7はPavilionの内蔵HDD故障によるHDD交換前にWindows Vista上で作成してあったものです。

 このようにホストOSを超えて共用できるのは便利です。

 また、あまり意味ないかとも思いつつもHDD交換に伴い、作業マシンPavilionのRAMを増設しておいたおかげで今回のように仮想マシンを複数同時に起動してもホスト・ゲスト共にスムースに作業することができました。

ホーム前へ次へ