Sudo 与 root;有什么实际区别吗?

Sudo 与 root;有什么实际区别吗?

我正在与一位产品支持人员合作,他坚持认为我需要以 root 身份安装一系列补丁,并且 sudo 不起作用;他没有给出理由,但似乎非常坚定地坚持自己的信念。浏览超级用户我无法确定这种情况的任何可能原因,为了确认,当我运行:

sudo -l

我得到:

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

据我所知,从 Linux/服务器团队获得访问权限以真正成为 root 并不是一个立即的过程,因此我宁愿自己安装它们。

是否存在任何实际原因导致 sudo 在服务器上安装软件时的行为与 root 不同?

答案1

这很大程度上取决于你如何使用sudo或调用你的程序su
例如在我此刻所在的系统上:

                  .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] 

其中 [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、别名……)。特别是,用户可以拥有其目录中不同的顺序$PATH,因此,脚本可以执行命令,例如,/home/$USER/bin而不是从 root 期望的路径中的命令。

您可以在以下位置运行程序sudo -i由于您已使用 root 身份登录su -sudo MyCommand,但是如果您使用或 使用运行它,则可能会有不同的行为su -c MyCommand


man su

在描述部分:
当前环境被传递到新的 shell。 的价值$PATH 被重置对于普通用户,为 /bin:/usr/bin;对于超级用户,为 /sbin:/bin:/usr/sbin:/usr/bin
...
在选项部分:
-、-l、--login
提供环境类似于用户会期望直接登录

来自男人sudo

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

答案2

如果你有完整的sudo访问后,您就可以root使用sudo su -,因此安全点是没有意义的。

确实,有一种方法可以辨别以何种方式运行的程序root和以何种方式运行的程序sudo- 使用getuid对比geteuid- 但这是人为的伎俩。补丁系统为什么要这么做?

答案3

正如@Hastur 所指出的,如果你获得了 root shell,则会有一些差异。

如果您没有获得 root shell,那么差异就更大了。支持成员可能有尝试执行诸如以 root 身份运行sudo patch -p0 < /root/patch.filewhere之类的操作的经验,但(从文件进行管道传输)则没有。patch<

答案4

这取决于您希望 root 访问权限有多细。如果您有多个用户在系统上执行不同的任务,那么 sudo 会更理想。我经常使用的一个例子是需要重新启动应用程序或数据库。安全性始终以最低权限实现。我使用组,并且只允许这些组执行明确的操作。一本描述此过程的好书是“Sudo Mastery:真实用户的用户访问控制”。实际上,这是一本关于 sudo 的好书……

相关内容