当前位置:Linux教程 - Linux资讯 - LIDS精通与进阶(下)

LIDS精通与进阶(下)

  作者:[email protected] 七、LIDS在内核中的安全级别     一些时候,我们需要改变保护系统的配置。那样我们该怎么做呢?LIDS给我们提供了两种方法。     我们可以重新启动系统,在LILO:里键入security=0.     我们可以在用lidsadm –S中用密码来转换安全级别。     1、在内核中的两个安全级别     LIDS在内核中定义了两个安全级别,安全的security和无安全的none_security.默认情况下,是设置成安全的级别。如果你需要改变它。就在启动的时候键入security=0.     在内核中有一个全局变量lids_load。它表明是否lids的安全变量security被开启。它默认是1。如果在系统启动的时候在LILO:键入security=0 ,所有的LIDS的保护都会失效,就象那些没有LIDS保护的系统一样。 /* variant defined in fs/lids.c */ int lids_reload_conf=0; int lids_load=0; /* it is raised to 1 when kernel boot */ int lids_local_on=1; int lids_local_pid=0; /* in init/main.c */ #ifdef CONFIG_LIDS /* * lids_setup , read lids info from the kernel. */ static void __init lids_setup(char *str, int *ints) { if (ints[0] > 0 && ints[1] >= 0) ====> _lids_load= ints[1]; } #endif .... /* init the LIDS when the system bootup up */ static void __init do_basic_setup(void) { ...... /* Mount the root filesystem.. */ mount_root(); #ifdef CONFIG_LIDS /* init the ids file system */ ---> lids_load=_lids_load; lids_local_on=_lids_load; lids_flags=lids_load * (LIDS_FLAGS_LIDS_ON LIDS_FLAGS_LIDS_LOCAL_ON); ===> printk("Linux Intrusion Detection System %s n",lids_load==1?"starts":"stops"); init_vfs_security(); #endif ...... }     在系统启动的时候,你可以看到”Linux Intrusion Detection System 0.9 starts”,表明LIDS的保护开启了。当保护停止的时候,你可以看到”Linux Intrusion Detection System 0.9 stops”。这里的0.9是当前的LIDS版本号。     2、用lidsadm来改变系统安全级别     一些时候,有也可以在线的时候改变你的安全级别,你必须把CONFIG_LIDS_ALLOW_SWITCH功能开启。并且在编译前配置内核的时候提供一个RipeMD-160 encrypted passWord 。
[1] [2] [3] 下一页 

    这个密码可以用lidsadm –p 命令来获得     用内核鉴定     用提供的密码,LIDS可以鉴定用户来区分哪个用户可以转换内核的安全级别。     这个功能也要用到lidsadm的-S参数。如。 # /sbin/lidsadm -S -- -LIDS SWITCH Password:xxxxxx #     在输入密码后,我们就可以转换LIDS的安全关闭。     让我们看看内部的编码来了解它是如何工作的, /* in the fs/lids.c lids_proc_locks_sysctl() */ int lids_proc_locks_sysctl(ctl_table *table, int write, strUCt file *filp, void *buffer, size_t *lenp, int conv, int op) { lids_locks_t locks; byte hashcode[RMDsize/8]; char rmd160sig[170]; ....... locks.passwd[sizeof(passwd_t)-1]=0; /* We don't take the risk */ rmd160sig[0]=0; #ifdef CONFIG_LIDS_ALLOW_SWITCH if ((!lids_first_time) (locks.passwd[0])) { RMD((byte *)locks.passwd,hashcode); memset((char *)locks.passwd,'',sizeof(passwd_t)); for (i=0; i sprintf(rmd160sig+2*i,"%02x", hashcode[i]); } if ( ((lids_first_time) && (!locks.passwd[0])) ----------> (!strncmp(rmd160sig,CONFIG_LIDS_RMD160_PASSWD,160)) ) { #else if ((lids_first_time) && (!locks.passwd[0])) { #endif /* Access granted ! */ number_failed=0; if (lids_process_flags(locks.flags)) { cap_bset=locks.cap_bset; lids_security_alert("Changed: cap_bset=0x%x lids_flags=0x%x",cap_t(cap_bset),lids_flags); } lids_first_time=0; } ........ }     在密码检查正确后。Lids_process_flag()就会改变当前的lids标记为关闭状态,然后你就可以在不受保护的系统做你想要做的事情了。你可以看看fs/lids.c的lids_process_flag的代码来了解它。     转换LIDS和LIDA_GLOBAL     如果你把LIDS的保护关闭,你会有两个结果,一,关闭后其它没有被LIDS保护的控制台一样不受保护,二,可以本地的关闭它们,在其它的控制台,所有的系统依然被LIDS保护。它们一样很安全。     这些细节是fs/lids的lids_process_flag()来实现。 八、内核的网络安全
上一页 [1] [2] [3] 下一页 

    用LIDS,你可以用下面的功能来保护你的网络。     1、保护防火墙和路由的规则     如果你的主机包含一些防火墙规则。你可以用LIDS来保护它们。你可以开启CONFIG_LIDS_ALLOW_CHANGE_ROUTESLAI 实现这个功能。你也必须在密封内核的时候关闭CAP_NET_ADMIN。     然后,你也可以允许程序更改路由规则。     让我们来看看保护防火墙规则的代码吧。每一个改变防火墙的请求都会调用内核的ip_setsockopt()函数。 int ip_setsockopt(struct sock *sk, int level, int optname, char *optval, int optlen) { ........ switch(optname) { ....... case IP_FW_DELETE_NUM: case IP_FW_INSERT: case IP_FW_FLUSH: case IP_FW_ZERO: case IP_FW_CHECK: case IP_FW_CREATECHAIN: case IP_FW_DELETECHAIN: case IP_FW_POLICY: #ifdef CONFIG_LIDS_ALLOW_CHANGE_ROUTES if (!(capable(CAP_NET_ADMIN) (current->flags & PF_CHROUTES))) { #else if (!capable(CAP_NET_ADMIN)) { #endif #ifdef CONFIG_LIDS lids_security_alert("CAP_NET_ADMIN violation: try to change IP firewall rules with option %d",optname); #endif return -EACCES; } ........     从上面的代码,我们可以看到如果有人要改变防火墙的规则,你必须把CAP_NET_ADMIN开启,并且你要修改规则的程序必须用routing_changeable来标记。     2、禁止嗅探     这个功能也是在上面的changing_route来实现的。让我们来看看net/core/dev.c的代码。 int dev_ioctl(unsigned int cmd, void *arg) { ........ switch(cmd) { ........ case SIOCSIFMETRIC: case SIOCSIFMTU: case SIOCSIFMAP: case SIOCSIFHWADDR: case SIOCSIFSLAVE: case SIOCADDMULTI: case SIOCDELMULTI: case SIO

(出处:http://www.sheup.com)


上一页 [1] [2] [3] 

    2、禁止嗅探     这个功能也是在上面的changing_route来实现的。让我们来看看net/core/dev.c的代码。 int dev_ioctl(unsigned int cmd, void *arg) { ........ switch(cmd) { ........ case SIOCSIFMETRIC: case SIOCSIFMTU: case SIOCSIFMAP: case SIOCSIFHWADDR: case SIOCSIFSLAVE: case SIOCADDMULTI: case SIOCDELMULTI: case SIO

(出处:http://www.sheup.com)


上一页 [1] [2] [3] [4] 

{ ........ case SIOCSIFMETRIC: case SIOCSIFMTU: case SIOCSIFMAP: case SIOCSIFHWADDR: case SIOCSIFSLAVE: case SIOCADDMULTI: case SIOCDELMULTI: case SIO

(出处:http://www.sheup.com/)


上一页 [1] [2] [3] [4] [5]