在 Azure AKS 容器中以 root 身份读取文件时权限被拒绝
Permission denied while reading file as root in Azure AKS container
我在 Azure 上部署了 AKS 集群(版本 1.19),部分部署在 kube-system 命名空间有 2 个 azure-cni-networkmonitor pods,在 pods 之一中打开 bash 使用:
kubectl exec -t -i -n kube-system azure-cni-networkmonitor-th6pv -- bash
我注意到虽然我在容器中 运行 作为 root:
uid=0(root) gid=0(root) groups=0(root)
有些文件我无法打开读取,读取命令导致权限被拒绝错误,例如:
cat: /run/containerd/io.containerd.runtime.v1.linux/k8s.io/c3bd2dfc2ad242e1a706eb3f42be67710630d314cfeb4b96ec35f35869264830/rootfs/sys/module/zswap/uevent: Permission denied
文件统计:
Access: (0200/--w-------) Uid: ( 0/ root) Gid: ( 0/ root)
Linux 分布 运行 在容器上:
Common Base Linux Delridge
尽管该文件不可读,但我以 root 身份读取它应该没有问题吧?
知道为什么会这样吗?我没有看到任何 SELinux 启用。
/proc 和 /sys 是由内核创建和维护的特殊文件系统,用于为系统中的设置和事件提供接口。 uevent 文件用于访问有关设备的信息或发送事件。
如果给定的子系统实现了通过该接口公开信息的功能,您可以 cat 文件:
[root@home sys]# cat /sys/devices/system/cpu/cpu0/uevent
DRIVER=processor
MODALIAS=cpu:type:x86,ven0000fam0006mod003F:feature:,0000,0001,0002,0003,0004,0005,0006,0007,0008,0009,000B,000C,000D,000E,000F,0010,0011,0013,0017,0018,0019,001A,001B,001C,002B,0034,003A,003B,003D,0068,006F,0070,0072,0074,0075,0076,0079,0080,0081,0089,008C,008D,0091,0093,0094,0096,0097,0099,009A,009B,009C,009D,009E,009F,00C0,00C5,00E7,00EB,00EC,00F0,00F1,00F3,00F5,00F6,00F9,00FA,00FB,00FD,00FF,0120,0123,0125,0127,0128,0129,012A,012D,0140,0165,024A,025A,025B,025C,025D,025F
但是,如果该子系统不公开该接口,您的权限就会被拒绝 - 即使 root 也无法调用不存在的内核代码。
我在 Azure 上部署了 AKS 集群(版本 1.19),部分部署在 kube-system 命名空间有 2 个 azure-cni-networkmonitor pods,在 pods 之一中打开 bash 使用:
kubectl exec -t -i -n kube-system azure-cni-networkmonitor-th6pv -- bash
我注意到虽然我在容器中 运行 作为 root:
uid=0(root) gid=0(root) groups=0(root)
有些文件我无法打开读取,读取命令导致权限被拒绝错误,例如:
cat: /run/containerd/io.containerd.runtime.v1.linux/k8s.io/c3bd2dfc2ad242e1a706eb3f42be67710630d314cfeb4b96ec35f35869264830/rootfs/sys/module/zswap/uevent: Permission denied
文件统计:
Access: (0200/--w-------) Uid: ( 0/ root) Gid: ( 0/ root)
Linux 分布 运行 在容器上:
Common Base Linux Delridge
尽管该文件不可读,但我以 root 身份读取它应该没有问题吧?
知道为什么会这样吗?我没有看到任何 SELinux 启用。
/proc 和 /sys 是由内核创建和维护的特殊文件系统,用于为系统中的设置和事件提供接口。 uevent 文件用于访问有关设备的信息或发送事件。
如果给定的子系统实现了通过该接口公开信息的功能,您可以 cat 文件:
[root@home sys]# cat /sys/devices/system/cpu/cpu0/uevent
DRIVER=processor
MODALIAS=cpu:type:x86,ven0000fam0006mod003F:feature:,0000,0001,0002,0003,0004,0005,0006,0007,0008,0009,000B,000C,000D,000E,000F,0010,0011,0013,0017,0018,0019,001A,001B,001C,002B,0034,003A,003B,003D,0068,006F,0070,0072,0074,0075,0076,0079,0080,0081,0089,008C,008D,0091,0093,0094,0096,0097,0099,009A,009B,009C,009D,009E,009F,00C0,00C5,00E7,00EB,00EC,00F0,00F1,00F3,00F5,00F6,00F9,00FA,00FB,00FD,00FF,0120,0123,0125,0127,0128,0129,012A,012D,0140,0165,024A,025A,025B,025C,025D,025F
但是,如果该子系统不公开该接口,您的权限就会被拒绝 - 即使 root 也无法调用不存在的内核代码。