由 7299 在 04-30-2003 21:32 发表:
提升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。
密码
密码是保证系统安全的第一道防线,但常常因为系统管理员对于“小概率事件”的错误印象变得很脆弱。用单词作密码是根本架不住暴力攻击的。AccessDiver在网络速度非常慢的情况下,仍然可以每分种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/inetd.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上下载,它会...欠ㄐ薷牡奈募