Linux打包签名
概述
常见的Linux桌面系统有Fedora、Ubuntu,还有近些年新起的国产系统,如:统信USO、Deepin等。Linux中主流的软件包有deb
和rpm
两种格式;其中deb适用于Debian、Ubuntu等,rpm适用于CentOS、Fedora、OpenSUSE等;但对于桌面级Linux系统,可能更适合使用AppImage格式包。
AppImage包和rpm包都无法直接双击安装,安装必须先赋予执行权限;尤其是AppImage包,其能否安装成功完全依赖于当前系统是否有相关的依赖软件;.deb可直接双击安装;
在linux中,.deb 包是为系统安装而设计的,.deb 包软件默认都会安装到 /opt目录下 。/opt 是一个系统目录,默认只有 root 用户有写权限;因此,以.deb包安装的electron应用在运行时是无法对文件进行写或赋予执行权限的。AppImage包默认可以普通权限运行,但AppImage下载后需要授权才能安装,因此也不推荐。
综上,在Linux中没有完美的打包方式,最终借鉴vs code打包成.deb
和.rpm
;并在软件首次启动时,将需要执行或写入的文件复制到用户目录下;复制到用户目录下以后,就可以进行任意操作。electronl应用默认安装在/opt等系统目录下,该目录是普通用户无法写入和执行的;如果强制通过chmod
命令修改/opt
系统目录下的文件权限,会破坏系统安全规范,可能被系统安全策略阻止,会造成很多不稳定因素。借鉴vscode,将electron应用中需要写入和执行的文件复制到用户目录下,再进行任意操作。例如在用户目录创建文件夹 ~/.sidoc-desktop-frp/
,并在该文件夹中放置所有需要写入和执行的文件;.sidoc-desktop-frp是一个隐藏目录,此举借鉴自vscode和其它应用,例如:~/.vscode/ 。
Linux系统的软件签名
Linux系统的软件包签名是免费的;AppImage包签名后可发布到AppImageHub或Linux应用商店,以提高应用的曝光率、增强可信度。GPG 是 Linux 生态的标准签名工具,可在 electron-builder 项目中进行配置,以便打包时直接进行签名。
关于沙箱机制
Electron 默认启用了 Chromium
的沙箱机制,用于隔离进程以提升electron应用的安全性;以避免渲染进程直接调用 Node.js 的底层 API(如:fs
、child_process
),导致恶意代码执行系统命令、读写文件等危险操作;如:require('child_process').exec('rm -rf /');
多数Linux不允许软件在root下以沙箱模式启动,因此对于Electron应用,任何情况下都不应该在root用户下启动;当然,在Linux系统中,所有日常应用本就应该在非root用户下运行,root仅用于执行某些高级操作。
最佳实践是在打包时对eletron应用进行配置,以便用户在安装electron应用后自动执行如下命令,以启用沙盒:
sudo chown root:root chrome-sandbox
sudo chmod 4755 chrome-sandbox ## 设置 setuid 位
但electron应用的沙盒依赖于 setuid
机制来实现,如果linux系统环境本身禁用了 setuid
或没有安装chromium-sandbox,则无论执行什么命令都无法启用沙盒。
如下图所示,大厂开发的Electron应用基本都禁用沙盒,以提升兼容性:
综上,为了提升应用的兼容性,推荐在Eletron应用中关闭沙盒。
安装deb和rpm包
如果打包为deb和rpm格式,则可按如下方式安装,不同Linux的安装方式可能略有差异;
0.1> 在Fedora桌面系统中安装rpm包 -----------------------------------------------------------------------
## 切到root用户
sudo -i
## 增加执行权限
sudo chmod +x package.rpm
## 安装软件
sudo dnf install package.rpm
## 卸载软件
sudo rpm -e package
0.2> 在Ubuntu桌面系统中安装deb包 -----------------------------------------------------------------------
## 直接双击安装即可,但可能因为沙盒权限问题而无法启动,因此要用如下命令以临时关闭沙盒的方式启动
sidoc-frp-desktop --no-sandbox