繁体   English   中英

setreuid()失败,不允许操作

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM