![]()
當Claude Code在Linux多用戶環境報EACCES權限錯誤時,chmod 777是下下策。一位工程師花了半天排查,最終用一組精密的權限架構解決了問題——這套方案現在可以直接抄作業。
用戶jeremy啟動Claude Code時遭遇經典報錯:
EACCES: permission denied, open
syscall: "open", errno: -13, code: "EACCES"
表面看是權限不足,實際卻是文件所有權混亂的連鎖反應。jeremy的主目錄下,.claude/debug/目錄的屬主是admincostplus,jeremy自己反而沒有寫入權限。問題的根源在于:之前有人用admincostplus身份運行過Claude Code,在共享位置創建了文件,留下了"權限地雷"。
第一層:用戶組隔離,而非777裸奔
解決方案的核心是創建一個專用用戶組claudeusers,把jeremy和admincostplus都塞進去。這比開放所有權限安全得多——組內成員協作,組外人員隔離。
![]()
腳本自動完成用戶組創建和成員添加:
getent group "$GROUP" >/dev/null || groupadd "$GROUP"
usermod -a -G "$GROUP" "$MASTER_USER"
usermod -a -G "$GROUP" "$ADMIN_USER"
這里的關鍵細節是-a參數,表示追加到附加組而非替換主組。如果漏掉這個字母,可能把用戶踢出原有組,引發更大的權限災難。
第二層:setgid位,讓權限自動遺傳
共享目錄/opt/claude-shared的權限被設為2775,那個開頭的2就是setgid位(設置組ID位)。這個老派但實用的Linux特性,確保目錄下所有新建文件自動繼承父目錄的組所有權,而不是創建者的主組。
chmod 2775 "$SHARED"
![]()
換句話說,無論jeremy還是admincostplus在共享目錄創建文件,文件的屬組都是claudeusers,雙方自然都能讀寫。這比事后手動chown省心,也避免了權限漂移。
第三層:符號鏈接,把分散目錄收攏
Claude Code的配置散落在多個位置:~/.claude、~/.claude-code、~/.config/claude-code、~/.local/share/claude-code。腳本先把master用戶(jeremy)的這些目錄同步到共享位置,再把admin用戶的同名目錄替換為指向共享位置的符號鏈接。
rsync -a --delete "$src"/ "$dst"/
--delete參數確保同步時刪除目標端多余文件,保持兩邊嚴格一致。如果admin用戶之前有自己的配置,腳本會先備份再遷移,避免數據丟失。
最終效果:兩個用戶看到的是同一套配置,寫入的是同一組文件,但各自保持獨立的系統身份。沒有777的裸奔風險,也沒有手動協調的繁瑣。
這套方案最聰明的地方在于利用了Linux已有的權限機制,而非造新輪子。setgid位誕生于Unix早期,符號鏈接更是基礎中的基礎,但組合起來恰好解決現代AI工具的協作痛點。
工程師在文末留下了一個未解的問題:如果未來要加入第三個用戶,這套腳本能否無縫擴展?還是需要重新設計架構?
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.