本文為您介紹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
如果上述命令沒有報錯,則說明問題修復完成。