Sudo vs root;任何实际差异?

Modified on: Thu, 14 Mar 2019 07:20:02 +0800

我正在与一个产品的支持成员合作,他坚持认为我需要root才能安装一系列补丁,而sudo将不起作用;他没有提供理由,但他的信仰似乎非常坚定。浏览超级用户我无法确定出现这种情况的任何可能原因,并在确认时,我运行时:

sudo -l

我明白了:

... User [MY USERNAME] may run the following commands on this host: (ALL) ALL

从Linux /服务器团队访问实际上是root用户并不像我理解的那样是一个简单的过程,所以我更愿意自己安装它们。

有什么实际的理由说明为什么sudo在服务器上安装软件的行为与root不同?

最佳答案

这在很大程度上取决于您使用sudosu调用程序的方式。
例如。在我现在所处的系统上:

                  .bashrc                        
    COMMAND        $HOME   $USER  Env.  $PATH
 1. sudo -i        (root)   root  root  [1]
 2. sudo -s        (USER)   root  USER  /home/${USER}/bin:[1]
 3. sudo /bin/bash (USER)   root  USER  /home/${USER}/bin:[1]  
 4. sudo su        (root)   root  USER  [1]:/usr/games:/usr/local/games  
 5. sudo su -      (root)   root  root  [1] 

where [1] = / usr / local / sbin:/ usr / local / bin:/ usr / sbin:/ usr / bin:/ sbin:/ bin
Env =环境变量重置为1和5,取自2,3,4中的$ USER。

所以脚本或用不同选项启动的程序可以看到不同的$PATH$HOME,它的shell可以读取不同的.bashrc.profile和环境变量。它读取与$HOME相关的文件。每个用户都可以以不同的方式修改他的环境(变量,$PATH,。bashrc,.profile,.bash_profile,alias ...)。特别地,用户可以在其$PATH中具有不同的目录顺序,因此,脚本可以执行例如命令。在/home/$USER/bin中,而不是从root预期的路径中的那个。

您可以使用sudo -i以root身份登录su -下运行该程序,
但如果使用sudo MyCommandsu -c MyCommand运行它,则可能会有不同的行为。


来自man su

  

在说明部分:
   当前环境传递给新shell。对于普通用户,$ PATH的值重置到/ bin:/ usr / bin,或者
         / sbin:/ bin:/ usr / sbin:/ usr / bin为超级用户
  ...
  在选项部分:
   -, - l, - login
             提供类似于的环境,用户直接登录时用户期望的内容。

来自man sudo

  

-i, - 注意
   将目标用户的密码数据库条目指定的shell作为登录shell运行。这意味着特定于登录的资源文件
                   如shell将读取.profile或.login。如果指定了一个命令,它将被传递给shell以便通过执行
                   shell的-c选项。如果未指定任何命令,则执行交互式shell。在运行shell之前,sudo尝试更改为该用户的主目录。 该命令的运行环境类似于用户在登录时收到的环境。 sudoers(5)手册中的Command Environment部分记录了-i选项如何影响运行命令的环境
                   当sudoers政策正在使用时。

作者:,Hastur

相关问答

添加新评论