[英]setreuid() fails with Operation not permitted
我正在尝试使用以下代码更改流程的实际UID
int ERN2=setreuid(euid,m_ruid);
printf("something went wrong with setreuid %s\n", strerror(ERN2));
std::cout<<"error no for setrugid"<<ERN2<<"\n";
if ( ERN2 == 0)
{
.....
}
m_ruid
是root(0),而euid
是可接受的ID,但是当我得到setreuid()
的结果时,它始终为-1,并且我使用strerror()
表示“不允许操作”,这使我能够更改realGID setregid()
但更改UID始终失败,任何人都会有所了解。
我在FreeBSD上,我想知道为什么即使我们将root用作参数之一也是如此。
手册页非常清晰:
如果成功,则setreuid()函数返回值0;否则,返回0。 否则,返回值-1,并且将全局变量errno设置为指示错误。
这就是错误返回几乎适用于所有系统调用的方式。 它们不返回errno,而是在错误时返回-1
或等效值,并设置全局变量errno
。
如果不清楚,请尝试使用strerror(errno)
看看您能得到什么。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.