语境:
- 存储是 Kubernetes 持久卷,由 TrueNAS NAS 提供并通过 NFS 访问(使用 k8s accessMode
ReadWriteMany
) - 我已经检查了 TrueNAS 数据集的权限,并确认已为用户、组和其他设置了 RWX(承认这不是最安全的,但它是家庭网络上的敏感数据 - 我想“做对”,但这不是优先事项)
- 调试 pod(如下所述)正在使用
ubuntu
图像 - 调试 pod 上没有
/var/log/audit/audit.log
文件,因此我认为 SELinux 没有参与(不过,从该声明的措辞来看,您可能可以正确推断出我不是 SELinux 专家)
我在已安装的 NFS 驱动器上发现了一个不必要的文件,应该删除。我启动了一个新的 pod 并将 PVC 挂载到它上面,但是当我尝试访问rm
该文件时 - 即使是我使用时sudo
- 我也被拒绝了权限。我还注意到该文件的所有权不寻常 ( nobody
) 并尝试更改它以防这是原因,这也是被禁止的:
$ ls -al
...
-rwxr-xr-x 1 nobody root 1016756 Nov 26 01:21 DELETEME.txt
$ rm DELETEME.txt
rm: cannot remove 'DELETEME.txt': Permission denied
$ sudo rm DELETEME.txt
rm: cannot remove 'DELETEME.txt': Permission denied
$ sudo chown root:root DELETEME.txt
chown: changing ownership of 'DELETEME.txt': Operation not permitted
如果这是由于 Kubernetes 的某些方面造成的,我还尝试直接将 NFS 共享(使用-o rw
)安装到(非 k8s-pod)机器并执行相同的命令,得到相同的结果。
什么可以阻止root
删除或修改此文件?
编辑 1 - AFAICT,NFS 共享是使用777
TrueNas 的权限导出的:
/etc/exports
TrueNAS 盒子上的内容如下:
# cat /etc/exports
V4: / -sec=sys
/mnt/low-resiliency-with-read-cache/ombi-data -mapall="k8s-user":"k8s-user"
/mnt/high-resiliency/k8s/nfs/vols/pvc-cd6d0f5d-a7d0-47a9-8371-29ab9ca27764 -maproot="root":"wheel"
/mnt/high-resiliency/manual-nfs
/mnt/high-resiliency/k8s/nfs/vols/pvc-a485ee75-9413-4b26-abdd-e5c3c23ef7ba -maproot="root":"wheel"
答案1
不知道 TrueNAS 的网络界面是做什么的,但我可以告诉你你/etc/exports
所说的内容,如果所讨论的导出确实如此/mnt/low-resiliency-with-read-cache/ombi-data
(考虑到其他名称,我有点怀疑):
-mapall="k8s-user":"k8s-user"`
这意味着全部远程用户,根, 不是根无论如何,都映射到k8s-用户。所以你可以忘记它sudo
,它不会做任何事情。
删除文件并不是修改文件,而是修改目录。不幸的是,你的问题没有提供所有信息来给出 100% 的答案。但我敢打赌k8s-用户对包含此文件的目录也没有写权限。
然后还有一种可能性是访问控制列表正在使用。它们的作用超出了传统 Linux/UNIX 文件模式的作用。它们甚至可能影响其他导出,这些导出已经-maproot=root:wheel
……