【问题标题】:Permission denied while reading file as root in Azure AKS container在 Azure AKS 容器中以 root 身份读取文件时权限被拒绝
【发布时间】:2021-05-18 20:20:00
【问题描述】:

我在 Azure 上部署了 AKS 集群(版本 1.19),部分部署在 kube-system 命名空间中有 2 个 azure-cni-networkmonitor pod,当在其中一个 pod 中打开 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 发行版:

通用基础 Linux Delridge

虽然该文件是不可读的,但以 root 身份读取它应该没有问题吧?
知道为什么会发生这种情况吗?我没有看到任何 SELinux 启用。

【问题讨论】:

    标签: kubernetes azure-devops permissions kubectl azure-aks


    【解决方案1】:

    /proc 和 /sys 是由内核创建和维护的特殊文件系统,用于为系统中的设置和事件提供接口。 uevent 文件用于访问有关设备的信息或发送事件。

    如果给定的子系统实现了通过该接口公开信息的功能,您可以对该文件进行分类:

    [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 也无法调用不存在的内核代码。

    【讨论】:

      猜你喜欢
      • 2020-09-10
      • 2015-03-14
      • 1970-01-01
      • 2021-06-11
      • 1970-01-01
      • 1970-01-01
      • 2016-02-09
      相关资源
      最近更新 更多