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

时间:2013-09-21 20:35:36

标签: command-line permissions privileges

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

-rwxrwxr-x 1 user user 8629 Sep 21 13:04 id_demo

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

real uid: 1000 effective uid: 1000

......到目前为止一切顺利。然后我输入一个命令来更改文件的所有者:

sudo chown root:root ./id_demo

ls -l确认所有者已更改为root:

-rwxrwxr-x 1 root root 8629 Sep 21 13:04 id_demo

同样,执行该程序会将real uiduid显示为1000. uid必须为0之后的最后一步是:sudo chmod u+s ./uid_demo但对我来说,他们会留下来作为1000,书中的输出显示为:

real uid: 1000
effective uid: 0

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

更新

id_demo源代码:

#include <stdio.h>

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

更新2 截屏

ss #1

ls -l testuid

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

2 个答案:

答案 0 :(得分:8)

We've figured it out.原因是ecryptfs - 挂载的主目录。 mount输出包含以下行:

/home/evgeny/.Private on /home/evgeny type ecryptfs 

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

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

sudo mount -i -o remount,suid /home/evgeny

我不确定它是多么安全,也不确定如何永久改变它以便它能够在重新启动后继续存在。

答案 1 :(得分:2)

这对我有用:

编译

$ gcc uid_demo.c -o uid_demo

$ ll
total 12
-rwxrwxr-x 1 saml saml 6743 Sep 21 17:05 uid_demo
-rw-rw-r-- 1 saml saml  116 Sep 21 16:58 uid_demo.c

CHOWN

$ sudo chown root:root uid_demo
$ ll
total 12
-rwxrwxr-x 1 root root 6743 Sep 21 17:05 uid_demo
-rw-rw-r-- 1 saml saml  116 Sep 21 16:58 uid_demo.c

CHMOD

$ sudo chmod u+s uid_demo
$ ll
total 12
-rwsrwxr-x 1 root root 6743 Sep 21 17:05 uid_demo
-rw-rw-r-- 1 saml saml  116 Sep 21 16:58 uid_demo.c

运行

$ ./uid_demo 
real uid: 500
effective uid: 0
相关问题