快捷搜索:   nginx

Linux系统安全基础知识

 1. 基础知识
尽量少让外人知道有关的信息。有时候简单地用finger程序就能知道不少信息,比如:有多少用户、管理员什么时候登录、什么时候工作、他们 是谁、谁现在在用这个系统以及其它有利于黑客猜出用户口令的信息。你用一个强大的finger daemon和tcpd限制连接到服务器的用户以及他们可以知道的有关系统的信息。但是,最好还是把finger软件包卸载掉。
日志是了解Linux系统运行情况的唯一方法。当然,这是以黑客没有破坏日志为前提的,但是这种情况很少见。把所有的连接都记录下来,可以发现攻 击者和他们试图进行的攻击。如果你看不懂日志,可以向别人请教,一定要学会看懂它们。向别人请教你不懂的东西这是很正常的,不要不好意思。我自己就是从不 断地犯错误和改正错误中学到不少知识的。因为骄傲自大不能学到东西和本身的资质差是两码事。看下面的《31. 创建所有重要的日志的硬拷贝》,你可以学到怎样管理日志文件的一些有用的知识。
限制系统中SUID的程序。SUID的程序是以root(UNIX世界中的上帝)权限运行的程序。有时候这是必须的,但是在多数情况下这没有必要。因 为SUID程序可以做任何root可以做的事,这样有更多的机会出现隐患。也许,它们有时候会带来隐患,有时候不会,但是黑客可以利用SUID的 程序来破坏系统的安全。这就是一种叫exploit的程序的由来。exploit程序是一种利用SUID程序的程序或脚本,具有很大的破坏力,可以用来得 到root的shell、获取password文件、读其他人的邮件、删除文件,等等。这方面的知识可以参考《34. 带“s”位的程序》。

2. BIOS安全,设定引导口令
禁止从软盘启动,并且给BIOS加上密码。每次启动的时候都手工检查一下BIOS,这样可以提高系统的安全性。禁止从软盘启动,可以阻止别人用特殊的 软盘启动你的计算机;给BIOS加上密码,可以防止有人改变BIOS的参数,比如:允许从硬盘启动或不用输入口令就可以引导计算机。

3. 安全策略
有一点很重要而且必须指出的是:如果你不知道要保护什么,那么更本没有办法保证系统的安全。所以必须要有一个安全策略,基于这样的一个策略才可以决定 哪些东西允许别人访问,哪些不允许。如何制定一个安全策略完全依赖于你对于安全的定义。下面的这些问题提供一些一般的指导方针:
* 你怎么定义保密的和敏感的信息?
* 你想重点防范哪些人?
* 远程用户有必要访问你的系统吗?
* 系统中有保密的或敏感的信息吗?
* 如果这些信息被泄露给你的竞争者和外面的人有什么后果?
* 口令和加密能够提供足够的保护吗?
* 你想访问Internet吗?
* 你允许系统在Internet上有多大的访问量?
* 如果发现系统被黑客入侵了,下一步该怎么做?
这个列表很短,真正的安全策略可能包含比这多得多的内容。可能你要做的第一件是:评估一下你偏执的程度。任何一个安全策略多少都有一定程度的偏执:确 定到底在多大程度上相信别人,包括内部的人和外部的人。安全策略必须在允许用户合理地使用可以完成工作所必须的信息和完全禁止用户使用信息之间找到平衡 点。这个平衡点就是由系统策略决定的。

4. 口令
这章的Linux安全概要就从口令的安全开始。许多人都把所有的东西保存在计算机上,防止别人查看这些信息的方法就是用口令把计算机保护起来。没有什 么东西是绝对安全的。与常识相反的是:无法破解的口令是不存在的。只要给足时间和资源,所有的口令都能用社会工程(译者注:原文是social engineering,找不出更好的翻译,大致的意思是用社会和心理学的知识,而不是用纯粹的技术手段)或强行计算的方法猜出来。
通过社会工程或其它方法获得服务器的口令是最简单和最流行的入侵服务器的方法。决大多数的技术支持人员很容易获得其他用户的口令,因为用户的安全意识 很差而且很轻易就相信自己的同事,特别是帮助自己解决问题的人。有很多登记在案的成功入侵就是因为一些别有用心的人利用安全管理上的松懈而获得成功的。有 时候,在特定的时间在特定的地点,上级或老板对员工喊话就有可能泄露机密,导致可怕的后果。
因为破解口令是一项很耗时间和资源的工作,所以应该使得口令文件难于破解,这样即使黑客获取了口令文件也不能轻易破解。作为一个系统管理员,自己在每 个周末运行一下口令破解程序,是保证系统安全的好方法。这有利于尽早地发现和替换那些很容易被猜出来的口令。而且,还要有一个好的口令检查机制,在用户选 择新口令或改变旧口令的时候,来排除那些有安全隐患的口令。那些字典里的单词、或者全是大写或全是小写的以及没有包含数字或特殊字符的字符串是不能用来做 口令的。我建议用下面的规则选择有效的口令:
* 口令至少要有6个字符,最好包含一个以上的数字或特殊字符。
* 口令不能太简单,所谓的简单就是很容易猜出来,也就是用自己的名字,电话号码、生日、职业或者其它个人信息作为口令。
* 口令必须是有有效期的,在一段时间之后就要更换口令。
* 口令在这种情况下必须作废或者重新设定:如果发现有人试图猜测你的口令,而且已经试过很多次了。

5. 口令长度
安装完Linux系统之后默认的最小口令长度为5。这就是说一个新的用户可以访问服务器,那么他的口令必须多于5字符。但是这样是不够安全的,最好口 令的长度能够大于8。可以强制用户使用8个字符以上的口令。编辑“/etc/login.defs”文件,把最小口令长度由5改成8。找到 PASS_MIN_LEN 5 这一行,改为:PASS_MIN_LEN 8 。“login.defs”是很重要的配置文件。可以在这个文件中设定一些其它的安全策略,比如:口令的有效期。

6. root帐号
“root”帐号是Unix系统中享有特权的帐号。“root”帐号是不受任何限制和制约的。因为系统认为root知道自己在做些什么,而且会按 root说的做,不问任何问题。因此,可能会因为敲错了一个命令,导致重要的系统文件被删除。用root帐号的时候,要非常非常小心。因为安全原因,在不 是绝对必要的情况下,不要用root帐号登录。特别要注意的是:不在自己的服务器上的时候,千万不要在别的计算机上用“root”登录自己的服务器。这是 非常非常非常糟糕的一件事。

7. 加密
加密时要用到密匙,密匙是一个特殊的数字,把密匙和需要加密的信息经过加密算法加密之后,只有知道密匙的人才能把信息读出来。如果所有的计算机主机都 在你的控制下,加密当然是一个好方法,但是,如果其中一台“被信任的”主机被黑客控制了,你马上就有危险了。这就不仅仅是用户的帐号和口令有危险了。在通 常情况下,加密是用来保证机密信息在系统中传送的安全。如果一台计算机被控制了,那么这些加密信息就会让人知道或是泄密了。有一个好的安全策略,这种危险 的可能性会降到最低,但是如果某台主机的密匙被泄露出去,那么危险始终存在。使用如:OpenSSL、SSH和MD5这样的加密技术是非常有用的,可以参 考后面的章节。

8. “/etc/exports"文件
如果通过NFS把文件共享出来,那么一定要配置“/etc/exports”文件,使得访问限制尽可能的严。这就是说,不要用通配符,不允许对根目录有写权限,而且尽可能只给只读权限。编辑exports文件(vi /etc/exports)加入:
例如:
/dir/to/export host1.mydomain.com(ro,root_squash)
/dir/to/export host2.mydomain.com(ro,root_squash)
“/dir/to/export”是你想共享出来的目录,host.mydomain.com是允许访问这个目录的计算机。ro代表只 读,root_squash代表不允许对根目录进行写操作。使这些改变生效,你还要运行“/usr/sbin/exportfs -a”命令。
注意:在服务器上装NFS服务是会有安全隐患的,就我个人而言,不建议你使用NFS。

9. 禁止使用控制台程序
一个最简单而且最常用的保证系统安全的方法就是禁止使用所有的控制台程序,如:shutdown和halt。可以运行下面的命令来实现:
# rm -f /etc/security/console.apps/servicename
这里servicename是你要禁止的控制台程序名。除非你使用xdm,否则不要把xserver文件删掉,如果这样除了root之外,没有人可以 启动X服务器了。(如果使用xdm启动X服务器,这时root是唯一需要启动X服务器的用户,这才有必要把xserver文件删掉)。例如:
# rm -f /etc/security/console.apps/halt
# rm -f /etc/security/console.apps/poweroff
# rm -f /etc/security/console.apps/reboot
# rm -f /etc/security/console.apps/shutdown
# rm -f /etc/security/console.apps/xserver (如果删除,只有root可以启动X).
这些命令就可以禁止所有的控制台程序:halt、poweroff、reboot和shutdown。记住,只有装了Xwindow,删除xerver文件才会有效果。
注意:根据我们前一章的介绍安装服务器,Xwindow是没有安装上的,上面说的那些文件可能不会出现在“/etc/security”目录下的,如果这样就可以不管这一节介绍的方法。

10. 禁止控制台的访问
为了禁止所有的控制台访问,包括程序和文件,请在“/etc/pam.d/”目录下的所有文件中,给那些包含pam_console.so的行加上注 释。这一步是上一章《禁止使用控制台程序》的延续。下面的脚本可以自动完成这项工作。转成root身份,创建disabling.sh脚本文件 (touch disabling.sh),接着加入下面这些行:
# !/bin/sh
cd /etc/pam.d
for i in * ; do
sed '/.*pam_console.so/s/^/#/' < $i > foo && mv foo $i
done
用下面的命令使脚本有可执行的权限,并执行它:
# chmod 700 disabling.sh
# ./disabling.sh
这样“/etc/pam.d”目录下所有文件中包含“pam_console.so”的行都被加上注释。这个脚本运行完之后,可以把它从系统中删掉。

11. “/etc/inetd.conf”文件
inetd,也叫作“超级服务器”,根据网络请求装入网络程序。“inetd.conf”文件告诉inetd监听哪些网络端口,为每个端口启动哪个服 务。把Linux系统放在任何的网络环境中,第一件要做的事就是了解一下服务器到底要提供哪些服务。不需要的那些服务应该被禁止掉,最好卸载掉,这样黑客 就少了一些攻击系统的机会。查看“/etc/inetd.conf”文件,了解一下inetd提供哪些服务。用加上注释的方法(在一行的开头加上#号), 禁止任何不需要的服务,再给inetd进程发一个SIGHUP信号。
第一步:把文件的许可权限改成600。
# chmod 600 /etc/inetd.conf
第二步:确信文件的所有者是root。
# stat /etc/inetd.conf
这个命令显示出来的信息应该是:
File: "/etc/inetd.conf"
Size: 2869 Filet

顶(0)
踩(0)

您可能还会对下面的文章感兴趣:

最新评论