测试用户是否具有sudo特权而不需要用户输入


12

我有一个本地Shell脚本,在交付有效负载之前,该脚本在远程主机上执行了许多测试;这些测试之一是用户是否具有sudo特权,只需简单地进行检查即可,sudo -v但这需要用户输入密码。另外,远程主机似乎具有即时的s​​udo超时,因此每个新连接都需要输入密码,这是我无权更改的(作为一项策略)。

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

谢谢!

更新:为了回应我的评论,我只想测试用户是否可以sudo,而无需该测试的用户交互。


您是否需要检查用户是否可以使用sudo,或者是否正在通过sudo执行shell脚本?
Niko SP

只是他是否有可能。本地脚本将要求稍后输入sudo密码,因此我只想尽早检查远程主机上的用户是否是sudoer。
DanH 2012年

快速检查我的ubuntu框是否给了我sudo -l,它返回用户可以运行的命令,如果(ALL)ALL是其中的一部分,则用户可以对任何命令使用sudo。也许那是直角?
Niko SP

1
sudo -l提示我输入密码。
ThatGraemeGuy 2012年

1
Sudo基于tty进行缓存,因此,如果新会话为您提供相同的tty,则可能不会提示您。尝试sudo -k先执行。
马克·瓦格纳

Answers:


13

恐怕唯一可以测试的是用户是否具有没有密码的sudo特权。

执行

sudo -n true

如果$?为0,表示用户可以使用sudo访问而无需输入密码,如果$?为1,用户需要密码。

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


1
请注意,这不利于预备检测,如果命令Xsudo可以不输入密码,并没有意外运行它
的try-catch-终于

3

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

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

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


3
简单地sudo -n -l cmd,您将被告知当前用户是否具有对cmd的sudo访问权限。如果要测试结果。
Philippe A.


1

我知道这是一个非常老的问题,但是我发现-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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.