Freebsd

權限被拒絕:freebsd (freenas) 監獄中的 fusefs

  • May 19, 2017

主機伺服器: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

我將不勝感激有關如何解決此問題的任何建議。讓我知道是否缺少任何有助於診斷的詳細資訊。謝謝。

簡短的回答是否定的,您不能在監獄中安裝 sshfs。SSHFS 基於 FuseFS,而 FuseFS 不是監獄友好的文件系統。請從 jail 命令的手冊頁閱讀以下內容。

除非文件系統被標記為 jail-friendly,jail 的 allow.mount 參數已設置,並且 jail 的 enforce_statfs 參數低於 2,否則不可能在 jail 中掛載(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 沒有監獄標誌。所以 freebsd 並不認為 fusefs 是一個對監獄友好的文件系統。

在這種情況下,唯一的方法是將 sshfs 端點掛載到主機,而不是監獄。在您的情況下,這不是 FreeNAS 的建議選項。也許您可以考慮 VM 或 Docker 選項。(適用於 FreeNAS Corral 或 FreeNAS 11)。

如果要掛載其他對 jail 友好的文件系統,則必須將以下 sysctls 添加到 jail 選項,並將security.jail.enforce_statfs=1or添加security.jail.enforce_statfs=0到全域 sysctls。

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

引用自:https://serverfault.com/questions/849490