LIDS精通与进阶–四、保护重要进程

  冰块 进程是操作系统的动态入口。内核里有两个特殊进程,进程ID 0 (swapd) 和进程ID 1(init)。Init进程是在系统启动的时候所有进程的父进程。1、不可杀死的进程。就象你可以看到是否有人要夺得root特权一样,我们可以很容易的杀死那些该内核发送特别信号的进程。为了杀死一个进程,,你必须得到进程的ID,然后用kill命令来杀死它。系统杀死进程的调用是kill,是在内核里的sys_kill()命令里的调用。让我们看看LIDS的保护代码在/usr/src/linux/kernel/signal.c里asmlinkage intsys_kill(int pid, int sig){struct siginfo info;#ifdef CONFIG_LIDS_INIT_CHILDREN_LOCK pid_t this_pid;int i; #ifdef CONFIG_LIDS_ALLOW_KILL_INIT_CHILDREN if (!(current->flags & PF_KILLINITC)) #endif if (lids_load && lids_local_load && LIDS_FISSET(lids_flags,LIDS_FLAGS_LOCK_INIT_CHILDREN)) {this_pid = pid>0?pid:-pid;for(i=0;i= 0) {#ifdef CONFIG_LIDS_HIDE_PROCif (lids_search_proc_to_hide(dentry->d_inode))current->flags |= PF_HIDDEN;…因为每一个linux的进程都有一个在/proc文件系统的入口,我们为了隐藏进程也需要修改proc的文件入口。在fs/proc/root.c static struct dentry *proc_root_lookup(struct inode * dir, struct dentry * dentry){…inode = NULL;#ifdef CONFIG_LIDS_HIDE_PROCif ( pid && p && (! ((p->flags & PF_HIDDEN) && lids_load && lids_local_load)) ) {#elseif (pid && p) {#endifunsigned long ino = (pid >> 16) + PROC_PID_INO;inode = proc_get_inode(dir->i_sb, ino, &proc_pid);if (!inode)return ERR_PTR(-EINVAL);inode->i_flags|=S_IMMUTABLE;}…}然后如果进程被PF_HIDDEN标记,它就不会在proc文件系统里显示。 相信成功的信念比成功本身更重要,

LIDS精通与进阶–四、保护重要进程

相关文章:

你感兴趣的文章:

标签云: