我有程序,比如名字giverootAccess。该程序可以在当前目录(giverootAccess所在的位置)中接收文件名作为命令行参数。然后该文件将获得root访问权限。该文件可以是可执行文件或shell脚本。
现在的问题是,黑客可以通过将请求重定向到bash来获得root访问权限。我想限制用户只对giverootAccess所在目录中的那些文件提供root访问权限。黑客可以将文件名重定向到不需要的程序,从而获得root权限。
所以我需要一种机制来唯一地识别文件,而不是它的名字(因为它可以被模仿和黑客攻击)。 inode可以用于此目的吗?
我的计划是,当应用程序安装时,我将存储目录中所有文件的inode,每当有人运行带有文件名的giverootAccess时,我将检查文件名及其inode与存储的匹配。如果匹配,那么只有giverootAccess程序实际上提供对该文件的root访问权。
你有没有其他简单的机制来完成这项工作?
答案 0 :(得分:6)
您可以使用文件描述符来获取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 是一种包含文件元信息的结构,并说明here
使用stat结构和fstat系统调用,您应该在代码中添加#include <sys/stat.h>
。
答案 1 :(得分:2)
您可以使用stat:http://linux.die.net/man/2/stat
找到文件的inode编号答案 2 :(得分:0)
您可以使用stat()系统调用找到索引节点号。但是,如果您使用的是FAT32和NTFS之类的非ext系统,则将动态生成inode表。这意味着索引节点号可能会更改,应用程序不应依赖它。