在程序中使用 sudo 运行命令

在程序中使用 sudo 运行命令

我有一个 C++ qt 程序(让我们调用它test_program以使其更容易引用),它运行sudo lsblkpopen打印输出。

当我从 qt 应用程序中运行test_program(qt 应用程序本身是使用 启动的sudo)时,我可以看到打印的输出。

但是当我test_program从使用 qt 应用程序创建的二进制文件(如printssudo test_program的输出)启动时sudo lsblk

sudo: account validation failure, is your account locked?\nsudo: a password is required

我尝试将当前用户添加到sudoers文件中。这也没有帮助。

user ALL=(ALL) NOPASSWD:/usr/bin/lsblk,/home/user/test_program

启动的程序sudo应该能够运行任何命令,对sudo吧?我用一个 C++ 程序对此进行了测试,我用 sudo 启动该程序,它运行sudo lsblk并且没有任何问题。

我的 sudoers 文件如下所示: 在此输入图像描述

答案1

据我了解,

  1. sudo lsblk已从 QT 程序中调用
  2. 你用类似的东西开始你的QT程序sudo qt_program

如果是这样,您的程序已经以root权限运行,您不需要再以root身份sudo运行lsblk。或者,只需正常启动 QT 程序并继续以 rootsudo身份运行lsblk。你真的不应该两者都需要。

实际上,您无论如何都不需要sudo运行lsblk:它提供的信息已经可供非特权用户使用。

错误的原因可能是sudo配置为要求root输入密码(不寻常),或者缺少尝试读取密码的 TTY 导致硬故障。在没有看到完整sudoers配置的情况下,我认为不可能做出明确的决定。

相关内容