Alibaba Cloud Linux系统的Overlayfs文件系统缺乏读权限导致操作失败,如何处理?

本文为您介绍Alibaba Cloud Linux 2和Alibaba Cloud Linux 3系统的Overlayfs文件系统在某些场景下因文件/目录缺乏读权限导致操作失败的问题原因及解决方案。

问题描述

在Alibaba Cloud Linux系统的Overlayfs文件系统中使用只写方式打开或者在对应目录下touch文件触发copy up时报错。此时建议您继续运行以下命令判断系统存在的问题:

mkdir -p /root/test/lower/dir /root/test/upper /root/test/work /root/test/mount
chmod 0737 /root/test/lower/dir
chown root:bin /root/test/lower/dir
mount -t overlay -o lowerdir=/root/test/lower,upperdir=/root/test/upper,workdir=/root/test/work overlay /root/test/mount
cd /root/test && sudo -u bin -g bin touch mount/dir/RANDOM

如果上述命令报如下错误,则说明Overlayfs文件系统的文件/目录缺乏读权限(-wx)。

touch: 无法创建 'mount/dir/RANDOM': 权限不够

触发以上问题的系统满足以下条件:

  • 内核版本

    操作系统

    镜像

    内核

    Alibaba Cloud Linux 2

    Alibaba Cloud Linux 2.1903 LTS 64位

    4.19.91-27到4.19.91-27.4之间

    包括4.19.91-27.al7、4.19.91-27.1.al7、4.19.91-27.2.al7、4.19.91-27.3.al7、4.19.91-27.4.al7。

    Alibaba Cloud Linux 3

    Alibaba Cloud Linux 3.2104 LTS 64位

    5.10.134-13到5.10.134-14.1之间

    包括5.10.134-13.al8、5.10.134-13.1.al8、5.10.134-14.al8、5.10.134-14.1.al8。

  • Overlayfs的所有upperdir与lowerdir处于同一文件系统。

  • 进程请求写文件的操作触发copy up,且进程没有lowerdir下对应文件或目录的读权限。

问题原因

当所有upperdir与lowerdir处于同一文件系统且访问的文件/目录没有读权限,因此没有正确执行ovl_override_creds(),使得执行copy up操作进程的权限没有提升到Overlayfs文件系统挂载者的权限,最终导致copy up需要读权限时报权限不足。

解决方案

  1. 远程连接ECS实例。

    更多信息,请参见通过密码或密钥认证登录Linux实例

  2. 运行以下命令,确认系统内核版本。

    uname -r

    系统显示类似如下:

    • Alibaba Cloud Linux 2系统

      4.19.91-27.al7.x86_64
    • Alibaba Cloud Linux 3系统

      5.10.134-13.1.al8.x86_64
  3. 运行以下命令,修复问题。

    • 通过安装内核热补丁的方式进行修复。

      • 对于Alibaba Cloud Linux 3系统的5.10.134-13.al8、5.10.134-13.1.al8、5.10.134-14.al8、5.10.134-14.1.al8版本,安装相应内核版本的内核热补丁,例如:

        yum install -y kernel-hotfix-13108708-5.10.134-13.1
      • 对于Alibaba Cloud Linux 2系统的4.19.91-27.al7、4.19.91-27.1.al7、4.19.91-27.2.al7、4.19.91-27.3.al7、4.19.91-27.4.al7版本,安装相应内核版本的内核热补丁,例如:

        yum install -y kernel-hotfix-13110805-4.19.91-27
    • 通过更新内核版本的方式进行修复。

      yum upgrade kernel
      • Alibaba Cloud Linux 3系统:更新到5.10.134-15.al8及以后的版本

      • Alibaba Cloud Linux 2系统:更新到4.19.91-28.al7及以后的版本

  4. 运行以下命令,验证问题是否修复。

    mkdir -p /root/test/lower/dir /root/test/upper /root/test/work /root/test/mount
    chmod 0737 /root/test/lower/dir
    chown root:bin /root/test/lower/dir
    mount -t overlay -o lowerdir=/root/test/lower,upperdir=/root/test/upper,workdir=/root/test/work overlay /root/test/mount
    cd /root/test && sudo -u bin -g bin touch mount/dir/RANDOM

    如果上述命令没有报错,则说明问题修复完成。