我在使用基於 Electron 的 AppImage 與其沙箱時遇到問題

基於 Electron 的 AppImage 需要以特定方式設定核心,才能讓沙箱按預期運作(具體而言,核心必須允許提供「非特權命名空間」)。許多散布版預設已完成此設定(例如 Ubuntu24.04 之前),但也有些沒有(例如 Debian)。

警告

請注意,AppImage 團隊不保證啟用此功能一定安全。若有疑慮,請先聯絡您的散布版。如果他們預設以安全方式啟用,所有使用者都能受益於此功能。

檢查核心是否已正確設定

要檢查您的散布版是否啟用了非特權命名空間,請執行:

> sysctl kernel.unprivileged_userns_clone
kernel.unprivileged_userns_clone = 1

1 表示非特權命名空間已啟用,您無需採取任何動作。0 則表示此功能可用,但目前尚未啟用。請參閱下方段落了解如何啟用。

備註

此命令不需要以 root 身分執行。

設定非特權沙箱

要暫時啟用非特權命名空間,您可以執行:

sudo sysctl -w kernel.unprivileged_userns_clone=1

若要再次停用,執行相同命令並把 1 改成 0 即可。

要永久啟用此功能,建議在 /etc/sysctl.d/ 建立新檔案。為了方便您,我們準備了以下命令可即時建立該檔案:

echo kernel.unprivileged_userns_clone = 1 | sudo tee /etc/sysctl.d/00-local-userns.conf

備註

此命令僅會在下次重新開機後生效。若要在目前運作中的系統上變更,請參閱 previous section

允許 Electron AppImage 在沒有非特權命名空間時執行

@gergof 製作了一個工具,當核心功能 unprivileged_userns_clone 未啟用時,會自動套用 --no-sandbox 旗標:https://www.npmjs.com/package/electron-builder-sandbox-fix

更多關於非特權命名空間的資訊

如需更多關於非特權命名空間的資訊,請參閱 https://lwn.net/Articles/673597/