温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Go run permission denied的问题分析与解决方案是怎样的

发布时间:2021-12-06 17:21:47 来源:亿速云 阅读:437 作者:柒染 栏目:云计算

Go run permission denied的问题分析与解决方案是怎样的,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

0x01 问题

一次同事反馈在环境中,执行go run xx.go时出现如下异常提示。

fork/exec /tmp/go-build104992250/b001/exe/h: permission denied

有点兴趣,所以就动手查了下。查的过程比较简单,希望会有所帮助。

0x02 分析

出现这个问题,原因是go在/tmp目录下生成的可执行文件没有执行权限,当Go去执行时就会报错。 为什么会没有执行权限呢? 请教了同事之后,确认了开发环境中的/tmp的挂载选项中如下所示。

tmpfs on /run/shm type tmpfs (rw,nosuid,nodev,noexec,relatime,size=524288k)

其中有一个选项为noexec。mount的man page中如下描述,这个选项是可以禁止掉二进制的可执行权限,这会提高系统的安全性。实测这个选项对Shell、Python这种脚本语言的可执行脚本也有效果。

       noexec Do not permit direct execution of any binaries on the mounted filesystem.

0x03 解决

既然这个选项是安全要求的,自然不能去修改。转换下思路,能不能让Go换个地方。直觉告诉我,应该有个环境变量控制这个行为。很遗憾在国内并没有搜到。
既然是环境变量,那就去源码目录里搜索下。 通过GOROOT环境变量,确认了Go中的环境变量具有如下特征。 env GOROOT=$WORK/parent/goroot 有一个env的前缀。 grep 'env ' -rIn . | grep -i tmp 执行后,找到了GOTMPDIR这个环境变量。 在环境里试了下,GOTMPDIR=/root go run xxx.go之后,运行成功。问题解决了。

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注亿速云行业资讯频道,感谢您对亿速云的支持。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI