权限被拒绝:freebsd(freenas)jail 内的 fusefs

权限被拒绝:freebsd(freenas)jail 内的 fusefs

主机服务器:FreeNAS-9.10(FreeBSD 10.3-STABLE)

为了备份目的,我安装了一个监狱,将 FreeNAS 主机需要备份的文件系统安装在监狱里面。

使用 borgbackup 备份到远程服务器正在进行。

作为 root 和非特权用户,在监狱中,我无法:

(1)通过 sshfs 挂载远程文件系统:

$ sshfs remote_user@remote_host:remote_dir /mnt/restore

(2)使用 borg mount 挂载档案:

$ borg mount \
    --show-rc \
    remote_user@remote_host:repo::archive /mnt/restore

(1)和(2)均失败,原因如下:

mount_fusefs: /dev/fuse on /mnt/restore: Operation not permitted
fuse: failed to mount file system: No such file or directory

即使 /mnt/restore 由运行命令的用户拥有

更多信息:

$ ls -la /dev/fuse
crw-rw----  1 root  operator  0xc5 May 11 11:22 /dev/fuse

$ id backup
uid=1001(backup) gid=1001(backup) groups=1001(backup),5(operator)

$ kldstat | grep fuse
32  1 0xffffffff821c9000 de7a  fuse.ko 

$ sysctl -a | grep fuse
vfs.fuse.kernelabi_minor: 8
vfs.fuse.kernelabi_major: 7
vfs.fuse.reclaim_revoked: 0
vfs.fuse.lookup_cache_enable: 1
vfs.fuse.lookup_cache_misses: 0
vfs.fuse.lookup_cache_hits: 0
vfs.fuse.sync_unmount: 1
vfs.fuse.enforce_dev_perms: 0
vfs.fuse.init_backgrounded: 1
vfs.fuse.filehandle_count: 0
vfs.fuse.iov_credit: 16
vfs.fuse.iov_permanent_bufsize: 524288
vfs.fuse.ticket_count: 0
vfs.fuse.version: 0.4.4
vfs.fuse.fix_broken_io: 0
vfs.fuse.sync_resize: 1
vfs.fuse.refresh_size: 0
vfs.fuse.mmap_enable: 1
vfs.fuse.data_cache_invalidate: 0
vfs.fuse.data_cache_enable: 1
vfs.fuse.node_count: 0

$ sysctl vfs.usermount
vfs.usermount: 1

我很感激任何关于如何解决这个问题的建议。如果缺少任何有助于诊断的详细信息,请告诉我。谢谢。

答案1

简短的回答是不行,你不能在监狱中挂载 sshfs。SSHFS 基于 FuseFS,而 FuseFS 不是监狱友好的文件系统。请以下是来自 jail 命令的手册页。

除非文件系统被标记为 jail-friendly、jail 的 allow.mount 参数被设置、并且 jail 的 force_statfs 参数低于 2,否则无法在 jail 内 mount(8) 或 umount(8) 任何文件系统。

您可以使用命令检查文件系统标志lsvfs。该命令在 FreeNAS 上的输出如下。

root@freenas:~ # lsvfs
Filesystem                              Num  Refs  Flags
-------------------------------- ---------- -----  ---------------
nfs                              0x0000003a     0  network
msdosfs                          0x00000032     0  
nullfs                           0x00000029     1  loopback, jail
cd9660                           0x000000bd     0  read-only
procfs                           0x00000002     1  synthetic, jail
unionfs                          0x00000041     0  loopback
ufs                              0x00000035     0  
zfs                              0x000000de    11  jail, delegated-administration
devfs                            0x00000071     3  synthetic, jail
tmpfs                            0x00000087     3  jail
fdescfs                          0x00000059     1  synthetic, jail
fusefs                           0x000000ed     0  synthetic

如您所见,fusefs 没有 jail 标志。因此 freebsd 不认为 fusefs 是 jail 友好的文件系统。

在这种情况下,唯一的方法是将 sshfs 端点挂载到主机,而不是 jail。就您而言,这不是 FreeNAS 的推荐选项。也许您可以考虑 VM 或 Docker 选项。(适用于 FreeNAS Corral 或 FreeNAS 11)。

如果您想要挂载其他 jail 友好型文件系统,您必须将以下 sysctl 添加到 jail 选项中,并将security.jail.enforce_statfs=1或添加security.jail.enforce_statfs=0至全局 sysctl。

allow.mount=true,allow.mount.nullfs=true,allow.mount...

相关内容