| 您的位置:首页 > 文档 > 网络安全 > |
文章分类热门文章 |
LIDS精通与进阶--三、保护设备创建:2005-11-07 00:00:00 作者:Unlinux 来自: http://www.Unlinux.com 冰块 Linux的设备会在/dev/目录下以文件的形式列出,我们可以用上面保护文件的方法来保护设备。但是在一些情况下,用户也可以用IO操作来旁路文件系统来读写设备,我们必须注意这个问题。 1、设备,内核I/O 在GNU/Linux系统下的设备会以文件的形式表达,所以我们可以用保护文件系统那样来保护设备。 用户的I/O访问是通过系统调用sys_operm和sys_iopl来实现的。你可以看看/usr/src/linux/arch/i386/kernel/ioport.。这个是要基于系统结构的,要是到其他平台,就需要注意它们的变化。 2、如何用LIDS来保护 大多数情况下,程序不需要通过在/dev的设备文件名称来访问设备。但是,一些特殊的程序需要直接访问,如X Server,这个会写到/dev/mem和甚至是I/O设备。我们需要一些额外的东西来保护设备。LIDS会在配置内核的时候来定义这个功能。 CONFIG_LIDS_ALLOW_DEV_MEM,如果你选择了开启这个功能,你就可以允许一些特殊程序来访问/dev/men和/dev/kmen这些内核临界的设备。如果你想要用内核的X Server,选择这个功能就会在配置内核的时候提供整个路径和文件名。 CONFIG_LIDS_ALLOW_RAW_DISKS,如果选择这个开启,你就可以允许一些特殊的程序来访问物理磁盘。 CONFIG_LIDS_ALLOW_IO_PORTS,如果你选择了开启这个功能,你就可以允许一些特殊的程序来访I/O端口。 当系统运行fs/lids.c里的init_vfs_security()的时候初使化就被调用。 #ifdef CONFIG_LIDS_ALLOW_DEV_MEM lids_fill_table(allow_dev_mem,&last_dev_mem,LIDS_MAX_ALLOWED,CONFIG_LIDS_DEV_MEM_PROGS); #endif #ifdef CONFIG_LIDS_ALLOW_RAW_DISKS lids_fill_table(allow_raw_disks,&last_raw_disks,LIDS_MAX_ALLOWED,CONFIG_LIDS_RAW_DISKS_PROGS); #endif #ifdef CONFIG_LIDS_ALLOW_IO_PORTS lids_fill_table(allow_io_ports,&last_io_ports,LIDS_MAX_ALLOWED,CONFIG_LIDS_IO_PORTS_PROGS); #endif 如果一个进程或是程序要直接访问ip端口或是磁盘设备,LIDS就会检查它在数组allow_raw_disk,last_io_ports,等)。这个检查是通过调用lids_check_base()里的lids_search_inode(inode)来实现的。 如,让我们看看CONFIG_LIDS_ALLOW_DEV_MEM /* in lids_search_inode() */ #ifdef CONFIG_LIDS_ALLOW_DEV_MEM for( i = 0 ; i < last_dev_mem ;i++ ) { if ( allow_dev_mem[i].ino == ino && allow_dev_mem[i].dev == dev) { return LIDS_READONLY; } } #endif #ifdef CONFIG_LIDS_ALLOW_RAW_DISKS 在allow_dev_mem包括了哪一个程序结点在系统启动的时候在init_vfs_security()里初使化。用同样的方法,除了一些特殊程序,我们可以保护设备,I/O访问等等。 转载自:http://www.unlinux.com/doc/security/20051107/8516.html 【评论】 【加入收藏夹】 【大 中 小】 【打印】 【关闭】 ※ 相关链接
|