LIDS全称为Linux Intrusion Detection System,是一种基于Linux内核补丁模式的检测系统,它也是一种基于主机的检测系统。它集成在Linux内核中,来进一步加强Linux内核的安全性,为Linux内核提供实现一种安全模式、参考模式和强制存取控制模式。
虽然,网络防火墙能够阻止大部份的网络,但这种穿透了防火墙,系统上的重要数据就会有完全控制的危险。因此,在Linux系统上布置LIDS是很有必要的。它能够保证Linux系统上的重要目录及文件不被复制、删除,重要的服务不被删除或停止,不能修改系统登录方式等等,为Linux系统数据安全提供一种全方位的保护。
1. LIDS的主要功能
1).保护硬盘上任何类型的重要文件和目录
如/bin、/sbin、/usr/bin、/usr/sbin、/etc/rc.d等目录和其下的文件,以及系统中的敏感文件,如passwd和shadow文件,防止未被授权者(包括ROOT)和未被授权的程序进入,任何人包括ROOT都无法改变,文件可以隐藏。保护重要进程不被终止,任何人包括root也不能杀死进程,而且可以隐藏特定的进程。
2).检测内核中的端口扫描器,LIDS能检测到扫描并报告系统管理员。
3).当有人违反规则时, LIDS会在控制台显示警告信息,将非法的活动细节记录到受LIDS保护的系统log文件中。
2 配置LIDS
本节涉及到内核编译的知识,请初学者参考:
http://linux.chinaunix.net/techdoc/desktop/2006/05/11/932179.shtml
本次试验以Fedora 14为平台:
①.首先准备内核:
http://www.kernel.org/ 在这里下载kernel 2.6.34.14 源码,将源码包释放到/usr/src
②.下载patch
http://www.lids.jp/develop/lids-2.2.3rc11-2.6.34.patch
管理工具
http://www.lids.jp/wiki/index.php?Development
③.下载lidstools-2.2.7.10
④.Linux内核打LIDS补丁
#patch -p1 ./lids-2.2.3rc11-2.6.34.patch
⑤.编译linux内核
#make menuconfig
执行完上面的命令会打开如图1所示界面,启用LIDS在在内核Security Options选项中,其界面如图2所示。
图 1 在Linux内核中选中Security options选项
图 2 在内核中启用LIDS
设置完毕保存退出
#make ;make install
这样就会将Lidsadm和Lidsconf这两个工具安装到/sbin/目录中,同时会创建一个/etc/lids的目录,并会在此目录下生成一个默认的配置文件.
3.使用Lidsadm工具
Lidsadm是LIDS的管理工具单元,可以用它来管理系统中的LIDS。Lidsadm的作用主要就是启用或停用LIDS,以及封存LIDS到内核中和查看LIDS状态。
使用下列命令可以列出Lidsadm的所有可用选项:
# lidsadm -h
此命令会返回下列信息:
......
lidsadm -[s/I] -- [+/-] [LIDS_FLAG] [...]
lidsadm -v
lidsadm -h
命令参数解释:
-s:开关某些保护选项时指示应提交密码
-I:开关某些保护选项时不提交密码
LIDS_FLAG:为Lidsadm的标志值
-v:显示版本
-V:查看现在LIDS状态
-h:列出所有选项
Lidsadm常用的部分主要功能模块:
CAP_CHOWN: 修改目录或文件的属主和组
CAP_NET_BROADCAST: 监听广播
CAP_NET_ADMIN: 接口、防火墙、路由器改变
CAP_IPC_LOCK: 锁定共享内存
CAP_SYS_MODULE: 插入和移除内核模块
CAP_HIDDEN: 隐藏进程
CAP_SYS_RESOURCE: 设置资源限制
CAP_KILL_PROTECTED: 杀死保护进程
CAP_PROTECTED: 保护进程为单用户方式
Lidsadm可用的标志值(Available flags):
LIDS: 禁止或激活本地LIDS;
LIDS_CLOBAL: 完全禁止或激活LIDS
RELOAD_CONF: 重新加载配置文件
(2)、Lidsconf工具及其选项:
Lidsconf主要用来为LIDS配置访问控制列表(ACLS)和设置密码。
输入以下命令能显示Lidsconf所有的可用选项:
# lidsconf -h
此命令执行返回命令参数解释如下:
-A:增加一条指定的选项到已有的ACL中
-D:删除一条指定的选项
-E:删除所有选项
-U:更新dev/inode序号
-L:列出所有选项
-P:产生用Ripemd-160加密的密码
-V:显示版本
-h:显示帮助
-H:显示更多的帮助
子对像(subject):
-s [--subject]:指定一个子对像,可以为任何程序,但必须是文件。
目标(object):
-o[object]:可以是文件、目录或功能(capabilities)和socket名称。
动作:
-j:它有以下几个参数:
DENY: 禁止访问
READONLY: 只读
APPEND: 增加
WRITE: 可写
GRANT: 对子对像授与能力
Ignore: 对设置的对像忽略所有权限
Disable: 禁止一些扩展特性
4.使用LIDS来保护系统
在使用LIDS保护的Linux的系统中,可以通过一个LIDS的自由会话终端模式来修改那些已经加入到保护中的数据,所有的LIDS设置工作也可在这个自由会话终端中进行。
使用如下命令打开一个LIDS终端会话:
#lidsadm -S -- -LIDS
在按提示输入密码后,就建立了一个LIDS自由会话终端,在此终端我们就可以启用、停用LIDS和退出此终端。此时,Linux系统中的任何数据都是不受LIDS保护的。在完成对文件或数据的修改后,我们应当通过如下命令重新启用LIDS:
#lidsadm -S -- +LIDS
另外要清楚的是,在一个增加了LIDS功能的Linux系统中,一个名为/etc/lids/lids.cap的文件中包括了所有的功能描述列表。每一个功能项前通过使用“+”号来启用此功能,使用“-”号来禁用此功能,完成设置后我们必须重新加载它的配置文件才能使修改生效。
下面我们就通过运用这些功能项,来对系统中要保护的重要数据进行安全设置:
(1)保护某个文件为只读
#lidsconf -A -o /sbin/ps -j READONLY
此命令保证一旦LIDS被启用,任何人都不能修改或删除此文件。
(2)保护一个目录为只读
#lidsconf -A -o /usr/bin -j READONLY
此命令用来保证一旦LIDS被启用,任何人都不能列出或删除此目录及其中的内容。
# lidsconf -A -o /etc -j READONLY
(3)隐藏任何用户都看不到的目录或文件
#lidsconf -A -o /home/userdir -j DENY
此设置将使任何系统用户甚至root用户都不能访问它。如果设置的是一个目录,那么此目录下的文件、目录都将被隐藏。
(4)指定某些特定的程序以只读方式访问一些非常敏感的文件
比如在系统登录时要访问/etc/shadow文件,我们可以指定某些程序能在系统认证时使用它,这些程序包括login、ssh、su等。例如,我们可以只允许login以只读方式访问/etc/shadow文件:
#lidsconf -A -s /bin/login -o /etc/shadow -j READONLY
(5)以根用户身份指定一个服务在指定的端口上运行
要想指定服务在1024及以下端口上运行需要LIDS的CAP_NET_BIND_SERVICE功能。如果我们在/etc/lids/lids.cap文件中没有启用此功能,那么就不能以根用户身份启动任何一个服务运行在指定的端口上。我们可以通过下列命令来授权某个程序有此功能:
#lidsconf -A -s /usr/local/bin/apache -o CAP_NET_BIND_SERVICE 80 -J GRANT
(6)为ssh和scp的远程连接指定端口
要为ssh和scp的远程连接指定端口,就需要LIDS的CAP_NET_BIND_SERVICE功能。我们可以通过下列命令将CAP_NET_BIN_SERVICE功能指定的端口授权给ssh:
#lidsconf -A -s /usr/bin/ssh -o CAP_NET_BIN_SERVICE 22 -J GRANT
最后,对LIDS技术感兴趣的读者可以参考《LIDS精通与进阶》的文档,文中写的非常详细。
参考文献:
- LIDS精通与进阶 http://www.yesky.com/346/191346_1.shtml