为什么我在以用户身份运行 sudo 时没有足够的权限

Chr*_*ski 7 permissions sudo

以下失败:

sudo -u chris ls /root
ls: cannot open directory '/root': Permission denied
Run Code Online (Sandbox Code Playgroud)

虽然以下成功:

sudo ls /root
...
Run Code Online (Sandbox Code Playgroud)

我不理解为什么。我假设除了具有 root 权限之外,还-u只是将$USER/running 用户更改为提供的参数。这种行为背后的原因是什么?

Ste*_*itt 23

sudo -u chris以 user 身份运行给定的命令chris,而不是以 root 身份并USER设置为chris。因此,如果chris无法访问/rootsudo -u chris则不会更改。

man sudo

-u 用户, --user =用户

以默认目标用户(通常是root)以外的用户身份运行命令。

sudo不是专门的“以 root 身份运行”工具;它是一个“以其他用户或组身份运行”的工具。

  • 是的,`sudo` 不授予 root 权限;授予 root 权限的是 root。 (10认同)
  • 整个权限模型基于您的用户 ID。真的没有“我,但有其他人的许可”这样的东西。(进程的真实用户 ID 和有效用户 ID 是有区别的,但一个或另一个用于特定操作。) (5认同)
  • @RossPresser 在你的 `sudo -u chris echo '我黑了你!' 中的重定向(和 `~`)> ~/hacked.txt` 示例将由初始用户的 shell 处理,而不是由 sudo 处理,并且不太可能生成 chris 拥有的文件。 (3认同)