关于centos系统sudo命令command not found的问题

前言

在 centos7 集群上部署一些服务的时候,由于习惯使用非 root 用户,但是非 root 用户安装 java 后,无法在sudo [command]命令下找到 java。

原因核查

原因其实很简单,因为我的java环境变量是写在/etc/profile.d/my_env.sh下的,而sudo命令是会重置环境变量,因此没有读到/etc/profile,导致找不到 java。

解决方案

搜罗了网上很多的解决方案,我每个都试了一次,具体如下:

1、使用 sudo -E 继承当前环境变量

无效。原因应该是如果用户对于指定的环境变量没有权限,则会无效。

2、使用 sudo -i 提升到root环境但忽略.bashrc

有效!翻阅了大量的文档都没有提到 sudo -i,但是这个参数竟然有效。参考《sudo 入门指南》这篇文章给了大概的原理说明。

file

3、修改/etc/sudoers文件,将Defaults env_reset改为 Defaults !env_reset

无效,据说此改动是取消sudoPath的重置,但我测试没有任何变化。

4、修改/etc/sudoers文件中的env_keep参数

无效,使用Defaults env_keep += "env1 env2"的方式修改env_keep参数,测试发现无用。有可能是我env_keep写得不对?

5、修改/etc/sudoers文件中的secure_path参数

有效!
把机器上的 $Path的值,替换/etc/sudoerssecure_path值,再执行 sudo 命令发现可以找到 java。

总结

建议是使用sudo -Esudo -i,尽量不要修改/etc/sudoers文件。一方面是/etc/sudoers维护麻烦,另一方面是本来/etc/sudoers作为只读文件目的就是不希望被修改。(题外话,据说还可以通过在/etc/sudoers.d目录下新增文件并添加环境变量,实现环境变量不重置。但此方法并没有找到相关文章借鉴,就此作罢。)

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇