【问题标题】:setreuid() fails with Operation not permittedsetreuid() 失败,不允许操作
【发布时间】:2016-09-26 12:59:50
【问题描述】:

我正在尝试使用下面的代码更改进程的真实 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 作为参数之一也会发生这种情况。

【问题讨论】:

    标签: c++ c kernel freebsd user-permissions


    【解决方案1】:

    手册页很清楚:

    如果成功,setreuid() 函数返回值 0;否则返回值 -1 并设置全局变量 errno 以指示错误。

    这就是几乎所有系统调用的错误返回工作方式。他们不返回 errno,他们只是在错误时返回 -1 或等效项并设置全局变量 errno

    如果不清楚,请尝试strerror(errno) 看看你会得到什么。

    【讨论】:

    • 我也明白了,它说“不允许操作”我想知道为什么即使我们将根 ID 作为其参数之一,setreuid() 操作也会失败。
    • @FallingFromBed 执行此操作的进程是否以 root 身份运行? (或以任何其他方式允许更改其 uid)
    猜你喜欢
    • 2012-06-19
    • 2012-08-18
    • 2019-01-25
    • 2023-01-27
    • 2020-09-14
    • 2012-12-06
    • 2012-05-03
    • 1970-01-01
    • 2020-03-25
    相关资源
    最近更新 更多