无需用户输入即可测试用户是否具有 sudo 权限

无需用户输入即可测试用户是否具有 sudo 权限

我有一个本地 shell 脚本,在传递有效负载之前,它会在远程主机上执行多项测试;其中一项测试是用户是否具有 sudo 权限,只需使用 即可检查,sudo -v但这需要用户输入密码。此外,远程主机似乎有即时 sudo 超时,因此每次新连接都需要输入密码,而这是我无权更改的(作为一项政策)。

我当然可以测试用户是否属于某些组,但这与远程主机配置无关,所以我希望有一种方法可以检查,而不需要假设用户的组,也不需要用户输入?

谢谢!

更新:为了回应我的评论,我只想测试用户是否有可能使用 sudo,而不需要用户进行交互进行该测试。

答案1

恐怕你唯一能测试的是用户是否具有 sudo 权限没有密码。

执行

sudo -n true

如果 $? 为 0,则用户无需密码即可获得 sudo 访问权限;如果 $? 为 1,则用户需要密码。

如果你需要对特定程序进行验证,请更改true你的程序,使程序不执行任何操作,例如chmod --help

答案2

如果您有一个具有 sudo 访问权限的用户(例如“root”),则可以使用它来检查其他登录信息。以具有访问权限的用户身份运行:

sudo -n -l -U foo 2>&1 | egrep -c -i “不允许运行 sudo|未知用户”

如果返回零,则“foo”具有访问权限。否则,它没有 sudo 访问权限。

答案3

我知道这是一个非常老的问题,但我发现-n(非交互式) 标志和-v/很有用-l。但是,您必须检查输出:

$ sudo -vn && sudo -ln  #User with cached credentials
User adminuser may run the following commands on computername:
    (ALL) ALL
$ sudo -vn && sudo -ln  #User who _can_ sudo but isn't cached
sudo: a password is required
$ sudo -vn && sudo -ln  #User who can't at all
Sorry, user nonadmin may not run sudo on computername.

一些输出重定向和 grepping 可能会带你到达那里:

if (sudo -vn && sudo -ln) 2>&1 | grep -v 'may not' > /dev/null; then
  #they're cool
  exit 0 #Or, whatever
fi

答案4

sudo -l

这应该足以让您决定您是否拥有您想要/需要的特权。

相关内容