本文为您介绍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需要读权限时报权限不足。
解决方案
远程连接ECS实例。
更多信息,请参见通过密码或密钥认证登录Linux实例。
运行以下命令,确认系统内核版本。
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
运行以下命令,修复问题。
通过安装内核热补丁的方式进行修复。
对于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及以后的版本
运行以下命令,验证问题是否修复。
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
如果上述命令没有报错,则说明问题修复完成。