我希望能够快速检查我是否都有sudo访问权限,并且我的密码已经过身份验证。我并不担心sudo访问专门用于我即将执行的操作,但这将是一个很好的奖励。

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

当他们运行我的脚本时,我希望它在不提示输入密码的情况下使用sudo权限(如果可能的话),否则要回到要求 root 密码(因为他们可能没有sudo access)。

我的第一个非工作尝试是在STDIN关闭或从/ dev / null读取时解析 sudo -S true 。但是仍然提示输入密码并等待几秒钟。

我已经尝试了其他一些事情,包括等待0.3秒以确定它是否立即成功,但我尝试的所有事情在某些情况下都会失败。 (并不是因为我的超时时间太短。)很难弄清楚发生了什么,因为我不能像往常那样直截了当。

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

有帮助吗?

解决方案

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

sudo -n true

我在这里使用 true 作为无操作,但你可以使用任何命令。

其他提示

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

更具体地说,无论脚本尝试做什么,最好用setuid代替sudo。 (我也不得不想知道为什么这么多人拥有root密码.Sudo专门用来避免给人们root密码。)

getent group admin | grep $particular_user

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

编辑:但是,如果您仍然执行sudo任务,这无法帮助您找到......嗯..

运行

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

似乎有效,但在失败之前会延迟一秒钟。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top