Sudo - 是否有命令可以检查我是否有 sudo 和/或还剩多少时间?

Sudo - 是否有命令可以检查我是否有 sudo 和/或还剩多少时间?

(最初发布在 Stack Overflow 上)。他们建议我尝试一下这里。以下是原始帖子:

参见标题。我想要一个允许我查询 sudo 的命令。理想情况下,如果我仍然有 sudo,它会返回成功,如果 sudo 已过期,它会返回 false。获取剩余时间可能也很有用(尽管如果我担心,我可以sudo -v重新验证。)哦,它不应该要求输入密码。

我发现最接近的是sudo -n true,但该-n选项仅在我工作的 Centos 5 机器上存在。-n如果它必须要求输入密码,则会失败。还有其他方法可以获得此功能吗?假设我实际上并没有在我使用的所有机器上拥有 root 权限,因此我无法根据自己的喜好安装新版本的 sudo。

不管怎样,我这样做是为了让我的提示符显示 sudo 状态。我喜欢知道哪些终端可以主动使用 sudo。当我是 root 时,我还有一个会改变颜色的提示符,但我不经常使用 root,所以用处有限。

答案1

-n选项在较新版本的 中可用sudo,但正如您所说,这不是一个选项。除了尝试sudo并查看它是否返回密码提示之外,没有其他实际方法可以完成您想要的操作。如果您担心的是您想要一个视觉指示,为什么不启动 do 来sudo /bin/bash启动 root bash 会话?请注意,这是不安全的,但如果有人意识到您在 sudo 上的提示更改,这也有点不安全。

答案2

我知道这是一个非常老的问题,但这是我今天在脚本中做的。假设 sudo 意味着能够以 sudo 身份运行任何命令(或者至少是 uptime)

CAN_I_RUN_SUDO=$(sudo -n uptime 2>&1 | grep "load" | wc -l)
如果[${CAN_I_RUN_SUDO} -gt 0]
然后
    echo“我可以运行 sudo 命令”
别的
    echo“我无法运行 Sudo 命令”

但是,如果您的用户有限制visudo,则此检查将不够,例如,如果您的用户只能使用 make 命令。请尝试运行一些您知道可以正常工作的命令。

您可以添加过滤器grep -v Sorry,例如:

$(sudo -n uptime 2>&1 | grep "load" | grep -v Sorry | wc -l)

以避免这些误报。

答案3

为了简化@wags007 给出的答案

if sudo -n true
then
  sudo id
else
  echo "sorry, but did not want to bother you"
fi

然而,如果在你的https://www.sudo.ws/man/1.8.15/sudoers.man.html您的配置中,defaults mail_badpass每次测试结果为 false 时都会发送一封邮件(会提示)。为了避免这种麻烦,请将 sudoers 文件中的该部分更改为

Defaults       mail_badpass
Defaults!      /bin/true !mail_badpass

因此,除 /bin/true 之外的所有命令都会发送安全警报邮件。是的,现在有人可以通过sudo true无限次调用来尝试暴力破解密码,而不会发送任何安全警报邮件。

注意:请始终使用visudo而不是您喜欢的编辑器来编辑 sudoers 文件。否则,您可能会被锁定。

答案4

根据 sudo 手册,sudo 会话是根据时间戳文件 ( /usr/lib/sudo/<username>) 确定的,因此您可以通过检查时间戳文件的日期/时间来确定剩余时间。但是,在我的系统中,时间戳文件实际上是一个目录,其中有三个文件包含神秘的内容(还有一些奇怪的时间戳,但似乎/usr/lib/sudo/<username>有一个时间戳与我给 sudo 密码的时间一致。我认为/usr/lib/sudo/<username>/0有最近一次执行的时间戳sudo

相关内容