我有一个 C++ qt 程序(让我们调用它test_program
以使其更容易引用),它运行sudo lsblk
并popen
打印输出。
当我从 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
并且没有任何问题。
答案1
据我了解,
- 您
sudo lsblk
已从 QT 程序中调用 - 你用类似的东西开始你的QT程序
sudo qt_program
如果是这样,您的程序已经以root权限运行,您不需要再以root身份sudo
运行lsblk
。或者,只需正常启动 QT 程序并继续以 rootsudo
身份运行lsblk
。你真的不应该两者都需要。
实际上,您无论如何都不需要sudo
运行lsblk
:它提供的信息已经可供非特权用户使用。
错误的原因可能是sudo
配置为要求root
输入密码(不寻常),或者缺少尝试读取密码的 TTY 导致硬故障。在没有看到完整sudoers
配置的情况下,我认为不可能做出明确的决定。