随着类LINUX的操作系统不断地推广,在加上经济危机时期需要缩减IT总体拥有成本,越来越多的中小企业都把自己的重要服务向LINUX系统迁移。借着LINUX系统强大的安全性和较少的成本,架设在LINUX系统上的各种企业服务为这些中小企业提供了更大的发展和更强的竞争力。
但是,在当前网络环境下,随着黑客技术的不断提高,以及黑客数量的不断增加,网络攻击事件也越来越多。LINUX系统的安全性正在一次次地经受着考验,LINUX系统上的安全缺陷也越来越多突现出来。对于那些应用LINUX系统的中小企业来说,如何保护这些服务器上的数据安全正是一个迫在眉急的问题。
由此,许多中小企业都会使用网络防火墙来阻止大部份的网络攻击,但是,一旦某些网络攻击穿透了防火墙,系统上的重要数据就有被攻击者完全控制的危险。因此,在LINUX系统上布置一种基于主机的入侵检测系统是很有必要的。LIDS正是这样的一种基于LINUX内核补丁模式的入侵检测系统。
LIDS全称为LINUX入侵检测系统(Linux Intrusion Detection System),它集成在LINUX内核中,可以用来进一步加强LINUX内核的安全性,为LINUX内核提供一种安全和强制存取控制模式,也可作为防火墙的一种后备保护方式而存在。并以此来保护LINUX系统上的重要目录及文件不被复制、删除,重要的服务不被删除或停止,不能修改系统登录方式等等。本文下面我们就一起来详细了解在LINUX系统下如何应用LIDS。
一、LIDS的主要功能
我们在使用LIDS时,主要使用它的下列主要功能:
1、保护功能:LIDS可以保护硬盘上任何类型的重要文件(例如passwd和shadow等文件)和目录(例如/bin、/sbin、/usr/bin、/usr/sbin、/etc/rc.d等),防止它们被未授权用户(包括ROOT)和未授权的程序所访问和使用。 LIDS还可以保护系统中的重要进程不被终止,启用它的这个功能后,系统上的任何用户包括root也不能杀死进程,而且可以隐藏特定的进程。另外,LIDS还可以防止非法程序的RAW IO 操作,保护硬盘,包括对硬盘的主引导记录(MBR)进行保护等等。
2、检测功能:通过集成在内核中的端口扫描器,LIDS能检测到系统中正在监听的端口,并可以将检测到的内容报告给系统管理员。 LIDS还可以检测到系统上任何违反规则的进程。
3、警报功能:当LIDS检测到有人违反设置的安全规则时, 它就会在控制台上显示相应的警告信息,并将非法的行为细节记录到受LIDS保护的系统日志文件中。 LIDS还可以将日志文件发到我们设定的管理员电子邮箱中,与此同时,LIDS还可以马上关闭非法用户的当前会话。
#p#
LIDS是一个开源免费的LINUX内核补丁包,要想完全使用LIDS,需要到它的官方网站www.lids.org上下载LIDS的内核补丁包和LIDS工具包。但在下载时,一定要保证下载的LIDS补丁包与我们当前所使用的LINUX系统内核版本相一致。LIDS补丁包现在的最新版本是lids-2.2.3rc7-2.6.28.patch,它是针对2.6.28LINUX内核的。LIDS工具包现在的最新版本是lidstools-2.2.7.7。
1、 安装LIDS的内核补丁包
现在以上述最新版本的LIDS内核补丁包为例说明它的安装。首先将下载的LIDS内核补丁包保存到/usr/src目录下,然后以根用户的权限进入字符终端模式。要注意的是,在LINUX系统下的命令是严格区分大小写的。
假设系统内核文件在/usr/src/Linux目录下,通过下列命令安装LIDS内核补丁包:
# cd /usr/src/Linux
# patch p1 < /usr/src/ lids-2.2.3rc7-2.6.28.patch
LIDS内核补丁包安装完成后,接着重新编辑内核:
# make menuconfig
进入内核编译菜单界面后,把有关LIDS的所有项都选中。这样做的目的能让不太熟习内核编译的用户能省去很多不必要的麻烦,何况将所有的LIDS项都选择上也不会占用多少的内核空间,对加入LIDS后的内核性能也不会产生多少的影响。
在选择好要加入到内核中的LIDS项后,就可以通过下列命令重新编译内核:
# make
# make install
完成上述内核编译工作后,一个加入了LIDS的内核就重新编译好了。要使加入了LIDS的新内核工作,必需重新启动系统。
2、安装LIDS的工具包。
现也以LIDS工具包的最新版本作例子说明它的安装。首先把下载的LIDS工具包保存的到/home/用户名(用户名是你系统上登录的用户名)目录中后,按如下方式安装它:
# cd /home/用户名
# tar -zxvf lids-2.2.7.7.tar.gz
# cd lids-2.2.7.7
# ./configure
# make
# make install
这样就会将Lidsadm和Lidsconf这两个工具安装到/sbin/目录中,同时会创建一个/etc/lids的目录,并会在此目录下生成一个默认的配置文件。在使用LIDS前应先用“lidsadm –U”命令更新这个默认的配置文件。
小提示:如果在编译LIDS工具包时出现GCC报LIDSTEXT.h文件不存在的错误提示,就需要修改LIDS工具包安装目录下的MAKEFILE文件,在在其中的CFLAGS选项中加入“-I/usr/src/Linux/include”,然后就可以重新编译了。
3、Lidsadm和Lidsconf工具说明
(1)、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
此命令执行后会返回以下信息:
......
lidsconf -A [-s subject] -o object [-d] [-t from-to] [-i level] -j Accept
lidsconf -D [-s file] [-o file]
lidsconf -E
lidsconf -U
lidsconf -L
lidsconf -P
lidsconf -v
lidsconf -[h/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:禁止一些扩展特性
其它选项:
-d :目标的可执行domain
-i:继承级别
-t:指定从某一时段到某一时段可以进行怎样的操作
-e:扩展列表
#p#
1、LIDS的启用与设置
首先, 要想使LIDS设置的ACLS发挥作用,应在系统引导时把LIDS封装进内核中,这样每次系统启动到最后阶段,此设置会根据我们系统上的/etc/lids/lids.cap文件中的内容来设置全局功能。lids.cap文件中保存的就是我们设置ACLS项。
要想将LIDS封装到内核中,需要在/etc/rc.d/rc.local文件的未尾加入如下的内容:
/sbin/lidsadm –I
另外,在开始使用LIDS前,如果在安装它的补丁包时没有询问我们设置密码,那么还应为它设置一个进入终端会话模式的密码,可以通过如下命令来进行:
# lidsconf -P
这个命令执行后将提示我们输入密码,两次密码输入相同后,系统就会将设置的密码保存到/etc/lids/lids.pw文件中,此密码已通过Ripemd-160加密。
当设置了密码后,如果我们想修改ACLS、Capabilities,或当我们开始LIDS会话时,就需要我们提交此密码。我们也可以在以后再次通过上述命令来修改设定的旧密码,并且,在修改完成后,还需要用以下命令重新更新LIDS的配置文件:(注意:在修改密码时不会提示输入旧密码。)
lidsadm -S -- +RELOAD_CONF
在这里,要特别注意的是,在对LIDS做了任何修改后,都应使用上述命令重新更新LIDS的配置文件,它将重新加载下列所示的配置文件,然后重新启动系统服务使应用改变生效。
/etc/lids/lids.conf #ACLS配置文件
/etc/lids/lids.cap #LIDS capabilities(功能)配置文件
/etc/lids/lids.pw #LIDS密码文件
/etc/lids/lids.net # LIDS邮件警告配置文件 2、 使用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 /some/file -j READONLY
此命令保证一旦LIDS被启用,任何人都不能修改或删除此文件。如果我们在 LIDS的自由会话终端模式下,就可以修改“/some/file”指定的文件,只要此分区不是挂载为只读方式就行。在实际操作时,用实际的文件路径代替“/some/file”。
(2)保护一个目录为只读
# lidsconf -A -o /some/directory -j READONLY
此命令用来保证一旦LIDS被启用,任何人都不能列出或删除此目录及其中的内容。如果我们在LIDS的自由会话终端模式下,我们就可以修改/some/directory目录,只要分区不是挂载为只读方式。例如,我们可以设置/etc/目录为只读方式:
# lidsconf -A -o /etc -j READONLY
这里要特别注意的是:当我们设定/etc目录为只读后,再想挂载文件系统时,我们应该先删除/etc/mtab文件,然后再使用它的一个符号连接/proc/mounts。同时,我们必须修改我们的初始化脚本,使用“-n”选项来设置任何mount和umount命令。这个选项告诉mount和umount不更新/etc/mtab文件。例如,如果我们发现在初始化脚本中有一行:mount -av -t nonfs,nproc的项,应将它改为:mount -av -n -t nonfs,nproc。
(3)隐藏任何用户都看不到的目录或文件
# lidsconf -A -o /some/file_or_directory -j DENY
此设置将使任何系统用户甚至root用户都不能访问它。如果设置的是一个目录,那么此目录下的文件、目录都将被隐藏,文件系统也是如此。
(4)指定某些特定的程序以只读方式访问一些非常敏感的文件
比如在系统登录时要访问/etc/shadow文件,我们可以指定某些程序能在系统认证时使用它,这些程序包括login、ssh、su和vlock等。例如,我们可以只允许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
或者在LIDS_GLOBAL被禁止时启用此服务。
(6)在LIDS启用时,保证X Windows系统能工作
X server必须使用LIDS的CAP_SYS_RAWIO功能后,才能在LIDS启用时工作。通过下列所示命令达到此目的:
# lidsconf -A -s /path/to /your/x-server -o CAP_SYS_RAWIO -j GRANT
(7)为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
(8)设置访问时间限制
例如,有时只允许用户从早上8:00到下午6:00这段时间能登录系统,就可以用下列命令来完成:
# lidsconf -A -s /bin/login -o /etc/shadow -t 0800-1800 -j READONLY
我们也可以在“-t”选项中使用“!”参数,它的意思就是指除指定时间外所有时间都能做某项工作。
(9)通过网络发送安全警报
要实现LIDS的警报功能,我们可以在/etc/lids/lids.net文件中指定通过网络发送安全警报的接收邮箱。要特别要注意的是:在指定电子邮箱的地址时,应当确保E-Mail地址的前后不能有空格,同时,在修改完后必须重新加载LIDS的配置文件。
LIDS是LINUX系统下一个非常强大的入侵检测系统,它的功能非常多,由于篇幅的限制,在本文中不能将它的所有功能全部描述出来,它们也只能靠读者自己慢慢去摸索了。
当然,有些读者可能趋向于使用功能更加强大的SNORT或其它主机型入侵检测防御系统。但是,对于一般的LINUX服务器,通过LIDS完全可以满足保护系统安全的绝大多数要求。做此文的目的也是希望能给哪些正在为如何解决LINUX系统安全的用户有所帮助。
【编辑推荐】