1. 为什么sudo执行时会“找不到命令” sudo:command not found
在本地装了个Ubuntu虚拟机,golang环境搭好了并加入PATH环境变量,make编译源码时显示Permission denied
,然后sudo执行编译源码时显示sudo: go: command not found
。
然后尝试执行go version
命令
- 非root用户执行 :
go version go1.12.6 linux/amd64
- root用户执行 :
go version go1.12.6 linux/amd64
- 非root用户sudo执行 :
sudo: go: command not found
这???是不是很奇怪???到底是因为什么呢??
原来root用户和非root用户正常执行命令时,使用的PATH配置文件是 /etc/environment
非root用户sudo执行命令时,使用的PATH配置文件是 /etc/sudoers
/etc/sudoers文件默认是reanonly只读的,需要加入些权限;然后在secure_path中加入GOROOT路径即可:
修改前
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
修改后
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin:/usr/local/go/bin"
2. 修改/etc/sudoers权限出问题
sudo: /etc/sudoers is world writable
sudo: no valid sudoers sources found, quitting
sudo: unable to initialize policy plugin
在不同版本的Linux系统中对/etc/sudoers文件读写权限修改后的表现会出现不一样的反应,在个别版本中文件权限修改后,sudo命令执行就会报上面的错误。
但是如果将权限改回,直接将权限改回:permision denied
;sudo更改权限(执行所有的sudo命令)报上边的错误。更改权限会发生失败。
这时可以使用和sudo功能相似的一个命令pkexec
,作用也是将命令以管理员身份运行,但是不依赖与soduers文件。在sudo命令不能用时,可以考虑使用pkexec
将命令以管理员权限运行。
#用pkexec命令将sudoers文件权限改回440
pkexec chmod 440 /etc/sudoers
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。