我一直在用 zerotier 作为异地组网的工具,把自己的所有机器都放在一个内网无疑是极大 增加了我控制机器的便携性,最近在一台新装 zerotier 的 windows 机器上发现一个问题, 跟我旧机器的表现不太相同。
我时常用 zerotier-cli peers 来检查 zerotier 的连通性,虽然无助于我解决网络延迟
的问题,但是可以辅助我了解 zerotier 到底是哪里做不了直连。对于 windows 系统来说,
zerotier 提供的 zerotier-cli 是个 bat。
不过在一台新装的 windows 电脑上,我依样画葫芦的时候,
却发现 zerotier-cli peers 报错没有权限,以我的认知,
网络设备需要更高权限也是可以理解的事情,我就默默地加了 sudo ,
不过没想到还是不行,一个黑窗一闪而过,没有任何输出,
只有在管理员权限的终端下才可以正常执行。
这倒是令人意料之外的事情,不过我印象中我的旧机器上是没有这个问题的,
也不需要 sudo,我特地去旧机器上验证了一下,验证了我的印象。
不过我也不觉得我在新机器上安装的 zerotier 有什么问题,
那么很有可能我之前解决过这个问题,只是当时没有记下来,后面也就忘记了这回事。
那么我们重新看看报错:
PS C:\ProgramData\ZeroTier\One> zerotier-cli.bat peers
C:\ProgramData\ZeroTier\One\zerotier-one_x64.exe: authtoken.secret not found or readable in C:\ProgramData\ZeroTier\One (try again as root)
authtoken.secret 这个文件没找到或不可读。那其实这个问题就很简单了,
这个文件一定存在,默认安装的话就是在 C:\ProgramData\ZeroTier\One\,
所以肯定是因为我们的用户没有读取这个文件的权限。
sudo 的黑窗口一闪而过也很好解释,根据执行的情况来看,
sudo 可能是在新窗口中执行了这个命令,然后结果输出在新窗口中了,
所以返回原有窗口的时候原窗口指令没有任何输出,解决这个问题很简单,
我们调整一下 sudo 的运行方式,这个问题应该就迎刃而解了,
把 sudo 的执行方式修改为内联(inline):

对于普通用户没有权限的问题,面多了加水,水多了加面, 没有权限我们给它加上去就好了,找到文件,属性切到安全:

点击继续:

点添加:

选择主体:

然后把自己加进去:

只给读取权限就好了:

这时候再执行 zerotier-cli.bat peers 就不需要管理员权限了。
Zerotier 可能是觉得终端用户不需要访问这个文件,
所以在安装时没有赋予用户访问这个文件的权力,这应该是基于安全的考量,
如果我们只考虑可以便捷地使用 zerotier-cli,
那给当前用户打开这个文件的读取权限,我个人觉得问题不大,
你看我已经基本上忘记了给这个文件开权限的事情。不过这是我个人的行为,
如果你觉得这样做还是有安全风险,
那还是打开一个管理员的命令行窗口再执行 zerotier-cli ,再不然,
就是把 sudo 设置成 inline,每次执行前敲 sudo 打开 UAC 提权窗口确认。