分区
但是,如果按照上面所说的很多的目录都要建立单独的分区。其实可以采用变通的方式,将性质类似的目录链接到一个分区中。比如/var和/tmp都有遭到攻击的可能,则可以建立一个分区存放这两个目录:
|
首先,在/new(这是一个单独的分区)上建立并清理两个目录/new/tmp和/new/var;然后,用符号连接将/tmp、/var链接过来,以后所有对/tmp和/var的读写都会转而指向/usr/tmp、/usr/var。
密码
密码是保证系统安全的第一道防线,但常常因为系统管理员对于“小概率事件”的错误印象变得很脆弱。用单词作密码是根本架不住暴力攻击的。Aclearcase/" target="_blank" >ccessDiver在网络速度非常慢的情况下,仍然可以每分种1万个用户名的速度进行扫描,如果攻击者有足够的耐心,那些为了便于记忆而草草拟定的密码几乎没有一个可以逃过厄运。所以,不设密码是一个不可饶恕的错误,设置一个非常Poor的密码同样是不可饶恕的错误。一个好的密码应当:
◆ 足够长,你的手指头只要多动一下为密码加一位,就可以让攻击者的辛苦增加十倍;
◆ 不要用完整的单词,尽可能包括数字、标点符号和特殊字符等;
◆ 混用大小写字符;
◆ 经常修改。
最后这一点是最容易疏忽的,如果有攻击者盯准了你的机器,而你通常又一个密码使用半年的话,那么即使是一个精心设计的密码也可能被猜到。如果觉得设计一个符合安全性要求的密码很麻烦可以使用工具,比如以下的命令就可以生成一个很好的密码:
|
Daemons
腹背受敌是兵家大忌,系统安全也是如此,要谨防内盗。安装好Linux后,会有许多毫无用处的后台程序被启动(自作主张是这只企鹅的一个大毛病)。毫不夸张地说,一个Daemons就是一个潜在的漏洞,因为你很难确切地知道它有没有缓冲区溢出的毛病,而Linux下的程序又是源代码公开的,使得发现和利用一个缓冲区溢出漏洞变得相对容易。你惟一可选择的就是尽可能地关闭Deamons,包括不用的和较少使用的。例如,对于一个启动了finger的系统,攻击者可以发送一个536字节的超长指令来溢出finger的缓冲区,以获得root用户权限侵入系统。而对于绝大多数用户来说,finger绝对是个废物。
要想知道系统启动了哪些Daemons,可以察看/etc/.netd.conf,其中典型的条目是这样的(以finger为例):
|
要关闭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)连接任何一个在/etc/inetd.conf中列出的Daemons(第一个ALL)。然后,在hosts.allow中加入允许连接的主机以及允许连接的服务的名称,这样除hosts.allow中的主机之外的所有主机都会被拒之门外。如果在hosts.allow中加入:
|
那么IP为192.168.0.2的主机可以连接本机的所有服务,而192.168.0.3可以连接本机的sshd服务,其它IP的主机无法连接本机。
登录
一般root用户很少需要远程登录的,如果一个root账号试图远程登录,那么它很有可能是一个攻击者!所以应当禁止root用户远程登录,具体方法是编辑文件/etc/sercuretty,典型的内容如下:
|
上面表示root用户只能用tty终端进行登录,而来自其它地方的连接一律被拒绝。
禁止root远程登录并不能击溃那些狂热的攻击者,他们会尝试用普通用户登录,然后设法提升自己的权限。为了有效地防止这种攻击,可以彻底关闭远程登录。具体办法是建立一个/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用户,然后执行下面命令:
|
日志
系统日志不仅为管理员提供了维护系统的参考,同时对攻击者也是震慑,因为Linux系统可以将入侵过程中必然发生的事件比如用户登录、用户切换、权限改变等记录在案。/etc/syslog.conf存放有系统日志的配置信息,包括记录哪些事件、记录事件的位置等。日志配置文件的典型格式是:警告类型.危险程度 日志文件名。
例如,如果在/etc/syslog.conf文件中包含有auth.* /var/log/secure和authpriv.* /var/log/secure。
所有涉及到用户切换、权限改变等事件都会被一一记录到文件/var/log/secure文件中。这些文件可以供给管理员以后察看。如果希望一发生这样的敏感事件系统就能够及时通知你,可以将日志的输出文件改为控制台,即:
|
这样,只要有人试图登录系统或者切换用户,你立刻都可以在控制台上得到警告。完成日志文件配置后,需要执行下面命令来使配置生效:
|
最后,用户需要注意的是必须不断地升级系统,在攻击者瞄准系统漏洞之前打好补丁。