我正在写一个访问Linux原始套接字的Qt应用程序,所以我需要root权限来运行程序。 所以我这样做了:
在我的程序中,我在开始时是这样的:
if (getuid() != 0) { fprintf(stderr,"You must be root to run this program. UID = %in",getuid()); exit(-1); }
然后,我做了“chmod 6777 myProgram”作为根。
但是,当我试图以普通用户身份运行它时,它说:“您必须是root用户才能运行此程序。UID = 1002”,其中1002是我当前正在使用的用户ID。
Windows窗体Webbrowser控件 – 支持Javascript?
修复“断开”的驱动器映射
memcpy – 从不同大小的整数转换为指针
将一个X509 PEM文件加载到Windows CryptoApi中
如何测量C#中的系统空闲时间,不包括看电影等?
任何一个人可以发表一条线索吗?
谢谢
在Linux上编译一个共享库来定位所有发行版
如何在Visual C ++中以编程方式设置断点?
虚拟摄像头input为字节stream
什么是最安全的方式来检索系统驱动器
Linux进程虚拟地址空间的地址范围
你正在混合getuid()和geteuid() 。 从getuid()的手册页:
getuid()函数返回调用进程的真实用户标识。 geteuid()函数返回调用进程的有效用户标识。
真正的用户ID是调用程序的用户的ID。 由于有效用户ID在执行set-user-ID模式进程期间为进程提供额外权限,因此使用getuid()来确定调用进程的真实用户id。
Linux的手册页更加简洁(前一个来自Mac OS X):
当正常程序执行时,进程的有效和真实用户ID被设置为执行该文件的用户的ID。 当执行一组ID程序时,真实用户ID被设置给主叫用户,有效用户ID对应于正在执行的文件上的设置ID位。
对于setuid程序,文件需要由您想要设置的用户标识拥有,这在大多数情况下是root用户。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。