可以在 sudo 之前检查 sudo 的能力吗?

可以在 sudo 之前检查 sudo 的能力吗?

我正在编写一个小型实用程序。如果需要的话,我希望它尝试sudo运行一些东西。

也就是说:如果文件权限不允许当前用户对特定文件进行操作(并且sudo规则允许),我希望我的实用程序sudo以文件所有者的身份运行某些内容。

我希望事先检查此功能,因为我希望系统日志不会充满失败sudo尝试的噪音。正如sudo其本身在失败时的报告:“此事件将被报告”。

所以,我希望以编程方式检查:可以通过user <x>运行吗?command <y>sudo

问题是:虽然/etc/sudoers包含该映射,但它是 root 拥有的并且普通用户无法读取。

我正在考虑生成一个子进程来运行sudo -l(它输出当前用户可以 sudo 运行的命令)。然后我会解析它的输出。然而,这似乎有点脆弱。输出包含我想要的信息,但它似乎是为人类阅读而设计的(而不是为了程序化消费)。我不知道是否可以保证将来的输出遵循相同的格式,或者跨不同的平台。

以编程方式解析sudo -l输出是否被认为是安全的?如果没有,是否有更好的选择来提前确定 sudo 命令是否会成功?


(X/Y 的背景:此实用程序供限制访问角色帐户使用。我希望其他一些用户有效地选择允许限制访问帐户通过 sudo 规则对其文件进行操作。但是,我赢了提前不知道哪些其他用户拥有相关的 sudo 规则)

答案1

根据 sudo 手册页:

 -l, --list  If no command is specified, list the allowed (and forbidden)
             commands for the invoking user (or the user specified by the
             -U option) on the current host.  A longer list format is used
             if this option is specified multiple times and the security
             policy supports a verbose output format.

             If a command is specified and is permitted by the security
             policy, the fully-qualified path to the command is displayed
             along with any command line arguments.  If command is
             specified but not allowed, sudo will exit with a status value
             of 1.

所以这将归结为

if sudo -l -U $USER shutdown > /dev/null
then
   ## $USER can
else
   ## $USER cannot
fi 

正如 Muru 所指出的,根据您的需要,使用或或不-U $USER使用。-U $USERTOTEST

相关内容