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

-
- Сообщения: 636
- ОС: Gentoo GNU/Linux
Re: создание файла в /proc
такое сделать нельзя, файл имеет права владелец:группа:остальные
почитай про права доступа к файлам.
сделай группу имеющие права на чтение файла.
все нуждающиеся в чтении файла заносятся в эту группу.
почитай про права доступа к файлам.
сделай группу имеющие права на чтение файла.
все нуждающиеся в чтении файла заносятся в эту группу.
все сказанное есть имхо...
-
- Сообщения: 119
- ОС: MandrivaLinux/Solaris 10
Re: создание файла в /proc
А это в каком контексте? это в контексте ядра или из 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/
They must find it difficult...
Those who have taken authority as the truth,
Rather than trusth as the authority.
/G.Messey/
-
- Сообщения: 119
- ОС: MandrivaLinux/Solaris 10
Re: создание файла в /proc
вот тупой пример:
Однако, на мой взгляд задача поставлена странно. Непонятно зачем такое надо. Фиксированный UID вызывает подозрения.. что за магические числа такие.. непорядок это.
Код: Выделить всё
#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/
They must find it difficult...
Those who have taken authority as the truth,
Rather than trusth as the authority.
/G.Messey/