Я хочу научиться писать модуль безопасности Linux, чтобы отрицать удаление файла. Связано с отключением. Поэтому я выбрал один из них и попытался зацепить это, чтобы увидеть, как и если это работает.
Я хочу научиться писать модуль безопасности Linux, чтобы отрицать удаление файла. Связано с отключением. Поэтому я выбрал один из них и попытался зацепить это, чтобы увидеть, как и если это работает.[code]#include #include #include #include
static int hello_lsm_inode_unlink(struct inode *dir, struct dentry *dentry) { pr_info("LSM Hello World: Preventing unlink for file: %s\n", dentry->d_name.name); return -EPERM; // Prevent the file from being deleted }
MODULE_LICENSE("GPL"); MODULE_AUTHOR("You"); MODULE_DESCRIPTION("Minimal LSM with inode_unlink hook"); < /code> и Makefile: < /p> EXTRA_CFLAGS += -DCONFIG_SECURITY_WRITABLE_HOOKS
obj-m := lsm_hello.o
all: make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean: make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean < /code> Но когда я скомпилируюсь, я получаю эти ошибки, а файл .ko не генерируется: < /p> make[1]: Entering directory '/usr/src/linux-headers-6.1.0-31-amd64' CC [M] /root/lsm_hello/lsm_hello.o MODPOST /root/lsm_hello/Module.symvers ERROR: modpost: "security_add_hooks" [/root/lsm_hello/lsm_hello.ko] undefined! ERROR: modpost: "security_hook_heads" [/root/lsm_hello/lsm_hello.ko] undefined! make[2]: *** [/usr/src/linux-headers-6.1.0-31-common/scripts/Makefile.modpost:127: /root/lsm_hello/Module.symvers] Error 1 make[1]: *** [/usr/src/linux-headers-6.1.0-31-common/Makefile:1986: modpost] Error 2 make[1]: Leaving directory '/usr/src/linux-headers-6.1.0-31-amd64' make: *** [Makefile:6: all] Error 2 < /code> С некоторой пробной и ошибкой я обнаружил, что проблема возникает из этой строки: < /p> security_add_hooks(hello_hooks, ARRAY_SIZE(hello_hooks), "lsm_hello"); < /code> Если я прокомментирую это, то он собирается хорошо, и я могу проверить, что он работает: < /p> root@debian:~/lsm_hello# insmod lsm_hello.ko root@debian:~/lsm_hello# rmmod lsm_hello root@debian:~/lsm_hello# journalctl --since "1 hour ago" | grep kernel. Mar 16 15:21:33 debian kernel: LSM Hello World: Initializing Mar 16 15:21:46 debian kernel: LSM Hello World: Exiting [/code] Какой правильный способ написания этого, так как кажется, что правильный способ отличается от версии до версии?