我有一个由具有访问权限superuser.cpp
的超级用户创建的文件770
。现在,超级用户创建一个文件setuidDemonstration.cpp
,其中使用open("superuser.cpp", O_RDONLY).
打开superuser.cpp .cpp和setuidDemonstration.cpp的目标文件具有权限rwxrwxr-x
。现在,我的问题是: -
当我运行程序setuidDemonstration时,在普通模式和超级用户模式下都无法打开superuser.cpp。为什么?至少,超级用户模式应该已经成功打开它。
现在,我做sudo chmod 4775 setuidDemonstration
。这应该允许程序打开superuser.cpp,即使在正常模式下也是如此,因为在执行sudo chmod 4775 setuidDemonstration
时已经设置了setuid位,因此在执行期间它会获得超级用户的euid。但它不可能。此外,当我从普通模式运行euid时,它打印1000
而不是0
。为什么呢?
更新: 谢谢你指出了这个错误。我已从文件路径中删除了“/”,现在它对超级用户起作用了。但即使现在sudo chmod 4775 setuidDemonstration后,正常模式运行程序falis打开文件。请解释一下。
答案 0 :(得分:0)
因为/superuser.cpp
是文件系统根目录中文件的名称,而不是当前工作目录中的名称。如果文件与运行程序时的路径相同,请使用superuser.cpp
或./superuser.cpp
。