尝试从 Qt 程序执行 setcap

Trying to perform setcap from Qt program

我正在尝试以这种方式从 Qt 程序执行 setcap:

QProcess process;
QString command = "cat";
QStringList args;
args << _fileName;

process.start(command, args);
process.waitForFinished();

QString StdOut   = process.readAllStandardOutput();
QString StdError = process.readAllStandardError();
QString err      = process.errorString();



QProcess process_2;
command = "setcap";
args.clear();
args << "cap_kill=ep" << _fileName;

process_2.start(command, args);
process_2.waitForFinished();

StdOut   = process_2.readAllStandardOutput();
StdError = process_2.readAllStandardError();
err      = process_2.errorString();

作为 _fileName,我使用 QFileSystemModel 的值,在我的例子中它看起来像“/home/ekaterina/example”。

第一部分(只是为了测试路径正确性而编写的)工作正常并将文件内容放入 StdOut。我希望第二部分 return 类似于“不允许操作”之类的东西,因为 QtCreator 运行 它的项目不是根。但是我在错误字符串中得到“execvp:没有这样的文件或目录”。怎么样?

当我尝试 运行 具有“cap_setfcap”功能的项目可执行文件时,我得到了完全相同的结果。

最好的做法,如@G.M。建议,是提供二进制文件的完整路径。您可以通过以下方式找到 setcap 在您系统上的位置:

$ sudo which setcap

在 Debian 和 Fedora 上,returns /usr/sbin/setcap。在您的系统上,它也可能是 /sbin/setcap。然后将该字符串显式嵌入到您的程序中:

command = "/sbin/setcap";