为什么当我使用 su root 时 root 的 $PATH 变量不同

为什么当我使用 su root 时 root 的 $PATH 变量不同

当我尝试以普通用户身份运行 chkconfig 时(在 CentOS 5 上),我意识到我无法访问它,因为目录 sbin 不在我的 $PATH 中。当我 su 到 root 时,它仍然不起作用。我意识到 $PATH 变量与我切换的普通用户相同。

然而,当我以 root 身份登录时,$PATH 变量对于 root 来说是正确的,我可以运行该命令。

应该这样工作吗?如何让普通用户临时访问只能以 root 身份运行的命令?

谢谢

答案1

尝试使用命令su -。这-意味着新的 shell 将获得您已更改为的用户的环境。如果不使用它,您的大部分环境将保持不变。

su 的手册页显示:

可选参数 - 可用于提供与用户直接登录时所期望的类似的环境。

答案2

Root 和 User 拥有完全不同且独立的环境。使用 sudo 可让您执行受限命令,但实际上不会影响环境变量。

另一方面,su 可以加载 root 的环境。这几乎就像以 root 身份登录一样。

关于您的问题,您可以让普通用户能够“看到”命令,但不能执行它们。您仍然需要 root 权限。

例如,你可以以普通用户身份运行 ifconfig 只是为了查看你的 ip,但是如果你想要更改某些内容,那么你必须拥有适当的权限。

答案3

我认为这是正常的,每个用户都有自己的 PATH 变量,如果需要,您可以在用户的​​个人资料中为该用户更改它。

关于允许用户执行保留给 root 的命令,可以使用setuid bit但这可能很危险(设置用户标识)。如果用户对设置了 setuid 位的 root 拥有的文件具有执行权限(例如通过组),他将使用所有者的权限(root)而不是他自己的权限执行此文件。我不确定它是否适用于所有发行版,因为根据文档,许多发行版由于安全风险而不尊重它,但它至少在 Ubuntu 上有效。

相关内容