提升Linux的安全性

发表于:2007-06-23来源:作者:点击数: 标签:
Linux 以 安全 性和稳定性著称,但是Linux的安全性不是与生俱来的,而是配置出来的。高明的管理员不一定能让 Windows 滴水不漏,而蹩脚的管理员却可以让Linux不堪一击。为了提升 Linux系统 的安全性,务必注意以下几个方面。 分区 很多Linux用户,尤其是个人

   

  Linux安全性和稳定性著称,但是Linux的安全性不是与生俱来的,而是配置出来的。高明的管理员不一定能让Windows滴水不漏,而蹩脚的管理员却可以让Linux不堪一击。为了提升Linux系统的安全性,务必注意以下几个方面。

分区

很多Linux用户,尤其是个人用户习惯于为安装Linux准备两个分区:一个/分区,一个Swap分区,这是安装Linux的最低要求,但不是最安全的方案。一般来说,分区较多数据的安全性会高一些,因为当一个分区遭到破坏无法恢复的时候,其它分区的数据可以不受太大的影响。如果将所有的数据和程序文件都放在一个分区上,一旦这个分区出现问题就是灭顶之灾。另外多分几个区还可以预防一些拒绝服务攻击(Dos,Denial Of Service)。比如,/tmp目录对于所有用户而言都是可写的,如果将/tmp目录挂在/分区上,一个恶意用户即便权限非常低也可以通过向/tmp目录中写入大量垃圾数据而撑满/分区,导致系统瘫痪。如果将/tmp挂在一个单独的分区上就可以避免这个问题。/var目录也是一样,这里存放有日志文件,如果它被挂在/分区上,攻击者可以设法让日志文件迅速涨大直至撑爆/分区。这里只是举了两个例子,对于其它的目录也是一样,比如超级用户的root目录中经常会存有重要的文档,单独分区可以大大提高其安全性。

但是,如果按照上面所说的很多的目录都要建立单独的分区。其实可以采用变通的方式,将性质类似的目录链接到一个分区中。比如/var和/tmp都有遭到攻击的可能,则可以建立一个分区存放这两个目录:

ln -s /tmp /new/tmp
ln -s /var /new/var


首先,在/new(这是一个单独的分区)上建立并清理两个目录/new/tmp和/new/var;然后,用符号连接将/tmp、/var链接过来,以后所有对/tmp和/var的读写都会转而指向/usr/tmp、/usr/var。

密码

密码是保证系统安全的第一道防线,但常常因为系统管理员对于“小概率事件”的错误印象变得很脆弱。用单词作密码是根本架不住暴力攻击的。Aclearcase/" target="_blank" >ccessDiver在网络速度非常慢的情况下,仍然可以每分种1万个用户名的速度进行扫描,如果攻击者有足够的耐心,那些为了便于记忆而草草拟定的密码几乎没有一个可以逃过厄运。所以,不设密码是一个不可饶恕的错误,设置一个非常Poor的密码同样是不可饶恕的错误。一个好的密码应当:

◆ 足够长,你的手指头只要多动一下为密码加一位,就可以让攻击者的辛苦增加十倍;

◆ 不要用完整的单词,尽可能包括数字、标点符号和特殊字符等;

◆ 混用大小写字符;

◆ 经常修改。

最后这一点是最容易疏忽的,如果有攻击者盯准了你的机器,而你通常又一个密码使用半年的话,那么即使是一个精心设计的密码也可能被猜到。如果觉得设计一个符合安全性要求的密码很麻烦可以使用工具,比如以下的命令就可以生成一个很好的密码:

head -c 6 /dev/urandom | uuencode - | cat -n | grep 2 | cut -f2 | cut -c 2,3,4,5,,6,7,8,9


Daemons

腹背受敌是兵家大忌,系统安全也是如此,要谨防内盗。安装好Linux后,会有许多毫无用处的后台程序被启动(自作主张是这只企鹅的一个大毛病)。毫不夸张地说,一个Daemons就是一个潜在的漏洞,因为你很难确切地知道它有没有缓冲区溢出的毛病,而Linux下的程序又是源代码公开的,使得发现和利用一个缓冲区溢出漏洞变得相对容易。你惟一可选择的就是尽可能地关闭Deamons,包括不用的和较少使用的。例如,对于一个启动了finger的系统,攻击者可以发送一个536字节的超长指令来溢出finger的缓冲区,以获得root用户权限侵入系统。而对于绝大多数用户来说,finger绝对是个废物。

要想知道系统启动了哪些Daemons,可以察看/etc/.netd.conf,其中典型的条目是这样的(以finger为例):

finger stream tcp nowait /usr/etc/in.fingerd in.fingerd


要关闭finger daemons,只要将inetd.conf中的这一行删除或者注释掉,然后重启inetd就可以了。类似的无用Daemons还有(不止这些)echo、daytime、ftp、telnet、gopher、exec、talk、tftp、netstat等。现在大多数的Linux发行版都提供了Daemons配置工具,可以直接启动这些工具来关闭不需要的后台程序。

连接

在/etc目录下有两个文件:hosts.allow和hosts.deny。从名字就可以看出这是两个名单,一个是允许连接到本机的主机列表,另一个是禁止连接到本机的主机列表。同时,文件中还可以设置允许连接或禁止连接的服务。这两个文件的关系是“拒绝hosts.deny中列出的主机的连接请求,但是在hosts.allow中的主机除外”。

下面来看一个实例,首先,在/etc/hosts.deny加入一行:

ALL:ALL


它的作用是禁止任何其它机器(第二个ALL)连接任何一个在/etc/inetd.conf中列出的Daemons(第一个ALL)。然后,在hosts.allow中加入允许连接的主机以及允许连接的服务的名称,这样除hosts.allow中的主机之外的所有主机都会被拒之门外。如果在hosts.allow中加入:

ALL:192.168.0.2
sshd:192.168.0.3


那么IP为192.168.0.2的主机可以连接本机的所有服务,而192.168.0.3可以连接本机的sshd服务,其它IP的主机无法连接本机。

登录

一般root用户很少需要远程登录的,如果一个root账号试图远程登录,那么它很有可能是一个攻击者!所以应当禁止root用户远程登录,具体方法是编辑文件/etc/sercuretty,典型的内容如下:

console
tty1
tty2
tty3
tty4
tty5
tty6


上面表示root用户只能用tty终端进行登录,而来自其它地方的连接一律被拒绝。

禁止root远程登录并不能击溃那些狂热的攻击者,他们会尝试用普通用户登录,然后设法提升自己的权限。为了有效地防止这种攻击,可以彻底关闭远程登录。具体办法是建立一个/etc/nologin文件,这个文件一般是在进行系统维护时关闭远程登录使用的,执行:

touch /etc/nologin


这个命令将建立一个空文件/etc/nologin,只要这个文件存在,远程登录就会被禁止。这时,如果有用户试图进行远程登录,nologin文件的内容将会显示给试图登录的用户,并拒绝其登录请求。

木马和病毒

木马是潜伏在系统中的窃贼,其危害程序绝对不在病毒之下。在Linux中,木马可以非常隐蔽,清理也很困难,所以最简便的防备方法是不运行任何来路不明的应用程序。但是这些还不够,还需要一个木马清理程序,比如Tripwire。这个程序可以到http://www.tripwire.org上下载,它会检查系统文件的完整性,发现被非法修改的文件。

对于病毒,Linux具有较强的免疫力,因为一个病毒必须获得超级用户的权限才可以感染系统。因此病毒对于Linux系统的危害相对要小一些,不会像Windows中的病毒那样常常使人闻风丧胆。对于一般的个人用户基本上可以不考虑杀毒的问题,但是要打造一个高安全的系统,可以安装一个防病毒程序,比如AntiVir,下载网站是http://www.hbedv.com。

权限

严密的权限设定构成了Linux安全大厦的基础,在权限上犯错误无一例外都是致命的。首先要注意的是不要随意修改/etc/password的读写权限,这是一个牵一发而动全身的文件。其次是注意umask命令,这个命令用来设置进程所创建的文件的读写权限,最保险的值是077,即关闭创建文件的进程以外的所有进程的读写权限,表示为-rw-------。在~/.bash_profile中,加上一行命令umask 0077可以保证每次启动Shell后,进程的umask权限都可以被正确设定。再来看Suid和Sgid程序,简单地说这样的程序越少越好,因为这样的程序运行时建立的进程将获得文件所有者的权限,而不是程序执行者的权限。

举一个例子说明,当一个普通用户执行passwd命令修改自己的密码时,创建的进程将获得root权限(即passwd程序文件所有者的权限),以便能够写/etc/passwd文件,passwd就是一个suid的程序。如果攻击者利用一个运行时具有root权限的Suid或者Guid程序创建一个shell,那么将获得管理员权限,这是很可怕的结果。如果你想知道系统中有哪些程序是Suid或者Sgid,可以先切换到root用户,然后执行下面命令:

find / -type f (-perm -04000 -o -perm -02000 )


日志

系统日志不仅为管理员提供了维护系统的参考,同时对攻击者也是震慑,因为Linux系统可以将入侵过程中必然发生的事件比如用户登录、用户切换、权限改变等记录在案。/etc/syslog.conf存放有系统日志的配置信息,包括记录哪些事件、记录事件的位置等。日志配置文件的典型格式是:警告类型.危险程度 日志文件名。

例如,如果在/etc/syslog.conf文件中包含有auth.* /var/log/secure和authpriv.* /var/log/secure。

所有涉及到用户切换、权限改变等事件都会被一一记录到文件/var/log/secure文件中。这些文件可以供给管理员以后察看。如果希望一发生这样的敏感事件系统就能够及时通知你,可以将日志的输出文件改为控制台,即:

auth.* /dev/console


这样,只要有人试图登录系统或者切换用户,你立刻都可以在控制台上得到警告。完成日志文件配置后,需要执行下面命令来使配置生效:

kill -HUP $(cat /var/run/syslogd.pid)



最后,用户需要注意的是必须不断地升级系统,在攻击者瞄准系统漏洞之前打好补丁。



原文转自:http://www.ltesting.net