原著:Aleksandar Stancin aka DPressed
译者:不详
本文是为linux新手或者那些关心(至少是有点关心)自己硬盘上的数据的人编写的。你会注意到本文面向的对象主要是家庭用户,而不是大型网络管理员或者其它类似的用户。
你也许有些奇怪为什么有人会访问你的数据呢?嗯,用这个反问句作为答案怎么样:为什么不呢?你知道,(在internet这个大舞台上),有很多人都喜欢把别人的数据搞得一团糟。这里有很多问题值得一提,但是我们现在距臭名卓著的Y2043年臭虫也只有43年了,为了本文自身价值考虑,我们忽略这个问题......
因此,你自己拿到了这个奇异的linux发行版本,现在世界就在你的掌握之中了,任何人都不要妄想用它兴风作浪了...eeee!!!全错了!证据#1:只要你没有执行适当的维护工作,那么你选择linux作为操作系统和使用其它操作系统同样不安全!实际上,采用linux作为操作系统比采用其它操作系统更不安全,特别是如果你是一个十足的新手,昨天才刚刚把linux给安装上。女士们、先生们,不用担心,我十分荣幸地向大家介绍:
Paranoia Inc.
所有用户首先绝对要采用的是Shadow(我实际上并不是在说Baldwin兄弟...)。是的,使用shadow口令。
最初,所有的用户登陆进系统,口令都被保存在/etc/passwords文件中,这是一个简单的.txt文件,所有的用户都可以访问这个文件。所有主要的linux发行版本现在都采用了shadow口令选项,因此你就用它吧,就算是为了上帝,使用它好了!这样会把你的口令放在/etc/shadow文件中,因为用户并不能访问这个文件,只有万能的上帝--超级用户才可以访问该文件。
而且,只要我们一提起口令,那么使用尽可能复杂的口令总是个好建议。例如,使用4gh7$21作为口令比使用"bob"或者"flower"等作口令要好多了。要避免使用任何简单的或者和当前用户有关的口令。
现在我们就充实一下这些问题...
在你第一次安装linux时,你肯定不会注意到启动时快速闪现的信息,比如启动sendmail、lpd等等。也许你并不知道这个迷人的宠儿打开了一个供自己使用的特定端口,这样就给linux开了个小洞,从而从外面就更容易访问了。因此,这些漏洞必需死去,但是让我们允许它快点安乐地死去吧,在你的/etc目录下找到inted.conf文件并把所有不必要和对你来说没有什么用处的部分都注释掉(使用#,只要在该行开始插入它就可以了),例如rexec、rsh、rwho和其它需要从网络上登陆到你的计算机的东西。
如果你认为这些内容你都不会使用,你也可以关闭inetd守护进程。如果你使用POP3帐号来下载自己的email,而且并不希望使用其它服务,那么现在你就可以关闭sendmail守护进程了。
如果你是一个新手,就把这些服务都关掉把,你很可能根本就不需要这些内容:sendmail、lpd、inted。可能还有很多,但是由于系统的特殊化,很难对它命名。如果你找到其它你并不希望使用的服务,也把它们杀掉好了,除了关闭这些端口之外,你还释放了一些内存。也许你会希望检查一下这些内容来获得你实际上不需要的后台进程的更详细信息。
不幸的是,我并不能告诉你你会使用哪些服务,不使用哪些服务,因此你只好自己解决这个问题了。这样处理以后,你的linux有点安全了,但是还不够,至少对于普遍的Paranoia Joe来说还不够...
因此,你走到了这里,关闭了自己不希望使用的后台进程,很好!现在让我们涉足一些更严重的问题。
再次进入/etc目录,编辑hosts.deny文件,增加一行ALL: ALL。简单么?现在你已经禁止其它主机访问你的计算机了。在你希望允许一些主机访问你的计算机时,就编辑hosts.allow文件,把允许的主机放到这个文件里。在命令提示符中键入"man hosts.allow"就可以看到更多有关hosts.allow的内容。
Hmmmm,更深入一点,看一下现在哪些端口打开了怎么样?试试这个:输入"nmap localhost.localdomain",用你选择的主机名来代替localhost。现在你应该可以看到你的计算机上的所有活动端口了。提示,使用"man nmap"来看一下有关nmap命令的更多内容。你没有?没有问题,从这里下载好了(http://www.insecure.org/nmap)。
我可以看到你的眼睛在发亮,想知道更多内容么?
输入"netstat -l"或者更好的方法是使用"man netstat"来看一下有关你机器上打开和监听的端口的更详细的内容。在分析netstat命令的结果时不用理会"Active UNIX domain sockets (only servers)..."一行后面的内容,不要问为什么,如果你已经知道了那么就根本不需要我告诉你了。下面是"netstat -l"输出的一个例子:
Active Internet connections (only servers)
Proto Recv-QSend-QLocal Address Foreign AddressState
tcp 0 0 *:6000 *:* LISTEN
raw 0 0 *:icmp *:* 7
raw 0 0 *:tcp*:* 7
Active UNIX domain sockets (only servers) - txt文件在这里(http://www.net-security.org/text/articles/default_1.txt)。
通过简单关闭所有你不需要或者不想使用的服务和守护进程,你就可以保证打开端口的数量最少。也就是说,在上面的例子中,只有端口6000是活动的,但是我们通过在文件中调用你的GUI的行中增加"-nolisten tcp"就可以把它关闭,所有的配置文件都位于/etc目录。试试找到这些文件,浏览一下你的系统,有时候这很有意思...当你禁止了不需要的内容之后,你应该可以看到没有端口仍在监听了,这样你就感到有点安全了。注意,当在线时有些端口是打开的,例如,如果你使用一些ICQ。
接下来要介绍的是空前著名的防火墙,是的,就是防火墙,神秘的防火墙。如果你想了解更多内容,我建议你试试以下内容。最基本的,通过使用"ipchains"命令(hmmm,"man ipchains"听起来怎么这么耳熟啊?)你就可以控制所有到达/来自于你的计算机的通讯,当然你必需要正确设置你的防火墙规则。让我们给出一个例子:
ipchains -A input -i ppp0 -p TCP -d 0.0.0.0/0 $portnumber -j DENY
这里的$portnumber代表你希望隔离的实际端口号。也许你不希望被ping到(至少是icmp ping):
ipchains -A output -i ppp0 -p icmp -j DENY
有关ipchains可以写很多内容,最好的方法是自己去一点一点地探究,了解一点,试验一点,但是不要担心后面罗列的那一长串参数,因为你可以以很简单的方法使用ipchains。如果你希望了解更多内容,这里有一个很好的ipchains-HOWTO(http://www.linuxsecurity.com/resource_files/firewalls/HOWTO/IPCHAINS-HOWTO.html)。
所有这些过程都会使你的系统变得安全点,但是记住并没有绝对的安全。只有人们按照系统允许的操作去维护系统,系统才是安全的。对连接到internet的服务进行限制并关闭服务是一种防止差错泛滥的方法。记住,对你从网络上接收到的内容以及发送者保持警惕,不要忘记经常对重要文件进行备份。综合使用这些方法会向你证明这是很有意义的。
还有,最后一种但不是必需的方法--补丁。经常给你的软件找些新的补丁和解决方案。这些你可以在最近的linux发行商站点上找到。永远不要沉睡不醒...
自己从各种资源(例如发行商,安全站点,等等)订阅一些邮件或者新闻列表是个好主意:
Linux Security Newsletter and Security Advisories Weekly
(http://www.linuxsecurity.com/general/newsletter.html)
Security Focus Linux
(http://www.securityfocus.com/forums/focus-linux/intro.html)
Help Net Security Newsletter
(http://www.net-security.org/text/newsletter)
推荐一些有用的站点:
http://www.linuxsecurity.com/
http://www.slashdot.com/
http://www.rootprompt.org/
http://www.linux.com/
http://www.xmission.com/~howardm/
上面提到的这些过程都由本文的作者在所安装的linux发行版本SuSE 6.4上经过了测试。