Singularity 啟用 Fakeroot
此篇介紹 Singularity fakeroot 功能(又稱為 rootless mode)透過利用 namespace UID/GID 映射,允許無特權的使用者以 “fake root “的權限進行操作容器環境。
簡單來說如果當前使用者,要進行容器內環境組件安裝與操作檔案權限,大多數需要 sudo 的操作,這邊可以直接透過 --fakeroot
參數獲得容器內權限以進行操作。
為什麼要用 fakeroot
fakeroot 能讓使用者在容器裡面具有與 root 幾乎相同的管理權限,可以在容器中使用 sudo
特權。但在當前環境中使用者還是被原擁有權限所限制,fakeroot 可以讓沒有權限操作外部環境的使用者能操作 Container 進行開發,並且減少開發者因權限過大而對當前系統進行錯誤的操作。
簡單來說可以想像 fakeroot 是允許當前運行過程獲得權限來進行操作,但是實際上不會授予權限給使用者。看起來就像擁有"fake" "root"
,它不會改變容器環境之外的任何東西。
用戶名稱空間與容器一起使用,可以在沒有特權操作的情況下設置容器,從而普通用戶可以充當容器內部的root用戶來執行管理任務,而無需在外部主機上具有root用戶。
更多情境這邊可以參考網路黑貓分享 - Linux Developer 都應該學習的 Container 工具 - Singularity 可能會更有體悟。
點擊查看参考資料
https://sylabs.io/guides/3.6/user-guide/fakeroot.html?highlight=fakeroot
如何在環境啟用 fakeroot
本次實驗環境為:
- CoreOS 7
- Singularity: 3.6.4
事前準備:
開始前需先確保以下條件已達成:
- 環境需求要允許fakeroot創建使用者namespace,需要kernel >= 3.8 參考官方說明
- 確認當前Linux環境
啟用非特權使用者名稱空間
已開啟。如CentOS:
1 | sudo sh -c 'echo user.max_user_namespaces=15000 \ |
查看目前使用者的id資訊
透過創建一個新使用者 yylin 為例1
2yylin$ id
uid=1001(yylin) gid=1001(yylin) groups=1001(yylin)
fakeroot 主要依賴 /etc/subuid
和 /etc/subgid
文件,在該文件中查找當前環境系統實際 UID/GID 到每個使用者帳號中,並可以在namespace 中重新映射 UID/GID 範圍。
當系統管理員將使用者相關配在這兩個文件中就能使用fakeroot功能
請系统管理員配置 namespace UID/GID 映射
singularity 提供 config fakeroot 指令来统一管理這些文件,這邊要透過 sudo
帳號新增 yylin 使用者於config。
1 | $ sudo singularity config fakeroot --add yylin |
官網補充詳細說明:User Namespaces & Fakeroot
透過 Fakeroot 建立 SIF Container
1 | cat Singularity |
1 | 當前使用者無法直接build container |
Reference
- Fakeroot feature
- Linux Developer 都應該學習的 Container 工具 - Singularity
- Singularity:配置 fakeroot
- https://scits.math.unibe.ch/singularity.html#1