TBOOX

xmake改进权限问题,提升操作安全性

2017-03-30

最近对xmake的操作权限进行了升级,提供更加安全的命令操作,例如:

  1. 改进xmake installxmake uninstall命令,提供更加安全地安装和卸载支持
  2. 参考homebrew,禁止在root下运行xmake命令
  3. 改进xmake自身的编译安装脚本,不在root下进行build
安全问题1

之前的xmake installxmake uninstall行为,是自动build后进行安装,而大部分情况下安装目录是在/usr/local目录下。

因此,需要root权限才能写入,那么之前的方式只能暴力地直接加上sudo xmake install来执行。

可想而知,虽然安装确实成功了,但是由于默认的自动构建行为,导致生成的临时*.o, *.a等各种文件都具备了root权限,而且一个不小心就会覆盖系统的一些库文件。

因此,为了避免这个问题,xmake改进了安装逻辑,将buildinstall分离成两个独立的阶段,分别使用不同的权限,并且提供更加友好的提示信息,例如:

safer_installation

安全问题2

这个主要参考了homebrew对sudo brew的处理,为了提高安全性,它禁止在root下运行命令,其实很多其他工具都有这个特性,CocoaPods也是如此。

那它是怎么实现的呢,我翻了下homebrew的源码,在brew.sh中有这么一段脚本:

check-run-command-as-root() {
  [[ "$(id -u)" = 0 ]] || return

  # Homebrew Services may need `sudo` for system-wide daemons.
  [[ "$HOMEBREW_COMMAND" = "services" ]] && return

  # It's fine to run this as root as it's not changing anything.
  [[ "$HOMEBREW_COMMAND" = "--prefix" ]] && return

  odie <<EOS
Running Homebrew as root is extremely dangerous and no longer supported.
As Homebrew does not drop privileges on installation you would be giving all
build scripts full access to your system.
EOS
}

原来是用了id -u命令,来判断当前命令是否在root下运行,如果是root用户,那么这个命令返回:’0’

因此,xmake参考这个实现,也实现了个类似的检测和提示:

check_root

安全问题3

之前的xmake源码安装,是直接运行的sudo ./install,这个跟问题一类似,build和install同时在root执行,因此只需要把他们分离开来就行了,现在的安装步骤:

make build; sudo make install

如果要指定安装目录,那么只需要:

make build; sudo make install prefix=/usr/local

相关文章

评论


链接

xmake 入门课程
course

技术交流群(QQ)
qqgroup