Featured image of post 小技巧:macOS上运行未签名的程序

小技巧:macOS上运行未签名的程序

背景

使用macOS的用户肯定对于上图不会陌生,苹果公司出于安全方面的考虑,禁止未签名的程序在macOS上运行,但是有时候就是想运行试一下看看程序到底是干什么。

有一种方法是关闭macOS上的一个设置项,使得系统不再检查签名,但是这就要牺牲安全性了。要怎么绕过这个限制并且保证系统的安全呢?

答案是:docker

方案

是的,把需要暂时运行的程序放到docker容器里运行,可以设置相应的volume,也可以不设置。因为docker是隔离的子系统,这样既保证了系统的安全,又有机会试用软件。

注意:我将在本文中介绍的方法并不是去dockerhub上下载一个对应的image直接运行,也不需要自己编译一个docker镜像。请往下看。。。

例子

非广告时间:前段时间我看到一个开源项目pocketbase(自行搜索哈),是一个单文件的基于sqlite的后端软件,用golang写的,在github上各个操作系统的版本都有,release里面有windows,macos,linux对应的二进制版本,总之非常全,我就直接下载的macos的版本来试试,结果就遇到了标题所说的问题。苹果还是不放心咱们啊

突破的方法就是利用docker来运行它,我重新下载了linux的版本,解压在目录pocketbase_0.22.20_linux_amd6里面,因为我的mac是intel芯片的,所以下载“amd64”的,如果你的mac用的是M1或者M2,M3的,那些都是ARM内核的,需要下载“arm64”的压缩包。

解压之后里面就是3个文件

现在进入到pocketbase所在的目录,来启动一个docker容器,由于golang编译的单文件都是自包含的,也就是不需要额外的库或包即可运行,所以非常适合起一个超小的docker 容器,这里我使用alpine,一个超级精简的linux系统

docker run --rm -it -p 8080:8080 -v $(pwd):/usr/local/bin alpine:latest 

按照惯例,解释一下上面的命令,这个命令启动了一个alpine linux容器,退出后将自动清除容器,会启动字符界面的交互,映射本地8080端口到容器的8080端口,映射当前目录到容器的/usr/local/bin 目录,这样pocketbase就会在这个位置,可以被$PATH搜索到。

容器启动后,运行pocketbase命令将会出现帮助信息

具体如何使用admin,migrate,等等请参考pocketbase官网的说明,这里我只是演示利用docker运行程序

pocketbase serve --http 0.0.0.0:8080

用这个命令可以运行pocketbase并指定http服务在8088端口,这里0.0.0.0就是为了让所有客户端都能访问,包括从容器外部。

好了,现在容器内的8080端口已经运行了,显示如下:

现在,我们就可以在本机来访问8080端口了。

在本机浏览器输入:

http://localhost:8080/_/

看,已经可以访问了

By 大可出奇迹