PVE文件管理新手指南 篇五:在特权/无特权LXC容器中挂载SMB/NFS/WebDAV等NAS服务

2024-03-14 11:47:08 14点赞 86收藏 5评论

大家好,我是爱学习爱折腾的vicai,应值友需求,这篇来讲讲PVE LXC容器下如何挂载和访问常见的NAS服务,也作为我学习使用Linux系统的个人记录。篇幅较长,知识点较多,我尽量把逻辑思路讲清楚,如果没耐心看完可以先关注收藏,谢谢在特权/无特权LXC容器中挂载SMB/NFS/WebDAV等NAS服务

一般家庭NAS用户用的最多的就是SMB、NFS和Webdav这三种文件服务协议。前两者适合内网传输场景,后者适合外网使用。在PVE系统中,NAS服务不仅可以来自内外网络上的物理机(如群晖威联通、极空间等NAS),也可以来自pve内创建的虚拟机(如Windows、Unraid、OVM、Openwrt、iStore、CasaOS)和LXC容器(如TurnkeyFS、Alist等)。

一、准备工作

以最常见的群晖为例,先在控制面板>文件服务中开启相关的NAS服务:

开启NFS服务开启NFS服务开启WebDAV服务,需先安装WebDAV Server套件开启WebDAV服务,需先安装WebDAV Server套件

然后在共享文件夹中新建共享,设定用户权限:

在特权/无特权LXC容器中挂载SMB/NFS/WebDAV等NAS服务

如果是NFS服务,需要再设定NFS客户端IP及权限:

群晖NFS权限设置群晖NFS权限设置

PVE及其它Linux系统也可以手动部署NAS服务,例如搭建一个简单的Samba服务器

此外,PVE上需先创建好LXC容器,作为访问NAS服务的客户端,具体步骤参考:

总而言之,无论你的NAS服务是部署在物理机还是PVE虚拟机甚至LXC容器下,对于客户端最重要的事情是检查NAS服务器设置,并记录:

- 服务器IP:端口/域名

- 共享目录路径

- 用于访问服务器的用户名和密码

二、挂载流程

2.1 特权LXC容器内挂载NAS服务(推荐)

PVE容器想要挂载NAS服务,官方优先推荐特权LXC容器,以基于Debian/Ubuntu系统的LXC容器为例:

基础流程概览

  1. 容器开启NAS相关功能

  2. 容器内安装NAS客户端

    2.1.测试与服务器的连接

  3. 容器内创建挂载点(目录)

  4. 将NAS服务器共享目录挂载到容器目录下

  5. 设置容器开机自动挂载

挂载SMB:

1. 在PVE的web界面,选择容器,在选项-功能中勾选SMB/CIFS:

在特权/无特权LXC容器中挂载SMB/NFS/WebDAV等NAS服务

以下操作在LXC容器控制台内执行:

2 安装smb/cifs客户端:

apt-get install cifs-utils -y

2.1 测试与smb服务器的连接:

#安装samba-client

apt install samba-client

#使用samba-client登录SMB服务器

smbclient -L //SMB服务器IP/共享目录名 -U samba用户名

输出目录表示连接成功输出目录表示连接成功

3. 创建挂载点:

mkdir /mnt/smb

4. 将SMB服务器上的共享目录挂载到lxc容器内:

mount.cifs //SMB服务器ip地址/共享目录名 /mnt/smb -o user=smb用户名,pass=密码,vers=2.0

5. 设置开机自动挂载

# 编辑/etc/fstab

nano /etc/fstab

# 添加挂载内容,重启后用df -h或ls查看自动挂载是否生效

//SMB服务器ip地址/共享目录名 /mnt/smb cifs defaults,username=账号,password=密码

挂载NFS:

1. 在容器选项-功能中勾选NFS:

在特权/无特权LXC容器中挂载SMB/NFS/WebDAV等NAS服务

2. 安装nfs客户端:

apt-get install nfs-common -y

2.1 列出nfs服务器上可用的共享目录和允许访问的IP地址范围(可选):

# showmount -e NFS服务器ip地址

showmount 列出可用的挂载showmount 列出可用的挂载

3.创建挂载点:

mkdir /mnt/nfs

4.将nfs服务器上的共享目录挂载到lxc容器内:

mount NFS服务器ip地址:/共享目录名 /mnt/nfs

# 服务端nfs协议默认为v3版本:

mount 192.168.2.163:/volume1/NFShare /mnt/nfs

# 服务端nfs协议为v4版本:

mount -t nfs4 192.168.2.163:/volume1/NFShare /mnt/nfs

5. 设置开机自动挂载

# 编辑/etc/fstab:

nano /etc/fstab

# 添加挂载内容,重启后用df -h或ls查看自动挂载是否生效:

//NFS服务器ip地址:/共享目录名 /mnt/smb nfs auto,nolock 0 0

挂载WebDAV:

PVE可以通过davfs、rclone、部署Nginx/Apache等方式挂载WebDAV,这里以davfs为例:

1. 在容器选项-功能中勾选FUSE:

在特权/无特权LXC容器中挂载SMB/NFS/WebDAV等NAS服务

2. 安装WebDAV客户端协议:

apt-get install davfs2 -y

apt-get install neon -y

#davfs2编译时依赖于neon,neon是一个WebDAV client library. 如果要编译安装davfs2,需要安装neon

#dsvfs2在mount时会使用fuse或是coda这两个文件系统,前者一般linux系统都会自带,davfs2在mount时会首先尝试使用fuse。

2.创建挂载点:

mkdir /mnt/webdav

3.将WebDAV服务器上的共享目录挂载到lxc容器内:

mount -t davfs http://服务器ip或者域名:端口号/dav /mnt/webdav

根据提示输入用户名和密码即可。

4. 设置开机自动挂载

# 编辑/etc/fstab:

nano /etc/fstab

# 添加配置:

https://服务器ip或域名:端口号/dav /mnt/webdav davfs user,noauto,uid=用户名,file_mode=600,dir_mode=700 0 1

2.2 无特权LXC容器内挂载NAS服务(不推荐)

无特权的容器不支持NFS和SMB/CIFS:

非特权LXC容器无法勾选NFS和SMB功能非特权LXC容器无法勾选NFS和SMB功能

如果强行用mount命令挂载大部分会报错:

mount: permission denied(are you root?)

mount.nfs: Operation not permitted

mount.nfs: not installed setuid - "user" NFS mounts not supported.

....

在特权/无特权LXC容器中挂载SMB/NFS/WebDAV等NAS服务

这意味着想要挂载NAS得另辟蹊径。

最简单粗暴的方案:将无特权容器改为特权容器

如果没啥重要数据,那就删除当前容器重建为特权容器就完事。但就是不想删除呢?可以尝试更改该容器的配置文件(可能会有安全问题)。

LXC容器的配置文件通常在/etc/pve/lxc下,然后在pve shell输入

nano /etc/pve/lxc/<LXC容器ID>.conf

修改unprivileged修改unprivileged

将unprivileged: 1改成unprivileged: 0,然后保存重启LXC容器,即可在图形界面开启NFS和SMB功能。

lxc容器对SMB/NFS等文件服务的访问限制主要来源是Apparmor安全模块,也可以在这个配置文件中追加一行:

lxc.apparmor.profile: unconfined

直接取消lxc.apparmor的限制,之后的操作参考上面的2.1特权容器挂载流程即可。

安全通用方案:将宿主机共享目录映射到容器内目录(推荐)

虽然无特权LXC容器不支持挂载SMB或NFS共享目录,但是PVE系统本身肯定是支持的,因此可以先将远程NAS服务器挂载到PVE宿主机的目录下,再将此目录映射到无特权LXC容器,这个过程称为bind mount point(绑定挂载点)。如果你像我一样之前已经使用无特权容器部署了一些服务,想临时挂载NAS不想删除重建容器,或者某些服务必须要在无特权容器下运行(如TurnkeyFS),可以考虑这个方案。相对于命令行,这个方案可以在WEB图形界面下直接操作,更为方便。步骤如下:

1. 数据中心-存储-添加:选择要挂载的NAS服务(仅限NFS/SMB

PVE添加SMB/CIFS存储PVE添加SMB/CIFS存储

在弹出的界面中填写以下内容:

ID:自定义PVE宿主机下的目录名称,会自动创建路径 /mnt/pve/<目录名>作为挂载点

服务器:NAS服务器的IP地址

用户名、密码:访问SMB服务器的用户名和密码

Export:选择NFS服务器上的共享目录

Share:选择SMB服务器上的共享目录

内容:存储的数据类型,默认为磁盘映像,会在挂载点下自动生成/images文件夹

添加SMB/CIFS添加SMB/CIFS添加NFS添加NFS

添加完成后可以看到共享目录的路径(后面会用到):

在特权/无特权LXC容器中挂载SMB/NFS/WebDAV等NAS服务
  1. 在PVE shell中执行命令:

pct set -mpX /宿主机共享目录的路径,mp=/挂载到LXC容器中的路径

将pve宿主机的路径/目标映射到LXC容器中:

在特权/无特权LXC容器中挂载SMB/NFS/WebDAV等NAS服务

执行成功会在LXC容器的资源页中看到挂载点:

在特权/无特权LXC容器中挂载SMB/NFS/WebDAV等NAS服务

同时也会出现在该容器的conf配置文件中:

在特权/无特权LXC容器中挂载SMB/NFS/WebDAV等NAS服务

也就是说:

pct set 103 -mp0 /mnt/pve/nfs,mp=/mnt/nfs

这条命令等同于在 /etc/pve/lxc/103.conf 中添加一行:

mp0: /mnt/pve/nfs,mp=/mnt/nfs

3. 在lxc容器内执行chmod给mp挂载点赋予读写权限

chmod 777 /mnt/nfs

需要注意的是,如果你服务器上硬盘的文件系统是ext4之类,极有可能会遭遇权限问题导致LXC容器无法对绑定挂载的宿主机目录进行读/写访问。这是因为PVE默认将LXC容器ID映射为宿主机容器ID+100000 ,例如LXC容器中id=0的root用户在宿主机上实际上是id=100000的普通用户,并不具备id=0的root用户的访问权限,这种情况下,还需要在宿主机上对id=100000的普通用户给宿主机共享目录赋权,并将其id映射到LXC容器中。

chmod -R 100000:100000 /mnt/pve/nfs

ls命令查看是否挂载成功:

验证挂载验证挂载

折腾方案:创建适用于特定LXC容器的Apparmor Profile

LXC容器会在运行时加载Apparmor安全模块,Apparmor的配置文件存放在 /etc/apparmor.d/lxc 目录下,但除非LXC指定这些配置文件否则默认不会被加载。可以通过ls命令查看该目录下的配置文件:

ls -l /etc/apparmor.d/lxc total 18 -rw-r--r-- 1 root root 558 Apr 16 2016 lxc-default -rw-r--r-- 1 root root 528 Dec 2 08:39 lxc-default-cgns -rw-r--r-- 1 root root 544 Dec 2 2015 lxc-default-with-mounting -rw-r--r-- 1 root root 527 Dec 2 08:39 lxc-default-with-nesting

可以看到一共有四个基本配置文件,分别是:

  • lxc-default: lxc默认Apparmor配置文件

  • lxc-default-cgns:lxc cgroup相关配置文件

  • lxc-default-with-mounting:lxc挂载功能相关配置文件

  • lxc-default-with-nesting:lxc嵌套功能相关配置文件

以挂载NFS为例,可以通过创建专门的Apparmor配置文件来让某个无特权LXC容器挂载NFS(注:PVE7.4版本这个方案似乎失效了,我测试还是报错Operation not permitted,不知道是不是出于安全官方删除了对NFS的支持,还请站内PVE大佬指教),以下是具体流程:

首先停止容器,pve宿主机拷贝lxc-default-cgns配置文件并命名为lxc-default-with-nfs,然后编辑这个文件:

nano /etc/apparmor.d/lxc/lxc-default-with-nfs

修改为:

profile lxc-container-default-with-nfs flags=(attach_disconnected,mediate_deleted) {
#include
deny mount fstype=devpts,
mount fstype=cgroup -> /sys/fs/cgroup/**,
mount fstype=cgroup2 -> /sys/fs/cgroup/**,
mount fstype=overlay,

mount fstype=nfs*, mount fstype=rpc_pipefs,

}

然后在你的无特权LXC容器的配置文件中加载这个profile:

echo "lxc.apparmor.profile : lxc-default-with-nfs" >> /etc/pve/lxc/你的LXC ID.conf

之后重启apparmor和容器:

systemctl reload apparmor

pct restart

后续按2.1挂载NFS的流程使用mount命令挂载即可。

三、参考资料

https://pve.proxmox.com/wiki/Unprivileged_LXC_containers

https://unix.stackexchange.com/questions/450308/how-to-allow-specific-proxmox-lxc-containers-to-mount-nfs-shares-on-the-network

https://forum.proxmox.com/threads/nfs-file-system-mount-problem-apparmor.31706/

https://forum.proxmox.com/threads/tutorial-unprivileged-lxcs-mount-cifs-shares.101795/

展开 收起

Synology 群晖 DS224+ 双盘位NAS(赛扬J4125、2GB)

Synology 群晖 DS224+ 双盘位NAS(赛扬J4125、2GB)

2849元起

Synology 群晖 DS220+ 2盘位NAS (赛扬J4025、2GB)

Synology 群晖 DS220+ 2盘位NAS (赛扬J4025、2GB)

2179元起

Synology 群晖 DS920+ 4盘位 NAS存储(J4125、4GB)

Synology 群晖 DS920+ 4盘位 NAS存储(J4125、4GB)

2190.84元起

Synology 群晖 DS423+ 4盘位 NAS网络存储 (Intel四核 、无内置硬盘)

Synology 群晖 DS423+ 4盘位 NAS网络存储 (Intel四核 、无内置硬盘)

4099元起

Synology 群晖 DS1821+ 8盘位NAS (V1500B、4GB)

Synology 群晖 DS1821+ 8盘位NAS (V1500B、4GB)

8899元起

Synology 群晖 DS223j 双盘位 NAS网络存储服务器 私有云 智能相册 文件自动同步

Synology 群晖 DS223j 双盘位 NAS网络存储服务器 私有云 智能相册 文件自动同步

1549元起

Synology 群晖 DS923+ NAS网络存储服务器 标准无硬盘

Synology 群晖 DS923+ NAS网络存储服务器 标准无硬盘

4899元起

Synology 群晖 DS1821+ 8盘位 NAS(V1500B、4GB)

Synology 群晖 DS1821+ 8盘位 NAS(V1500B、4GB)

7196元起

Synology 群晖 DS223J家用网络存储服务器nas私有云

Synology 群晖 DS223J家用网络存储服务器nas私有云

1549元起

Synology 群晖 DS124 四核心 单盘位 NAS网络存储 私有云 智能相册 文件自动存储

Synology 群晖 DS124 四核心 单盘位 NAS网络存储 私有云 智能相册 文件自动存储

1399元起

Synology 群晖 DS720+ 双盘位NAS(J4125、2GB)

Synology 群晖 DS720+ 双盘位NAS(J4125、2GB)

4099元起

群晖(Synology)DS124单盘位NAS网络存储服务器私有云智能相册文件自动同步

群晖(Synology)DS124单盘位NAS网络存储服务器私有云智能相册文件自动同步

1399元起

synology群晖nas云存储ds920+中小型企业办公网络存储群辉家庭个人私有云盘四盘位NAS备份硬盘服务器ds918+(DS920+希捷企业级16T*4)

synology群晖nas云存储ds920+中小型企业办公网络存储群辉家庭个人私有云盘四盘位NAS备份硬盘服务器ds918+(DS920+希捷企业级16T*4)

13746元起

Synology 群晖 DS218+ 2盘位 NAS网络存储服务器 京东云定制版(J3355、2GB)

Synology 群晖 DS218+ 2盘位 NAS网络存储服务器 京东云定制版(J3355、2GB)

暂无报价

群晖(Synology)群晖(Synology)DS224+搭配2块希捷(Seagate) 4TB酷狼IronWolf ST4000VN006硬盘套装

群晖(Synology)群晖(Synology)DS224+搭配2块希捷(Seagate) 4TB酷狼IronWolf ST4000VN006硬盘套装

暂无报价

Synology 群晖 DS416 企业级 NAS网络存储

Synology 群晖 DS416 企业级 NAS网络存储

暂无报价
5评论

  • 精彩
  • 最新
提示信息

取消
确认
评论举报

相关好价推荐
查看更多好价

相关文章推荐

更多精彩文章
更多精彩文章
最新文章 热门文章
86
扫一下,分享更方便,购买更轻松