8

我有程序,说名称 giverootAccess。该程序可以接收当前目录(giverootAccess 所在的目录)中的文件名作为命令行参数。然后该文件将获得root访问权限。该文件可以是可执行文件或 shell 脚本。

现在的问题是,黑客可以通过将请求重定向到 bash 来获得 root 访问权限。我想限制用户仅对 giverootAccess 所在目录内的那些文件授予 root 访问权限。黑客可以将文件名重定向到不需要的程序,从而获得 root 权限。

所以我需要一种机制来唯一地识别文件,而不是通过它的名称(因为它可以被模仿和黑客攻击)。inode 是否可以用于此目的?

我的计划是,当应用程序安装时,我会将所有文件的 inode 存储在目录中,每当有人使用文件名运行 giverootAccess 时,我将检查文件名及其 inode 是否与存储的文件匹配。如果匹配,则只有 giverootAccess 程序实际授予该文件的 root 访问权限。

您还有其他简单的机制来完成这项工作吗?

4

3 回答 3

10

您可以使用文件描述符来获取 inode 编号,使用以下代码:

int fd, inode;  
fd = open("/path/to/your/file", YOUR_DESIRED_OPEN_MODE);

if (fd < 0) {  
    // some error occurred while opening the file  
    // use [perror("Error opening the file");] to get error description
}  

struct stat file_stat;  
int ret;  
ret = fstat (fd, &file_stat);  
if (ret < 0) {  
   // error getting file stat  
} 

inode = file_stat.st_ino;  // inode now contains inode number of the file with descriptor fd  

// Use your inode number
// ...

fstat是一个系统调用,用于根据文件描述符确定有关文件的信息。描述here

stat是一个包含文件元信息的结构,此处描述
了使用 stat 结构和 fstat 系统调用,您应该将其添加#include <sys/stat.h>到代码中。

于 2016-07-05T06:40:25.730 回答
2

您可以使用 stat 找到文件的 inode 编号:http: //linux.die.net/man/2/stat

于 2012-05-02T21:41:11.183 回答
0

您可以使用 stat() 系统调用找到 inode 编号。但是,如果您使用的是 FAT32 和 NTFS 等非 ext 系统,则 inode 表将动态生成。这意味着 inode 编号可能会发生变化,应用程序不应依赖它。

于 2019-12-15T19:52:28.313 回答