setuid位,但程序无法打开超级用户文件

时间:2013-09-03 18:25:58

标签: c++ unix uid setuid

我有一个由具有访问权限superuser.cpp的超级用户创建的文件770。现在,超级用户创建一个文件setuidDemonstration.cpp,其中使用open("superuser.cpp", O_RDONLY).打开superuser.cpp .cpp和setuidDemonstration.cpp的目标文件具有权限rwxrwxr-x。现在,我的问题是: -

  1. 当我运行程序setuidDemonstration时,在普通模式和超级用户模式下都无法打开superuser.cpp。为什么?至少,超级用户模式应该已经成功打开它。

  2. 现在,我做sudo chmod 4775 setuidDemonstration。这应该允许程序打开superuser.cpp,即使在正常模式下也是如此,因为在执行sudo chmod 4775 setuidDemonstration时已经设置了setuid位,因此在执行期间它会获得超级用户的euid。但它不可能。此外,当我从普通模式运行euid时,它打印1000而不是0。为什么呢?

  3. 更新: 谢谢你指出了这个错误。我已从文件路径中删除了“/”,现在它对超级用户起作用了。但即使现在sudo chmod 4775 setuidDemonstration后,正常模式运行程序falis打开文件。请解释一下。

1 个答案:

答案 0 :(得分:0)

因为/superuser.cpp是文件系统根目录中文件的名称,而不是当前工作目录中的名称。如果文件与运行程序时的路径相同,请使用superuser.cpp./superuser.cpp