1.前言 Trustix Secure Linux 是针对以高品质的服务器所设计的Linux套件,或许读者会有个疑问: 为什么已经有这么多的Linux 套件为何还要创造Trustix Secure Linux ﹖在安装了其它各式的Linux套件后,我们达成了结论,那就是有许多的套件在服务器上是不需要的,
例如 X windows系统,而且很难移除掉;大部分的安装套件有许多的服务预设是在执行的,在今天的网络上有许多计算机犯罪者,执行不必要的服务就等于开了个后门,是个禁忌。 Trustix 感觉到大部分的Linux都针对于桌面市场,然而决定去创造出Trustix Secure Linux --- 一套Linux distbution,焦点放在针对于对服务器的安全上。最值得注重的就是它没有了X windows系统,图形使用者界面(GUI)将只会浪费内存,CPU和硬盘空间。系统默认值的设定是任何的服务都不执行的,更轻易让人知道什么是需要什么是不需要的,需要的时候才去执行。所以Trustix Secure Linux的设计就是减少不必要的程序和把焦点放在安全上(安装程序的数目大小和安全成反比),针对一些有经验的系统治理者能在短时间内能够去安装和设定,以及让无经验的使用者轻易上手。 对于更具体的Trustix Secure Linux的设计目的可以参考 http://www.trustix.net/papers/whitepaper.Html。 2. 安装系统 我们可以至 http://www.trustix.net/download/ 取的最新的版本,虽然目前稳定的版本是 1.01,不过由于在Linux 2.2.16 以前版本的核心有安全上的疑虑(见http://linuxfab.cx/indexNewsData.PHP3?NEWSID=2134),所以笔者在此建议使用 1.0.96 (http://www.trustix.net/download/tsl1096.php3) 来安装,附带提的是要获得一个安全的 Linux 系统第一步要做的就是去获得一个有安全保证的发行商所发行的套件,所谓的安全保证应不只是现在发行的套件没有安全上的疑虑,更要有完整服务、手册、更新、电子论坛 (mail listing) 的机制,不晓得读者对国内目前发行的 Linux 套件评价有多高呢﹖原则上不管读者决定安装那一个套件,最好去原发行商处取得, 假如读者从不信任的地方取得,一定要在安装之前去查证来源码,例如 PGP/GPG 签章或 MD5 checksum,确定是安全的才去安装。这听起来好象不是很重要的样子,但它经常是许多治理者忽略的地方,导致木马、后门在系统中作祟。 由于 Trustix 是源自 RedHat,所以安装过程也是相同的,只是没有烦人的图形安装界面,使用的是文字的安装方式,只是硬盘分割区的大小和选择安装软件须由安装者自己指定,安装程序并不代劳,有时想想这也是应该的,假如系统治理者无法决定上述的选项,如何提供使用者安全的服务呢﹖至于具体的安装过程就请读者参考一下 RedHat 是如何安装的,有经验的读者可以直接略过,或参考 http://www.trustix.net/doc/installation/installation.html, http://cle.linux.org.tw/CLE/docs/manual/index.shtml。 在此笔者还是对些应注重的事项再【老生常谈】一下,假如机器上只用来当 web/email/dns 服务器,只要建立一位使用者,因此要去设 root 密码和另一个帐号。建立另一个帐号的理由是尽量少用 root 去系统上工作,而是用一般的使用者去登入,做一般各种的检查,若有需要去执行root 级的权限,再执行 ‘sudo’命令去执行 root 的工作。而且由于不太可能使用 root 帐号作为对外 Email 用,所以请将 root 的 email 透过 aliases 转给一般的使用者,免得一些漏接一些重要的警告信而不自知。 对于侵入者,要获得系统的使权限最简单的方法之一就是利用其它使用者的帐号。密码是 UNIX 安全管制作业中最重要的一部分,假如侵入者得到一个使用者的密码,可以利用这个帐号登入系统中,继而用这个帐号的权限去做他想做的事,再严重一点的,假如获得的是 root 的密码,侵入者马上就拥有了对系统的绝对控制权,如此整个系统就落入了他人手中,后果是很严重的,因此选择一个安全的密码是很重要的。 根据某项测试结果分析一般人选用的密码有几项特性: 1. 用跟帐号相同的密码(最多)。 2. 用自己的汉语拼音。 3. 用常用的英文单字。 4. 用计算机中常出现的字,还有操作系统的命令,如:command、host、copy….。 5. 简单的数字,例如12345、23232、888…等等。 6. 用自己出生日期,如:19791008。 选择密码的原则就是让人永远猜不到,这样可以让侵入者痛苦地不断猜测密码,即使是用字典法(暴力破解法)也无辄。
(注一) · 不要使用跟帐号一样的密码。 · 不要使用任何人或任何东西的名称。 · 不要使用英文单字、或外文单字,或任何字的缩写。 · 不要使用从讨论计算机安全的书上看到的、用来举例的密码,不论它有多好。 · 使用数字和大小写字母混合的密码。 · 至少使用六个字母的密码。 · 不要使用帐户拥有者的个人相关资料,例如,不要使用姓名前缀缩写、电话号码、身分证号码、工作职称、单位名称等等。 · 不要使用键盘字母的排列顺序,如asdf。 · 不要使用上面各项的反序,或大写形式,或类似的变化。 · 不要使用全部是数字的密码。 · 使用看似随机选取的字母和数字。 在基本的安装及重新开机完成之后,然后要去做必需的 patches (修补)和增加必需的应用软件。首先,必需去下载及去应用 patch (修补),以 Trustix 为例在 FTP://ftp.trustix.com/pub/Trustix/updates/ 中,以 Redhat6.1 为例,那些 patch 档能够在 http://www.redhat.com/errata 中找到。那些 patch 檔有三种不同的形式,包含:安全咨询 (security advisories)、错误修正 (bug fixes) 及套件更新 (package updates)。接着在命令列下执行: rpm - Uvh filename.rpm 并且记得定时到网站去看看有没有新的修补档案,还要订阅相关的邮件论坛,例如有 tsl-announce, tsl-discuss, tsl-testers 具体的资料请参考 http://www.trustix.net/support/。 另一个要讨论安全问题的就是 LInux LOader (LILO),LILO 是激活治理程序,当一台计算机要使用许多种操作系统时,就可以用 LILO 来治理,LILO 也能够提示符号中去输入参数。 LILO 通常在安装完之后就大概会被忘记,然而它却存在着安全的危险,因为可能有恶意的使用者可以经由不同的LILO参数去通过安全的手段进而取得读者的系统。举例来说,假如有使用者在LILO的提示符号中输入这样的参数: linux init=/bin/sh 然后这个参数答应使用者直接去激活 linux 并且给予使用者 root 的权限(尽管它是在只读的型式)而不需要密码。因为可能会发生上述的事件,所以必须去对 LILO 做限制,这个控制包含在 /etc/lilo.conf 档案中,理想上这 /etc/lilo.conf 档案应该如下列所设定的一样: Boot=/dev/had map=/boot/map install=/boot/boot.b Prompt timeout=10 image=/boot/vmlinuz-2.2.12-20 label=linux initrd=/boot/initrd read-only root=/dev/hda1 restricted passWord=PASSWORD 结果为: LILO boot: Password: 这个例子中设定时间为 1 秒,假如没有命令参数在 1 秒内输入的话,它就会继续去激活预设的设定去开机,这样子就没有机会去输入参数。在这档案中另外一个重要的地方就是使用者必需要去输入密码,密码就是存放在这个档案中,可以任意去改变,格外要注重的是它的权限必须改成640,避免被人去读取,只能由 root 去读写这个档案。执行: chmod 640 /etc/lilo.conf 为了读者的 Linux 主机变的更安全,还有许多额外的步骤要去执行。首先必需要做的是对系统帐号对安全管制,在 /etc/passwd 档案中包含了许多预先设定好的帐号,这些帐号包括 gopher, news, mail, ftp 等等仅仅为了软件使用权等目的而设置,在这建议读者将这些帐号通通移除或用 ‘#‘ 批注掉。 在此有些帐号会没有去设定密码,必须要确定每个帐号都有密码保护着。执行下面指令,可以找出 /etc/passwd 中没有密码保护的帐号: awk –F: ‘$2 == “”’ /etc/passwd
当修改了 /etc/passwd 时,也必需去检查影子密码文件(shadow passwords),可以去执行 “pwconv“ and “grpconv“ 命令,去读取 /etc/passwd 檔,产生 shadow 档案出来。 注一:字典法 在passwd档里,使用crypt加密,过程为 1. 以明码正文形式取出密码。 2. 把密码做为要害词,用一系列0进行加密。 3. 把一个64位二进制值转变成56位变量基础的唯一的64位二进制值,作为要害词再加密。 crypt加密随机性大,56位要害词存在可为7x10E16个,所以要逆向译码是不可能的。使用比较法: 1. 获得一个字典文件,它是一个单字表。 2. 把单字用用户的加密程序加密(符合DES的标准)。 3. 把每个单字加密后的结果与目标加密后的结果进行比较,假如 符合,则该单字就是加密要害词,也就是密码。 这就是所谓的字典法。 3. 档案权限 Linux 档案系统跟其它的 UNIX 系统非常相似,每个档案都有它的权限在,包含:读取、写入、执行等3种权限。和大部分的 UNIX 一样,档案和目录权限会产生问题及被有心人利用来破坏或窃取读者宝贵的资料,所以系统上档案和目录必须设权根,只能给有权根的使用者去读取、写入和执行。 Read:该档案或目录可以被读取,对目录来说读取权限可以答应使用者去查看目录的内容,但不能对目录内的档案进行读取。 Write:该档案或目录可以被写入,对于目录来说,写入是指在此目录区中建立、删除档案及改名的能力,要注重的是移除档案的能力并不是由档案的权限控制的,而是由包含该档案的目录权限位所控制。 Execute:该档案或目录可以被执行(被搜寻),对目录而言是指答应该目录区能被搜寻的权限,即查看目录中档案的权限。 执行已编译的可执行档只需要设定该档案的执行权限即可,但执行 shell 指令文件则必需同时需要设定读取和执行两种权限,因为 shell 必须先能够从档案中读取指令,再去执行以 /bin/mount 这个档案举例来说(这档案是用来挂上某些装置,如 CD-ROM),它标准的权限是 -rwsr-xr-x,表示一般的使用者能够去执行这个档案。
从安全的观点来看,一般的使用者不应该能够去执行这个档案。就这点来看,有许多系统的档案是被滥用的,谁都可以去执行。 不用说,最基本的就是去讨论重要的目录(例如:/etc