FreeBSDでsmbfsをマウントする際に利用するmount_smbfsですが、jail内(=prisoner)では、どんなに頑張ってもsmbfsをマウントできません。
mount_smbfsはkernel内にあるiconv機能を利用するのですが、これがkernelの利用を制限するprisonerからの呼び出しで利用できないからです。
例えば、prisoner内で、
$ mount_smbfs -I "nelfis1.local.kishiro.com" -E UTF-8:UTF-8 -N //guest@backup/share "/mnt/nelfis1/"
としてみると、jailホスト(=jailer)側でsmbfs.koがロードされていない旨の以下のエラーが発生します。
mount_smbfs: kldload(smbfs): Operation not permitted
ここで、jailerの「/boot/loader.conf」に以下の記述を追加し、jailer側でsmbfs.koがロードされている状況を作ったとしても、prisoner内では以下のエラーが発生します。
smbfs_load="YES"
$ kldstat Id Refs Address Size Name 1 22 0xffffffff80200000 1f3e2d0 kernel 2 1 0xffffffff8213f000 31030 smbfs.ko 3 3 0xffffffff82171000 44f8 libmchain.ko 4 3 0xffffffff82176000 9148 libiconv.ko 5 1 0xffffffff82520000 4700 nullfs.ko 6 1 0xffffffff82525000 11cd8 fusefs.ko 7 1 0xffffffff82537000 3250 ichsmb.ko 8 1 0xffffffff8253b000 2180 smbus.ko 9 1 0xffffffff8253e000 2a08 mac_ntpd.ko
mount_smbfs: can not setup kernel iconv table (UTF-8:tolower): syserr = Operation not permitted
エラーの通り、mount_smbfsで必要なkernel内のiconvテーブルをprisonerから構成できないため、mount_smbfsが動作しません。
また、「lsvfs」で確認しても、smbfsはjail-friendlyではないとされていて、如何ともし難い状態です。
このページでは、別のアプローチでprisoner内からsmbfsをマウントする方法方法について説明します。
前述の通り、prisonerからはkernel内実装であるmount_smbfsが利用できないため、ユーザースペースで利用可能なFUSEとFUSEモジュールを利用して代替します。
FreeBSDでは6.0からFUSEのサポートが追加されており、適切なFUSEモジュールをpkgで導入することにより、任意のファイルシステムを導入可能です。
まず、jailerの「/etc/rc.conf」に以下の設定を追記し、FUSEのkernelモジュールを有効化します。
kld_list="fusefs"
上記の設定を加えると、次回のシステム起動時に、fusefs.koが自動的にロードされます。
また、「/etc/jail.conf」を編集し、対象のprisoner内でfusefsをマウントできるようにします。
enforce_statfs=1; allow.mount=1; allow.mount.fusefs=1;
smbfsをマウントしたい任意のprisonerの設定に以上の行を追記してください。
続いて、prisoner内にfuse-smbfsのパッケージを導入します。
$ pkg install fusefs-smbnetfs
これで、smbnetfsが導入されます。
smbnetfsですが、mount_smbfsとはだいぶ作法が違い、多くの設定を設定ファイル内に記述し、コマンド自体ではマウントポイントのみを指定するような使い方をします。
設定ファイルがないと動作しませんので、これを準備します。
$ mkdir ~/.smb/ $ cp -p /usr/local/share/doc/smbnetfs-0.6.3/smbnetfs.conf ~/.smb/ $ vi ~/.smb/smbnetfs.conf
設定ファイルのサンプルのパスは、smbnetfsのバージョンによって変更されますので、注意してください。
smbnetfs.confで最低限必要な設定は以下の通りです。
以下の行を追加してください。
auth "guest" "" host nas.local.kishiro.com link share nas.local.kishiro.com/share
1行目はguestアカウントで接続できるようにするための設定、3行目は接続先ホストの設定、4行目はマウントポイント内に作成されるシンボリックリングの設定です。
host及びlinkを複数組設定することにより、1回のsmbnetfsの実行で、複数のsmbfsを一括してマウントします。
ご自身の利用環境に合わせて適宜変更してください。
smbnetfsの利用方法は以下の通りです。
マウントポイントのみ指定すると、設定ファイルに記述されたホストに一括で接続し、マウントポイント内に複数のシンボリックリンクを作成します。
smbnetfsも他のmountツールと同様、マウントポイントは実際のパスとして予め存在している必要があります。
$ smbnetfs /home/helmer1/
一方、マウントを解除する際には、fusermountではなく、umountを利用します。
$ umount /home/helmer1/
mount_smbfsはSMBV1までしか対応していないのに対し、smbnetfsはSMBV2にも対応しています。
SMBV1プロトコルには、様々な脆弱性があるため、mount_smbfsでマウントするために、sambaサーバーのプロトコルバージョンをV1に設定することは望ましくありません。
そういった意味でも、可能な限りfusefs-smbnetfsパッケージを導入し、smbnetfsを利用することが望ましいです。
ただ、fusefs-smbnetfsパッケージを導入すると、samba本体もごっそりインストールされるのが玉にキズだったりします。
・頂いたメッセージは管理者のチェックの後、公開されます。
・メッセージの公開を希望されない場合には、「このメッセージを非公開にする」にチェックを入れてください。
・管理者が不適切と判断したメッセージは公開しませんので、予めご了承ください。
まだ評価がありません |
表示できるメッセージはありません。