特权lxc,你离灾难就不远了

Proxmox里头要是用特权LXC,这里头可是藏着不少坑。哪怕你就刚入门,稍微摸一摸虚拟机管理,后面肯定得碰上LXC。虽说这玩意儿隔离性差点意思,但是它灵活且省资源,尤其是家里设备不给力的时候,或者老司机也愿意用。Proxmox VE Helper-Scripts仓库里给咱们准备了一大堆模板,想把LXC搭建起来特别顺手。不过你得挑个路走:要么特权要么非特权。大多数时候系统默认用非特权的,大家都爱推荐这个,就是因为它们的大哥——特权LXC可能会给咱们带来大麻烦。哪怕你是个刚学会走路的新手,看到它那好用的样子也可能中招。乍一看特权LXC确实很爽,设备往里面传特别简单。要是你在Proxmox主机上想跑几个吃GPU的服务,比如Ollama、Immich(主要是它的机器学习部分)还有Jellyfin,用LXC这条路听着真的不错。毕竟你不用去研究什么SR-IOV来分卡给不同的虚拟机了,也不用处理资源占用大的问题。虽然前两点对无特权的容器也管用,但是想把PCI设备(甚至是USB端口上的设备)传给无特权的LXC简直就是噩梦一场。你得改一大堆配置文件,还要敲一堆命令才能给它授权。要是运气不好出点岔子排查UID/GID映射的时候更是头疼。相比之下特权容器传设备就方便多了。只要你搞清楚主机上外设的设备路径,直接在容器资源选项卡的添加部分填上就行。GPU虽然还得在容器里装驱动,但这比折腾无特权LXC容易多了。 网络共享这块也不一样。非特权容器为了安全直接把网络共享关了,这就很麻烦。像我这种专门在NAS上存电子书、图片还有ROM的人就很纠结,因为媒体服务器LXC没法直接连存储文件了。虽然有时候也能搞点变通办法(比如在主机上先挂载好SMB共享),但这办法顶多就是能用而已。一旦高可用性集群一出问题或者想换成NFS共享,权限这块儿又得重新头疼一遍。 而特权LXC直接支持网络共享,跟媒体管理软件一起用的时候简直太省心了。其实我一开始也是因为想省事儿才把Jellyfin放特权容器里跑的,好在及时发现错误没干蠢事。不过对于特别看重安全的人来说这就挺要命了——毕竟特权容器手里的权限跟Proxmox主机的根用户一模一样。 虚拟化最大的好处就是跟主机隔离开来嘛。但特权容器这特权太大了:能挂载共享还能直通设备。其实这是因为它的根ID直接映射到了PVE主机的根用户身上了。如果容器被黑客盯上或者中了毒,恶意软件分分钟就能顺着这根线窜到主机上感染整个家庭实验室。有人可能觉得虚拟机的隔离性很强不会出事儿?其实不然!LXC和主机共用一套UID/GID映射才是问题所在。相比之下非特权容器就安全多了——它们用的UID/GID都是主机上的随机大数(通常挺大的),权限特别有限。 这就是为什么在这些非特权LXC上搞设备直通这么麻烦的原因——因为权限不够。而像Calibre、Calibre-Web、Jellyfin、Immich这些应用在没有权限的情况下无法直接连接网络存储;NFS的权限问题更是麻烦;想把PCI设备传给它们简直比登天还难;Ollama这种吃GPU的应用也没法在非特权环境下畅快运行;GPU驱动在非特权环境下也很难安装;要让非特权容器访问NAS上的电子书、图片或者ROM更是不可能的任务;想在一个有高可用性需求的集群里让这些容器正常工作几乎是不可能完成的任务;如果你非要这么干(比如在Proxmox中部署Privileged LXC),那你离灾难就不远了。