sudo 和 sudo -i 访问功能

sudo 和 sudo -i 访问功能

sudo 和 sudo -i 之间的权限区别是什么?

有了sudo

    $sudo echo "search foo.bar.baz" >> /etc/resolv.conf
    bash: /etc/resolv.conf: Permission denied

...与sudo -i

    $sudo -i
    #echo "search foo.bar.baz" >> /etc/resolv.conf

...成功了。权限如下:

    drwxr-xr-x 166 root root 12288 2009-10-17 21:02 .
    -rw-r--r--   1 root root 42    2009-10-17 20:55 /etc/resolv.conf

我很惊讶这些命令有不同的行为,是什么原因导致刚刚的sudo版本失败?

答案1

在第一个示例中,重定向发生在当前 shell 中,而不是 sudo 子 shell 中。因此,sudo执行echo "search foo.bar.baz"并将结果返回到当前 shell,然后尝试将其写入/etc/resolv.conf

bash您可以通过直接调用 sudo 命令来使第一个示例正常工作:

sudo bash -c "echo 'search foo.bar.baz' >> /etc/resolv.conf"

答案2

使用 ,sudo您可以使用具有管理员权限的 1 条命令。
使用 ,sudo -i您将使用自己的 shell 和环境变量登录到 root 帐户。
否则,您可以使用sudo -s,使用它,您将登录到 root 帐户,但您仍可以使用自己的 shell 和变量。

问题是,sudo -i您可能会获得另一个 shell 和另一个 $PATH,这可以解决问题。

答案3

来自 sudo 手册页:

-i  The -i (simulate initial login) option runs the shell specified in
    the passwd(5) entry of the user that the command is being run as.
    The command name argument given to the shell begins with a ‘-’ to
    tell the shell to run as a login shell.  sudo attempts to change to
    that user’s home directory before running the shell.  It also ini‐
    tializes the environment, leaving TERM unchanged, setting HOME,
    SHELL, USER, LOGNAME, and PATH, and unsetting all other environment
    variables.  Note that because the shell to use is determined before
    the sudoers file is parsed, a runas_default setting in sudoers will
    specify the user to run the shell as but will not affect which
    shell is actually run.

您遇到的问题是 shell 仅将 sudo 应用于您构建的管道的第一部分。>> etc以您的权限而不是 root 身份运行。

相关内容