2012-02-28 26 views
3

我有程序,說名字giverootAccess。該程序可以在當前目錄(giverootAccess所在的位置)接收文件名作爲命令行參數。然後該文件將獲得根訪問權限。該文件可以是可執行文件或shell腳本。使用C代碼找到一個文件的inode號碼

現在的問題是,黑客可以通過將請求重定向到bash來獲得root訪問權限。我想限制用戶只對那些giverootAccess所在目錄內的文件提供root權限。黑客可以將文件名重定向到不需要的程序,從而獲得root權限。

所以我需要一個機制來唯一標識一個文件,而不是它的名字(因爲它可以被模仿和黑客入侵)。 inode是否可以用於此目的?

我的計劃是,當應用程序安裝時,我將存儲目錄中所有文件的inode,並且每當有人運行帶文件名的giverootAccess時,我將檢查文件名,其inode與存儲的文件名匹配。如果匹配,那麼只有giverootAccess程序實際上給予root權限的文件。

你有任何其他簡單的機制來完成這項工作嗎?

+0

我正在嘗試做類似的事情。如果你找到答案,請你就此更新我。 – 2012-04-25 11:36:49

+0

「給root訪問權限」是什麼意思?設置'suid'位?你能澄清嗎? – dpp 2012-05-02 21:25:30

回答

4

您可以使用文件描述符來獲得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

統計是一個包含文件的元信息,並描述here
使用stat結構和FSTAT系統調用你應該添加#include <sys/stat.h>到您的代碼的結構。