如何允许特定的 Proxmox LXC 容器在网络上挂载 NFS 共享?

如何允许特定的 Proxmox LXC 容器在网络上挂载 NFS 共享?

这个问题非常类似于尝试挂载 Proxmox 5 机器导出的 NFS 共享时如何修复“mount.nfs:访问被拒绝...”?

在 Proxmox LXC 容器上,我尝试挂载位于网络上不同物理机上的 NFS 共享。在/etc/fstab我有这一行:

192.168.0.4:/mnt/Pool1/homes     /home     nfs     auto,rw,hard     0 0

运行mount /home失败并显示以下输出:

mount.nfs: access denied by server while mounting 192.168.0.4:/mnt/Pool1/homes

输出mount -v /home

mount.nfs: timeout set for Sun Jun 17 15:29:02 2018
mount.nfs: trying text-based options 'hard,vers=4.2,addr=192.168.0.4,clientaddr=192.168.0.166'
mount.nfs: mount(2): Permission denied
mount.nfs: access denied by server while mounting 192.168.0.4:/mnt/Pool1/homes

每次运行该mount命令时,都会向 中添加一行/var/log/messages,如下所示:

Jun 17 15:26:47 userserver-01 kernel: [  256.620770] audit: type=1400 audit(1529249207.168:19): apparmor="DENIED" operation="mount" info="failed type match" error=-13 profile="lxc-container-default-cgns" name="/home/" pid=2938 comm="mount.nfs" fstype="nfs" srcname="192.168.0.4:/mnt/Pool1/homes"

显然Proxmox使用了AppArmor,而AppArmor拒绝NFS挂载操作( apparmor="DENIED")。看起来 AppArmor 正在使用配置文件lxc-container-default-cgns(日志文件显示profile="lxc-container-default-cgns")。我在 中找到了该配置文件/etc/apparmor.d/lxc/lxc-default-cgns

我想我可以编辑/etc/apparmor.d/lxc/lxc-default-cgns并执行允许 NFS 所需的更改。然而,这将允许 NFS全部容器。是否可以允许NFS仅适用于特定容器

答案1

是的,这是可能的。只需创建一个新配置文件(基于lxc-container-default-cgns)并将其用于特定容器。所以首先运行

cp -i /etc/apparmor.d/lxc/lxc-default-cgns /etc/apparmor.d/lxc/lxc-default-with-nfs

然后编辑新文件/etc/apparmor.d/lxc/lxc-default-with-nfs

  • 替换profile lxc-container-default-cgnsprofile lxc-container-default-with-nfs
  • 将 NFS 配置(见下文)放在右括号 ( })之前

NFS配置

要么写

  mount fstype=nfs*,
  mount fstype=rpc_pipefs,

或者(更明确)

  mount fstype=nfs,
  mount fstype=nfs4,
  mount fstype=nfsd,
  mount fstype=rpc_pipefs,

最后运行systemctl reload apparmor

使用新的配置文件

编辑/etc/pve/lxc/${container_id}.conf并附加此行:

lxc.apparmor.profile: lxc-container-default-with-nfs

然后停止容器并再次启动它,例如这样:

pct stop ${container_id} && pct start ${container_id}

现在挂载 NFS 共享应该可以了。

相关内容