使root文件拥有后,有效用户ID不会更改

Evg*_*nko 6 permissions privileges command-line

我正在读一本关于使用C编程的书,我得到了一个部分,我必须编写一个程序,它将显示正在执行文件的真实uid和有效uid.在编译代码后gcc,我输入命令以查看当前的uOwner和gOwner ls- l id_demo输出是这样的:

-rwxrwxr-x 1 user user 8629 Sep 21 13:04 id_demo
Run Code Online (Sandbox Code Playgroud)

然后我执行程序本身,这是我得到的:

real uid: 1000 effective uid: 1000
Run Code Online (Sandbox Code Playgroud)

...到现在为止还挺好.然后我输入一个命令来更改文件的所有者:

sudo chown root:root ./id_demo
Run Code Online (Sandbox Code Playgroud)

ls -l主人已经更改为根确认:

-rwxrwxr-x 1 root root 8629 Sep 21 13:04 id_demo
Run Code Online (Sandbox Code Playgroud)

再次,执行程序显示real uiduid1000.最后一步uid必须是0是这样的:sudo chmod u+s ./uid_demo但对我来说,他们保持为1000,在书中输出显然是这样:

real uid: 1000
effective uid: 0
Run Code Online (Sandbox Code Playgroud)

任何想法为什么会发生这种情况?

UPDATE

id_demo源代码:

#include <stdio.h>

int main ()
{
    printf("real uid: %d\n", getuid());
    printf("effective uid: %d\n", geteuid());
}
Run Code Online (Sandbox Code Playgroud)

更新2 屏幕截图

            ss#1

              ls -l testuid

请帮忙.我疯了,我花了6个小时寻找解决方案,我需要继续前进.

Mar*_*ich 8

我们已经弄清楚了.原因是一个ecryptfs安装的主目录.该mount输出包含以下行:

/home/evgeny/.Private on /home/evgeny type ecryptfs 
Run Code Online (Sandbox Code Playgroud)

这意味着主目录实际上不是根文件系统的一部分(具有必要的suid标志),但它自己的虚拟文件系统默认情况下显然不支持setuid二进制文件.我已经成功地使用具有加密主目录的测试用户重现了该问题.

可以suid使用以下命令将标志添加到ecryptfs:

sudo mount -i -o remount,suid /home/evgeny
Run Code Online (Sandbox Code Playgroud)

我不确定它是多么安全,也不确定如何永久地改变它以便它能够在重新启动后存活下来.

  • 非常好的侦探工作!干得好马丁! (2认同)
  • 非常感谢您的帮助.你统治! (2认同)