создание файла в /proc (доступно только на чтение для процесса с UID<1000)

Модератор: Модераторы разделов

Аватара пользователя
Chet
Сообщения: 18
ОС: Red Hat Linux

создание файла в /proc

Сообщение Chet »

Привет! Подскажите плиз с прогой.
С помощью функции create_proc_read_entry("hello_world", 0, NULL, hello_read_proc, NULL) я создаю файл в директории /proc. Второй параметр, насколько я знаю, задаёт права доступа.
Вопрос: как сделать, так чтобы файл мог читать только процесс с UID < 1000 ?
Спасибо сказали:
Аватара пользователя
Chet
Сообщения: 18
ОС: Red Hat Linux

Re: создание файла в /proc

Сообщение Chet »

это как-то делается с помощью функции module_permission :g:
Спасибо сказали:
d_n_k
Сообщения: 636
ОС: Gentoo GNU/Linux

Re: создание файла в /proc

Сообщение d_n_k »

такое сделать нельзя, файл имеет права владелец:группа:остальные

почитай про права доступа к файлам.

сделай группу имеющие права на чтение файла.
все нуждающиеся в чтении файла заносятся в эту группу.
все сказанное есть имхо...
Спасибо сказали:
Аватара пользователя
cy6erGn0m
Сообщения: 119
ОС: MandrivaLinux/Solaris 10

Re: создание файла в /proc

Сообщение cy6erGn0m »

А это в каком контексте? это в контексте ядра или из userspace?? если из ядра, то при открытии файла можно узнать uid и зарубить негодяя. Про userspace не могу сказать.
I want to Believe!

They must find it difficult...
Those who have taken authority as the truth,
Rather than trusth as the authority.
/G.Messey/
Спасибо сказали:
Аватара пользователя
cy6erGn0m
Сообщения: 119
ОС: MandrivaLinux/Solaris 10

Re: создание файла в /proc

Сообщение cy6erGn0m »

вот тупой пример:

Код: Выделить всё

#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/module.h>

#include <linux/proc_fs.h>
#include <linux/sched.h>

MODULE_DESCRIPTION("My kernel module");
MODULE_AUTHOR("cy6ergn0m (**********************)");
MODULE_LICENSE("$LICENSE$");

const char* test_string = "test it from kernel\n";
int test_read_proc( char* buff, char** start, off_t offset, int count, int *eof, void* data ) {
  if( current->uid >= 1000 )
          return -EPERM;
  *eof = 1;
  sprintf( buff, "%s", test_string );
  return strlen( test_string ) + 1;
};

static int test_procfs_init_module(void) {
        printk( KERN_DEBUG "Module test_procfs init\n" );
        create_proc_read_entry( "test_pfs", 0, 0, test_read_proc, 0 );
        return 0;
};
.............................


Код: Выделить всё

cy6ergn0m@d-espb04-126-197 ~ $ cat /proc/test_pfs
cat: /proc/test_pfs: Операция не позволяется
cy6ergn0m@d-espb04-126-197 ~ $ su
Пароль:
[root@d-espb04-126-197 cy6ergn0m]# cat /proc/test_pfs
test it from kernel
[root@d-espb04-126-197 cy6ergn0m]#


Однако, на мой взгляд задача поставлена странно. Непонятно зачем такое надо. Фиксированный UID вызывает подозрения.. что за магические числа такие.. непорядок это.
I want to Believe!

They must find it difficult...
Those who have taken authority as the truth,
Rather than trusth as the authority.
/G.Messey/
Спасибо сказали: