8

私はプログラムを持っています、名前はgiverootAccessです。このプログラムは、コマンドライン引数として現在のディレクトリ(giverootAccessが存在する場所)のファイル名を受け取ることができます。次に、ファイルはルートアクセスを取得します。ファイルは、実行可能ファイルまたはシェルスクリプトにすることができます。

問題は、ハッカーがリクエストをbashにリダイレクトすることでrootアクセスを取得できることです。giverootAccessが存在するディレクトリ内のファイルにのみrootアクセスを許可するようにユーザーを制限したいと思います。ハッカーはファイル名を不要なプログラムにリダイレクトして、root権限を取得する可能性があります。

そのため、ファイルの名前ではなく、ファイルを一意に識別するメカニズムが必要です(模倣およびハッキングされる可能性があるため)。iノードはこの目的に使用できますか?

私の計画では、アプリケーションのインストール時に、すべてのファイルのiノードをディレクトリに保存し、誰かがファイル名でgiverootAccessを実行するたびに、ファイル名とそのiノードが保存されているものと一致することを確認します。一致する場合は、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は、ファイル記述子に基づいてファイルに関する情報を判別するために使用されるシステム コールです。ここに記載されています

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 に答える