我的C / C ++应用程序如何确定root用户是否正在执行命令?

我正在编写一个需要执行root用户权限的应用程序。 如果由非root用户执行,则会退出并终止一个perror消息,如:

pthread_getschedparam: Operation not permitted 

我想使应用程序更加用户友好。 作为早期初始化的一部分,我希望能检查它是否被root执行。 如果不是root,则会显示一条消息,指示它只能由root运行,然后终止。

在此先感谢您的帮助。

Solutions Collecting From Web of "我的C / C ++应用程序如何确定root用户是否正在执行命令?"

getuidgeteuid将是明显的选择。

我会建议不要做这个改变,而是改善你的错误信息。 你的应用程序实际上需要“根植”是值得怀疑的。 相反,它需要某些root用户拥有的特权,但哪些具有细粒度安全控制的操作系统可能能够授予应用程序,而不必授予其完全的根访问权限。 即使现在不可能,也许可以在6个月或者2年之后,如果你的程序拒绝运行,而是基于对权限模型的后退假设而不是仅仅检查它是否成功执行它需要的特权操作。

 #include <unistd.h> // getuid #include <stdio.h> // printf int main() { if (getuid()) printf("%s", "You must be root!\n"); else printf("%s", "OK, you are root.\n"); return 0; } 

你真正想要检查的是,如果你有正确的能力集合( CAP_SYS_NICE我认为是你需要的能力),请参阅手册页capabilities (7)capget (2)这样,如果你有能力做你想做的事,但你不是根。