load_config
This commit is contained in:
parent
80199319f0
commit
e9aa7a1e62
|
|
@ -20,7 +20,10 @@
|
||||||
"signal_handlers.h": "c",
|
"signal_handlers.h": "c",
|
||||||
"terminal_utils.h": "c",
|
"terminal_utils.h": "c",
|
||||||
"stdlib.h": "c",
|
"stdlib.h": "c",
|
||||||
"init_cleanup.h": "c"
|
"init_cleanup.h": "c",
|
||||||
|
"stdbool.h": "c",
|
||||||
|
"stat.h": "c",
|
||||||
|
"debug.h": "c"
|
||||||
},
|
},
|
||||||
"C_Cpp.errorSquiggles": "disabled"
|
"C_Cpp.errorSquiggles": "disabled"
|
||||||
}
|
}
|
||||||
BIN
build/config.o
BIN
build/config.o
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -1,73 +0,0 @@
|
||||||
[Thu Apr 10 10:26:49 2025
|
|
||||||
] Command: /usr/bin/lesspipe
|
|
||||||
arg[0]: lesspipe
|
|
||||||
[Thu Apr 10 10:26:49 2025
|
|
||||||
] Command: /usr/bin/dircolors
|
|
||||||
arg[0]: dircolors
|
|
||||||
arg[1]: -b
|
|
||||||
[Thu Apr 10 10:26:50 2025
|
|
||||||
] Command: /usr/bin/ls
|
|
||||||
arg[0]: ls
|
|
||||||
arg[1]: --color=auto
|
|
||||||
arg[2]: -CF
|
|
||||||
[Thu Apr 10 10:26:55 2025
|
|
||||||
] Command: /usr/bin/ls
|
|
||||||
arg[0]: ls
|
|
||||||
arg[1]: --color=auto
|
|
||||||
[Thu Apr 10 10:27:07 2025
|
|
||||||
] Command: /usr/bin/lesspipe
|
|
||||||
arg[0]: lesspipe
|
|
||||||
[Thu Apr 10 10:27:07 2025
|
|
||||||
] Command: /usr/bin/dircolors
|
|
||||||
arg[0]: dircolors
|
|
||||||
arg[1]: -b
|
|
||||||
[Thu Apr 10 10:27:09 2025
|
|
||||||
] Command: /usr/bin/ls
|
|
||||||
arg[0]: ls
|
|
||||||
arg[1]: --color=auto
|
|
||||||
arg[2]: -CF
|
|
||||||
[Thu Apr 10 10:39:27 2025
|
|
||||||
] Command: /bin/lesspipe
|
|
||||||
arg[0]: lesspipe
|
|
||||||
[Thu Apr 10 10:39:27 2025
|
|
||||||
] Command: /bin/dircolors
|
|
||||||
arg[0]: dircolors
|
|
||||||
arg[1]: -b
|
|
||||||
[Thu Apr 10 10:39:28 2025
|
|
||||||
] Command: /bin/ls
|
|
||||||
arg[0]: ls
|
|
||||||
arg[1]: --color=auto
|
|
||||||
arg[2]: -CF
|
|
||||||
[Thu Apr 10 10:39:41 2025
|
|
||||||
] Command: /usr/lib/command-not-found
|
|
||||||
arg[0]: /usr/lib/command-not-found
|
|
||||||
arg[1]: --
|
|
||||||
arg[2]: nvidia-smi
|
|
||||||
[Thu Apr 10 10:40:28 2025
|
|
||||||
] Command: /bin/lesspipe
|
|
||||||
arg[0]: lesspipe
|
|
||||||
[Thu Apr 10 10:40:28 2025
|
|
||||||
] Command: /bin/dircolors
|
|
||||||
arg[0]: dircolors
|
|
||||||
arg[1]: -b
|
|
||||||
[Thu Apr 10 10:40:29 2025
|
|
||||||
] Command: /bin/ls
|
|
||||||
arg[0]: ls
|
|
||||||
arg[1]: --color=auto
|
|
||||||
arg[2]: -CF
|
|
||||||
[Thu Apr 10 10:43:39 2025
|
|
||||||
] Command: /bin/ls
|
|
||||||
arg[0]: ls
|
|
||||||
arg[1]: --color=auto
|
|
||||||
[Thu Apr 10 10:45:00 2025
|
|
||||||
] Command: /bin/lesspipe
|
|
||||||
arg[0]: lesspipe
|
|
||||||
[Thu Apr 10 10:45:00 2025
|
|
||||||
] Command: /bin/dircolors
|
|
||||||
arg[0]: dircolors
|
|
||||||
arg[1]: -b
|
|
||||||
[Thu Apr 10 10:45:01 2025
|
|
||||||
] Command: /bin/ls
|
|
||||||
arg[0]: ls
|
|
||||||
arg[1]: --color=auto
|
|
||||||
arg[2]: -CF
|
|
||||||
|
|
@ -1,21 +0,0 @@
|
||||||
[DEBUG][PID 12935] src/pty_dup.c:43:dupIO(): forkpty result is: 0.
|
|
||||||
[DEBUG][PID 12935] src/pty_dup.c:50:dupIO(): Child process ready.
|
|
||||||
Makefile README.md [0m[01;34mbuild[0m/ [01;34mconfig[0m/ [01;34mlogs[0m/ output.txt [01;34msrc[0m/ [01;32mtest_bash.sh[0m* [01;34mtests[0m/
|
|
||||||
[DEBUG][PID 13023] src/pty_dup.c:43:dupIO(): forkpty result is: 0.
|
|
||||||
[DEBUG][PID 13023] src/pty_dup.c:50:dupIO(): Child process ready.
|
|
||||||
Makefile README.md [0m[01;34mbuild[0m [01;34mconfig[0m [01;34mlogs[0m output.txt [01;34msrc[0m [01;32mtest_bash.sh[0m [01;34mtests[0m
|
|
||||||
[DEBUG][PID 13349] src/pty_dup.c:43:dupIO(): forkpty result is: 0.
|
|
||||||
[DEBUG][PID 13349] src/pty_dup.c:50:dupIO(): Child process ready.
|
|
||||||
Makefile README.md [0m[01;34mbuild[0m/ [01;34mconfig[0m/ [01;34mlogs[0m/ output.txt [01;34msrc[0m/ [01;32mtest_bash.sh[0m* [01;34mtests[0m/
|
|
||||||
[DEBUG][PID 26525] src/pty_dup.c:43:dupIO(): forkpty result is: 0.
|
|
||||||
[DEBUG][PID 26525] src/pty_dup.c:50:dupIO(): Child process ready.
|
|
||||||
Makefile README.md [0m[01;34mbuild[0m/ [01;34mconfig[0m/ [01;34mlogs[0m/ output.txt [01;34msrc[0m/ [01;32mtest_bash.sh[0m* [01;34mtests[0m/
|
|
||||||
[DEBUG][PID 27494] src/pty_dup.c:43:dupIO(): forkpty result is: 0.
|
|
||||||
[DEBUG][PID 27494] src/pty_dup.c:50:dupIO(): Child process ready.
|
|
||||||
Makefile README.md [0m[01;34mbuild[0m/ [01;34mconfig[0m/ [01;34mlogs[0m/ output.txt [01;34msrc[0m/ [01;32mtest_bash.sh[0m* [01;34mtests[0m/
|
|
||||||
[DEBUG][PID 30654] src/pty_dup.c:43:dupIO(): forkpty result is: 0.
|
|
||||||
[DEBUG][PID 30654] src/pty_dup.c:50:dupIO(): Child process ready.
|
|
||||||
Makefile README.md [0m[01;34mbuild[0m [01;34mconfig[0m [01;34mlogs[0m output.txt [01;34msrc[0m [01;32mtest_bash.sh[0m [01;34mtests[0m
|
|
||||||
[DEBUG][PID 32199] src/pty_dup.c:43:dupIO(): forkpty result is: 0.
|
|
||||||
[DEBUG][PID 32199] src/pty_dup.c:50:dupIO(): Child process ready.
|
|
||||||
Makefile README.md [0m[01;34mbuild[0m/ [01;34mconfig[0m/ [01;34mlogs[0m/ output.txt [01;34msrc[0m/ [01;32mtest_bash.sh[0m* [01;34mtests[0m/
|
|
||||||
40
src/config.c
40
src/config.c
|
|
@ -8,31 +8,29 @@
|
||||||
|
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
|
|
||||||
// Global variables (defined in execve_interceptor.c)
|
ConfigData *load_config() {
|
||||||
extern ConfigData *shared_config;
|
ConfigData *shared_config;
|
||||||
extern int shm_id;
|
// First load, attach to shared memory in read-only mode
|
||||||
|
DEBUG_LOG("Attaching to shared memory for config data");
|
||||||
|
|
||||||
void load_config_if_needed() {
|
// 不指定大小,让shmget自动获取已存在的共享内存段大小
|
||||||
if (shared_config == NULL) {
|
int shm_id = shmget(SHM_KEY, SHM_SIZE, 0); // 把size参数设为0
|
||||||
// First load, attach to shared memory
|
|
||||||
DEBUG_LOG("Attaching to shared memory for config data");
|
|
||||||
shm_id = shmget(SHM_KEY, sizeof(ConfigData), 0644);
|
|
||||||
|
|
||||||
DEBUG_LOG("shm_id is: %d", shm_id);
|
DEBUG_LOG("shm_id is: %d", shm_id);
|
||||||
|
|
||||||
if (shm_id == -1) {
|
if (shm_id == -1) {
|
||||||
perror("shmget failed");
|
perror("shmget failed");
|
||||||
return;
|
return NULL;
|
||||||
}
|
|
||||||
|
|
||||||
shared_config = (ConfigData *)shmat(shm_id, NULL, 0);
|
|
||||||
if (shared_config == (void *)-1) {
|
|
||||||
perror("shmat failed");
|
|
||||||
shared_config = NULL;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
DEBUG_LOG("Successfully attached to shared memory");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
shared_config = (ConfigData *)shmat(shm_id, NULL, SHM_RDONLY);
|
||||||
|
if (shared_config == (void *)-1) {
|
||||||
|
perror("shmat failed");
|
||||||
|
DEBUG_LOG("Call shmat failed.");
|
||||||
|
shared_config = NULL;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
DEBUG_LOG("Successfully attached to shared memory");
|
||||||
DEBUG_LOG("Current configuration has %d rules", shared_config->rule_count);
|
DEBUG_LOG("Current configuration has %d rules", shared_config->rule_count);
|
||||||
|
return shared_config;
|
||||||
}
|
}
|
||||||
|
|
@ -3,8 +3,6 @@
|
||||||
|
|
||||||
#include "exec_hook.h"
|
#include "exec_hook.h"
|
||||||
|
|
||||||
int load_config_to_shm();
|
ConfigData *load_config();
|
||||||
int config_file_modified();
|
|
||||||
void load_config_if_needed();
|
|
||||||
|
|
||||||
#endif // CONFIG_H
|
#endif // CONFIG_H
|
||||||
|
|
@ -40,12 +40,7 @@
|
||||||
#define ANSI_COLOR_RESET "\033[0m"
|
#define ANSI_COLOR_RESET "\033[0m"
|
||||||
#define ANSI_COLOR_BLUE "\x1b[34m"
|
#define ANSI_COLOR_BLUE "\x1b[34m"
|
||||||
|
|
||||||
#define SHM_KEY 789357
|
#define SHM_KEY 0x78945
|
||||||
|
#define SHM_SIZE 512 * 1024
|
||||||
// Global variable, pointing to the configuration data in shared memory
|
|
||||||
extern ConfigData *shared_config;
|
|
||||||
extern int shm_id;
|
|
||||||
extern time_t last_modified_time;
|
|
||||||
// extern int is_initialized;
|
|
||||||
|
|
||||||
#endif // EXEC_HOOK_H
|
#endif // EXEC_HOOK_H
|
||||||
|
|
@ -15,12 +15,6 @@
|
||||||
#include "rules.h"
|
#include "rules.h"
|
||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
|
|
||||||
// Global variables (declared in exec_hook.h and defined here)
|
|
||||||
ConfigData *shared_config = NULL;
|
|
||||||
int shm_id = -1;
|
|
||||||
time_t last_modified_time = 0;
|
|
||||||
// int is_initialized = 0;
|
|
||||||
|
|
||||||
#ifdef HOOK
|
#ifdef HOOK
|
||||||
// Original pointer
|
// Original pointer
|
||||||
orig_execve_type orig_execve = NULL;
|
orig_execve_type orig_execve = NULL;
|
||||||
|
|
@ -77,7 +71,8 @@ int enhance_execve(const char *filename, char *const argv[],
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Load configuration (only if needed)
|
// Load configuration (only if needed)
|
||||||
load_config_if_needed();
|
ConfigData *shared_config;
|
||||||
|
shared_config = load_config();
|
||||||
|
|
||||||
DEBUG_LOG("Loaded done.");
|
DEBUG_LOG("Loaded done.");
|
||||||
|
|
||||||
|
|
@ -117,6 +112,16 @@ int enhance_execve(const char *filename, char *const argv[],
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 如果rule是0,也直接返回
|
||||||
|
if (shared_config->rule_count == 0) {
|
||||||
|
#ifdef HOOK
|
||||||
|
return orig_execve(filename, argv, envp);
|
||||||
|
#else
|
||||||
|
return execve(filename, argv, envp);
|
||||||
|
// return 1;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
write_log(filename, argv);
|
write_log(filename, argv);
|
||||||
|
|
||||||
const char *basename = argv[0];
|
const char *basename = argv[0];
|
||||||
|
|
|
||||||
|
|
@ -5,10 +5,6 @@
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <sys/shm.h>
|
#include <sys/shm.h>
|
||||||
|
|
||||||
// Global variables (defined in execve_interceptor.c)
|
|
||||||
extern ConfigData *shared_config;
|
|
||||||
extern int shm_id;
|
|
||||||
|
|
||||||
// // Constructor, executed when the library is loaded
|
// // Constructor, executed when the library is loaded
|
||||||
// __attribute__((constructor)) static void initialize() {
|
// __attribute__((constructor)) static void initialize() {
|
||||||
// if (is_initialized) return;
|
// if (is_initialized) return;
|
||||||
|
|
@ -24,7 +20,7 @@ __attribute__((destructor)) void cleanup_shared_memory() {
|
||||||
// Log output paths
|
// Log output paths
|
||||||
DEBUG_LOG("Log file: %s", LOG_FILE);
|
DEBUG_LOG("Log file: %s", LOG_FILE);
|
||||||
DEBUG_LOG("Log out file: %s", LOG_OUT_FILE);
|
DEBUG_LOG("Log out file: %s", LOG_OUT_FILE);
|
||||||
DEBUG_LOG("Shared memory ID: %d", shm_id);
|
// DEBUG_LOG("Shared memory ID: %d", shm_id);
|
||||||
// if (shared_config != NULL) {
|
// if (shared_config != NULL) {
|
||||||
// DEBUG_LOG("Cleaning up shared memory.");
|
// DEBUG_LOG("Cleaning up shared memory.");
|
||||||
// // Detach shared memory segment
|
// // Detach shared memory segment
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
#define STRUCT_H
|
#define STRUCT_H
|
||||||
|
|
||||||
#define _GNU_SOURCE
|
#define _GNU_SOURCE
|
||||||
#define MAX_RULES 100
|
#define MAX_RULES 128
|
||||||
#define MAX_ARGS 10
|
#define MAX_ARGS 10
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@
|
||||||
#include <sys/shm.h>
|
#include <sys/shm.h>
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
|
|
||||||
#define SHM_KEY 12345
|
#define SHM_KEY 0x78945
|
||||||
#define MAX_RULES 100
|
#define MAX_RULES 100
|
||||||
#define MAX_ARGS 10
|
#define MAX_ARGS 10
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue