su 或 sudo - 如何知道哪一个有效?

su 或 sudo - 如何知道哪一个有效?

我有一个 bash 脚本(x11docker)需要以 root ( docker) 身份运行一些命令,以及以非特权用户(X 服务器,如Xephyr)运行一些命令。该脚本有时会提示输入密码。它应该可以在任意 Linux 系统上运行,而无需先配置系统。

有些系统使用su,有些系统使用sudo来获取 root 权限。我如何才能识别哪一个有效?我试过sudo -l docker。那应该告诉我是否sudo docker允许。不幸的是,即使是这些信息也需要密码。

关键是,root 可能有也可能没有密码(使用时需要密码su -c),并且sudo可能允许也可能不允许运行 docker。如何决定由哪一个来完成这项工作(=以 root 权限执行命令)?

检查组 sudo 可能是一个不错的猜测,但并不可靠,因为它没有告诉我是否/etc/sudoers配置为允许组 sudo 任意 root 访问。此外,即使用户不是组 sudo 成员也docker可以允许进入。/etc/sudoers

pkexec应该是一个解决方案,但不可靠。密码提示在控制台上失败,在不同于 的 X 服务器上失败DISPLAY=:0,在 OpenSuse 上根本失败。

目前,该脚本默认使用su,并且有一个开关--sudo允许使用sudo。有可能,但并不漂亮。

我正在开发一个更新,允许以 root 身份运行脚本,并使用 、lognameSUDO_USER检查“真正的”非特权用户PKEXEC_UID。也不俏皮。

有没有办法知道我是否应该使用suor sudo

答案1

你至少可以测试一下是否root有密码。在这种情况下,您可能想尝试sudo

if [ foo = "$(echo | su -c "echo foo")" ]; then
  su -c whatever
else
  sudo whatever
fi

答案2

当您在没有其他选项的情况下执行 su 命令时,它会切换到超级用户(或 root 用户)。您必须输入 root 帐户的密码。但这并不是 su 命令的全部功能 – 您可以使用它切换到任何用户帐户。如果执行 su bob 命令,系统将提示您输入 Bob 的密码,并且 shell 将切换到 Bob 的用户帐户。

在 root shell 中运行完命令后,您应该键入 exit 以离开 root shell 并返回到有限权限模式。

Sudo 使用 root 权限运行单个命令。当您执行 sudo 命令时,系统会在以 root 用户身份运行命令之前提示您输入当前用户帐户的密码。默认情况下,Ubuntu 会记住密码十五分钟,并且在十五分钟结束之前不会再次要求输入密码。

相关内容