【问题标题】:Quickly check whether sudo permissions are available快速检查sudo权限是否可用
【发布时间】:2008-09-23 16:55:16
【问题描述】:

我希望能够快速检查我是否都具有 sudo 访问权限以及我的密码是否已经过身份验证。我不担心专门为我即将执行的操作而拥有 sudo 访问权限,但这将是一个不错的奖励。

具体来说,我要使用它是一个我希望由一系列用户运行的脚本。有些有 sudo 访问权限。都知道root密码。

当他们运行我的脚本时,如果可能的话,我希望它使用 sudo 权限而不提示输入密码,否则回退到询问 root 密码(因为他们可能没有sudo 访问)。

我的第一次非工作尝试是在 STDIN 关闭或从 /dev/null 读取的情况下分叉 sudo -S true。但这仍然会提示输入密码并等待几秒钟。

我尝试了其他几件事,包括等待 0.3 秒以查看它是否立即成功,但我尝试的所有操作最终都在某些情况下失败。 (并不是因为我的超时时间太短。)很难弄清楚发生了什么,因为我不能像往常一样只是 strace。

知道的一件事是在运行sudo -S true 之前关闭 STDIN 或将其附加到管道上。我希望这会使密码提示立即失败,但它仍然提示并且行为奇怪。我想它可能需要一个终端。

【问题讨论】:

    标签: unix sudo


    【解决方案1】:

    对于较新版本的sudo,有一个用于此目的的选项:

    sudo -n true
    

    我在这里使用true 表示无操作,但您可以使用任何命令。

    【讨论】:

      【解决方案2】:

      我不知道需要这样做的最终原因是什么,但我认为您可能需要重新考虑核心原因是什么。尝试使用权限执行复杂、不寻常的事情经常会导致安全漏洞。

      更具体地说,无论脚本试图做什么,使用 setuid 而不是 sudo 可能会更好。 (我还想知道为什么这么多人拥有 root 密码。Sudo 专门用来避免给人们提供 root 密码。)

      【讨论】:

      • 我们免费提供root密码,并且会一直持续到出现问题为止。我们已经相处了 6 年,这让生活变得更轻松。但我们中的许多人更喜欢使用 sudo,因为 (1) 它是我们自己的密码,并且 (2) 操作被记录下来。所以这是为了方便,而不是绕过限制。
      • setuid 是一个好主意,并且可能在这 75% 的时间里都可以工作,但我们经常通过网络将其 scp'ing 到一个新构建的盒子上并设置 setuid 位会击败便利方面。 (稍微改进了xauth -f /var/gdm/:0.Xauth list | xargs -n 3 xauth add
      【解决方案3】:

      跑步

      sudo -S true < /dev/null &>/dev/null
      

      似乎可以正常工作,尽管它会延迟一秒钟然后失败。

      【讨论】:

        【解决方案4】:
        getent group admin | grep $particular_user
        

        你可以使用 whoami 来获取当前用户。

        编辑:但这并不能帮助您确定您是否仍然有权执行 sudo 任务...嗯..

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-11-06
          • 1970-01-01
          • 2023-03-20
          • 1970-01-01
          相关资源
          最近更新 更多