найти номер индекса файла, используя код C - PullRequest
5 голосов
/ 28 февраля 2012

У меня есть программа, произнесите имя giverootAccess.Эта программа может получить имя файла в текущем каталоге (где находится giverootAccess) в качестве аргумента командной строки.Тогда файл получит root-доступ.Файл может быть исполняемым или сценарием оболочки.

Теперь проблема в том, что хакер может получить root-доступ, перенаправив запрос на bash.Я хочу ограничить доступ пользователя root только к тем файлам внутри каталога, в котором находится giverootAccess.хакер может перенаправить имя файла в нежелательные программы и, следовательно, получить разрешение root.

Поэтому мне нужен механизм, позволяющий однозначно идентифицировать файл, а не по его имени (так как он может быть подделан и взломан).Может ли inode использоваться для этой цели?

Мой план заключается в том, что при установке приложения я буду хранить иноды всех файлов в каталоге, и всякий раз, когда кто-нибудь запускает GiverootAccess с именем файла, я проверяю имя файла и его иноды совпадают схранится один.В случае совпадения только программа giverootAccess фактически предоставляет root-доступ к файлу.

Есть ли у вас какой-либо другой простой механизм для выполнения этой работы?

Ответы [ 2 ]

6 голосов
/ 05 июля 2016

Вы можете использовать дескриптор файла, чтобы получить номер индекса, используйте этот код:

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 - это структура, которая содержит метаинформацию файла и описана здесь
Чтобы использовать статистическую структуру и системный вызов fstat , вы должны добавить #include <sys/stat.h> к вашему коду.

2 голосов
/ 03 мая 2012

Вы можете найти номер индекса файла, используя stat: http://linux.die.net/man/2/stat

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...