服务器架设篇 - CentOS 4.x

第十章、认识网络安全

认识 iptables 与 TCP_Wrappers 的概念!

最近更新时间: 2006/09/06

本文数据主要针对 CentOS 4.x 的系统进行说明,而 CentOS 4.x 已经在 2012 年 2 月份正式不再进行维护,事实上,在 2009 年底几乎就不再维护了。 因此,建议您前往本站查找最新版本的 Linux distribution 文章来阅读,比较不会浪费时间。那为何还需要编辑 CentOS 4 的数据呢? 鸟哥只想要做个自己曾经撰写过的文档内容保存而已啰! ^_^!最新文章请前往鸟站首页查阅啰!
在介绍了『网络基础』、『限制连接 port number 』、『网络升级套件』之后,再来准备要上 Internet 了吗?!如果只是想要上 Internet 去浏览,那么自然没有问题,如果是想要对 Internet 开放网络服务,那么最好还是先认识一下网络安全会比较好一些。什么?套件也更新了, port 也关闭了,还需要认识什么网络安全啊?!呵呵!当然啦!因为难保我们的主机不会被新的套件漏洞以及阻断式攻击 (DoS)所困扰啊!在这个章节里面,我们会稍微介绍一些基础的网络防护观念,尤其是系统管理员应该要做的事情呐!

网络封包连接进入主机的流程

在这一章当中,我们要讨论的是,当来自一个网络上的连接要求想进入我们的主机时, 这个网络封包在进入主机实际取得数据的整个流程是如何?了解了整个流程之后, 你才会发现:原来系统操作的基本概念是如此的重要! 而你也才会了解要如何保护你的主机安全呐!闲话少说,咱们赶紧来瞧一瞧先。

封包进入主机的流程

网络基础章节当中我们谈到过目前的网络架构主要是 TCP/IP 为主, 而绝大部分的网络连接是双向的,其中又以 TCP 封包为代表。 另外,根据 Server/Client 的连接方向与 TCP/IP 的概念,我们会知道创建一条可靠的网络连接需要一组 Socket Pair 的辅助, 亦即成对的来源与目标之 IP 与 port 啰,以使连接的两端可以顺利的连接到相对的应用软件上。

上面谈到的这些都是属于网络的基础概念,在这里我们要谈的是,那么要让这个 TCP 封包顺利的进入到 Linux 主机上, 然后使用 port 所对应的软件来访问系统的文件系统资源时,还得要经过哪些关卡呢? 举例来说,如果你的 Linux 主机有打开 WWW 的 port 80 网络服务,而 port 80 是由一个名称为 httpd 的程序所启动的,这个程序的设置档为 httpd.conf ,那么 Client 的连接要进入到你 Linux 主机的 WWW 时, 会经过什么阶段呢?基本上,会经过如下图的几个阶段:

网络封包进入本机的流程顺序
图一、网络封包进入本机的流程顺序

  1. 封包过滤防火墙:IP Filtering 或 Net Filter
    要进入 Linux 本机的封包都会先通过 Linux 内核的缺省防火墙,就是称为 IP Filter 或 Net Filter 的咚咚, 简单的说,就是 iptables 这个软件所提供的防火墙功能。iptables 这个 Linux 缺省的防火墙软件可以针对网络封包的 IP, port, MAC, 以及连接状态如 SYN, ACK 等数据进行分析, 以过滤不受欢迎的网络封包呢!举例来说,如果有个 IP 为 aaa.bbb.ccc.ddd 是个恶意网站来源, 那你就可以通过 iptables 抵挡来自该 IP 的网络封包的连接,以达到基本的主机防火墙功能。 这部份我们会在下一章深入了解。

  2. 第二层防火墙:TCP Wrappers
    通过 IP Filter 之后,网络封包会开始接受 Super daemonsTCP_Wrappers 的检验,那个是什么呢? 呵呵!说穿了就是 /etc/hosts.allow 与 /etc/hosts.deny 的设置档功能啰。 这个功能也是针对 TCP 的 Header 进行再次的分析,同样你可以设置一些机制来抵制某些 IP 或 Port ,好让来源端的封包被丢弃或通过检验;

  3. 服务 (daemon) 的功能:
    前面这两个动作基本上是 Linux 缺省的功能,而这第三个步骤就是属于软件功能了。 举例来说,你可以在 httpd.conf 这个设置档之内规范某些 IP 来源不能使用 httpd 这个服务来取得主机的数据, 那么即使该 IP 通过前面两层的过滤,他依旧无法取得主机的资源喔!但要注意的是, 如果 httpd 这支程序本来就有问题的话,那么 client 端将可直接利用 httpd 软件的漏洞来入侵主机,而不需要取得主机内 root 的密码!因此, 要小心这些启动在互联网上面的软件喔! 所以前一章网络升级套件是很重要的!

  4. 使用主机的文件系统资源:
    想一想,你使用浏览器连接到 WWW 主机最主要的目的是什么?当然就是读取主机的 WWW 数据啦! 那 WWW 数据是啥?就是文件啊!^_^!所以,最终网络封包其实是要向主机要求文件系统的数据啦。 我们这里假设你要使用 httpd 这支程序来取得系统的文件数据,但 httpd 缺省是由一个系统帐号名称为 httpd 来启动的,所以:你的网页数据的权限当然就是要让 httpd 这支程序可以读取才行啊!如果你前面三关的设置都 OK ,最终权限设置错误, 用户依旧无法浏览你的网页数据的。
在这些步骤之外,我们的 Linux 以及相关的软件都可能还会支持注册表记录的功能, 为了记录历史历程,以方便管理者在未来的错误查找与入侵侦测,良好的分析注册表的习惯是一定要创建的, 尤其是 /var/log/messages 与 /var/log/secure 这些个文件! 虽然各大主要 Linux distribution 大多有推出适合他们自己的注册表分析套件,例如 CentOS 的 logwatch ,不过毕竟该套件并不见得适合所有的 distributions ,所以鸟哥尝试自己写了一个 logfile.sh 的 shell script,您可以在底下的网址下载该程序:
好了,那么根据这些流程,你觉得我们可以如何保护自己的主机呢?

主机能作的保护: 权限设置、套件更新、SELinux

基础篇里面的前面几章我们谈到很多关于文件权限方面的注意事项, 关于目录最重要的是那个 w (可写入)的权限,至于对文件来说,那个 r (可读取) 也是非常重要的!而由前一小节的图一我们也知道网络服务其实就是提供主机的文件资源给 client 端来查阅就是了。

根据这样的说法,你可以知道,如果你有某些不想要被读取的数据在主机上面的话, 那么将该数据的权限设置为不能被某些网络服务读取的情况, 就能达到最基础的保护了。所以您说文件权限重不重要啊!很重要的!不是吗?


  • 权限的重要性
    鸟哥常常在上课的时候会开玩笑,说如果你只要下达一个指令,那你的系统就得要重新安装了! 那就是:『chmod -R 777 /』,这个指令可是『极度危险』的喔!为何呢?因为系统上面本来就有很多需要被保护的数据, 例如 /etc/shadow 以及 /etc/passwd 等,尤其是 shadow 密码文件。虽然里头是加密过的数据, 不过别忘了,现在的 PC 速度实在太快了,而网络上又有太多暴力破解密码的软件, 如果你的 /etc/shadow 被取得后,嘿嘿!你的密码其实就算『公开了』。那万一你有开放某些网络服务的话, 例如可连接登录的 ssh 服务或 mail 服务,那任何人都可以使用你的主机来登录, 或者是利用你的主机来收你主机上的其他用户的信,唉!糗大了!

    再者,很多朋友在主机上面常常喜欢创建权限为 drwxrwxrwx 的目录来提供用户上传数据, 这实在是很危险ㄟ!如果用户的功力够高的话,他可以在网络软件如 httpd 的使用上, 来创建一些危险的 script 在你的 drwxrwxrwx 的目录中,那如果你不小心进入到该目录, 又不小心运行了该恶意用户所创建的 script ,恭喜您~中标!

    另外,如果你是学校老师,为了公平与同学本身的权益起见,你会希望同学们所上传的数据不会被其他同学所窃取。 那么你该如何进行权限的规范?如果单纯的让学生通通上传到单一目录,并且没有指定特殊的权限时, 不但某些同学的数据可能会被窃取与拷贝,更惨的是,可能数据会被某些恶意同学所删除! 那可就麻烦了!所以,权限的设置真的很重要啦!

    而除了传统的权限之外,事实上目前 Linux 支持一种称为 ACL 的额外权限控制方式, 也支持更强化安全的 SELinux ,这两个小东西我们会在本章的后面部分继续介绍。


  • 严格的密码的重要性:
    很多用户为了方便记忆,老是跟系统管理员说:『喂!我的密码可不可以简单一点啊? 太麻烦的我都记不住!』如果您是那个可怜的系统管理员,你该如何回应? 如果你大开方便之门,未来可是后患无穷的!举例来说,如果你的 mail server 上面某个用户帐号为 alex 好了,那么他的 email address 将会是:『 alex@your.host.name 』, 那这个用户由于使用习惯不良,他将他的 mail address 留在 Internet 上,所以很多人都知道这个 address。

    知道就知道,会有什么了不起吗?呵呵!了不起的很!如果有个坏家伙,他想要偷偷的收取 alex 的信, 那他就在他的收信软件上面偷偷填上你的主机,然后偷偷输入帐号 alex 并且输入密码为 alex , 如果你真的帮 alex 这个用户创建同名的密码,哈哈!系啊(请台语发音,谢谢)!这个 alex 永远都收不到他的信了!

    这算还好呐!如果你有开放远程连接登录的服务,那么坏家伙就可以利用 alex 这个帐号与密码来登录你的主机, 如果你没有做好权限规划的话,哇!整部主机的数据被偷光光!那可有的瞧的了! 所以,您说密码不重要吗?我可不认为!


  • 套件更新的重要性:
    很多朋友由于网络文章的关系,可能会拿比较旧的 Linux distribution 来作为架站的平台, 举例来说,使用 Red Hat 9 来架站的朋友想必还是不少的。如果你真的利用旧的版本来进行网站的架设, 而且还对 Internet 开放服务的话,那么你的主机将会在不到一天的时间内被『绑架』的! 为什么呢?因为套件软件都是可能有漏洞的,如果你没有补洞的话.....

    有些朋友认为:『我的密码设置的严格一点,应该就好了吧?』真的吗?让我们瞧一瞧图一的流程, 第三个步骤是否使用到 httpd 这个程序的功能了,万一这个程序有问题怎么办? 举例来说,酷学园的朋友曾经在他举办的研讨会当中露一手如何绑架没有修补漏洞的 Linux 系统, 利用的就是 httpd 这个软件的漏洞,整个入侵的过程没有花费一分钟以上! 而且他取到的可是 root 的权限呐!不是什么阿猫阿狗的喔! 而且他完全没有输入任何密码,使用的入侵程序则是由 Internet 上面取得的。

    在上头这个例子鸟哥不是要说该朋友的功力,而是要提醒大家,套件修补的重要性! 要取得破解程序的管道实在太多了,但如果你都有在最短的时间内取得套件的更新的话, 那么至少该破解程序对你的系统就不会生效!你的主机自然就会比较安全些。 而这个问题在所有的操作系统上面都是存在的! Windows 系统也是每个月必须要推出他们的套件程序修补, 否则一样会被攻击或入侵啊!不过 Linux 的套件漏洞修补要快多了!


  • SELinux
    在最新的 Linux 2.6 版内核上所发展的 distributions 目前缺省都会启动一个名为 SELinux 的内核模块, 这个 SELinux 必须要在开机加载内核时就得要加载,那这个玩意儿是啥咚咚? SELinux 是 Security Enhanced Linux (安全加强的 Linux) 的缩写, 他并不是一个防火墙的软件,而是一个『针对文件系统权限作更细部规划的一个模块』。

    传统的 Linux 权限是分为三种身份 (owner, group, others) 以及三种权限 (r, w, x), 但事实上,这三种身份的三种权限组合并无法有效的管理所有系统上的 daemon 访问数据时所需要的行为。 因此美国国家安全局便发展出这个可以更细部规划文件权限功能的 SELinux 了。

    由于 SELinux 主要是进行文件系统的细部权限设置,所以想要使用 SELinux 的配置时, 需要对 Linux 的文件系统以及基础的操作系统概念要很清楚,否则将会使得很多的网络服务无法正确的激活系统资源, 导致你的主机很多服务无法访问系统数据!因此,对于我们刚接触到 Linux 架站的朋友来说, 建议你先关闭 SELinux ,等到两三年后对于 Linux 有很深的概念后, 再来尝试配置 SELinux 这个有趣的咚咚!

    也就是说,如果你没有关闭 SELinux 的话,那么你就得要针对 SELinux 进行文件权限的额外配置, 否则你的网络服务就不可能会正常的启动!那么如何关闭 SELinux 呢?你可以这样做:
    1. 先关闭 /etc/selinux/config 的内容 
    [root@linux ~]# vi /etc/selinux/config
    # 将底下的设置值改成这样:
    SELINUX=disabled
    
    2. 修改开机时 grub 的设置档
    [root@linux ~]# vi /boot/grub/menu.lst
    .....省略.....
        kernel /boot/vmlinuz-2.6.9 ro root=/dev/hda1 rhgb selinux=0
    .....省略.....
    
    3. 重新开机
    [root@linux ~]# sync; reboot
    
    因为 SELinux 必须要在开机的时候加载,同样的,要卸载也必须要重新开机才行! 因此,如果你使用的是您 distributions 的缺省安装,那么几乎 SELinux 都是缺省启动的! 你可以依据上述的几个步骤将 SELinux 取消后,重新开机即可。如果对于 SELinux 有兴趣的话, 底下的链接可以参考看看:
  • 主机的细部权限规划:ACL 的使用

    在前一小节当中我们提到 Linux 系统的权限是很重要的,偏偏传统的权限仅有三种身份、三种权限而已, 配合 chmod, umask, chown, chgrp 等指令来进行用户与群组相关权限的设置。如果要进行比较复杂的权限设置时, 例如某个目录要开放给某个特定的用户来使用时,传统的 owner,group,others 的权限方法可能就无法满足了。 不过还好,我们有 ACL 这个玩意儿可以使用!这玩意挺有趣的,底下我们就来谈一谈:

    什么是 ACL?

    ACL 是 Access Control List 的缩写,主要的目的是在提供传统的 owner,group,others 的 read,write,execute 权限之外的细部权限设置。ACL 可以针对单一用户, 单一文件或目录来进行 r,w,x 的权限规范,对于需要特殊权限的使用状况非常有帮助。

    由于 ACL 是传统的 Unix-like 操作系统权限的额外支持项目,因此要使用 ACL 必须要有文件系统的支持才行。 目前绝大部分的文件系统都有支持 ACL 的功能,包括 ReiserFS, EXT2/EXT3, JFS, XFS 等等。 在 SuSE 这个版本当中,缺省是有启动 ACL 控制的,不过在 CentOS 则缺省没有启动 ACL。 所以等一下要使用 ACL 的功能时,你必须要先启动你系统 filesystem 的支持才行喔!

    那 ACL 主要可以针对哪些方面来控制权限呢?他主要可以针对几个项目:
    • 用户 (user):可以针对用户来设置权限;
    • 群组 (group):针对群组为对象来设置其权限;
    • 缺省属性 (mask):还可以针对在该目录下在创建新文件/目录时,规范新数据的缺省权限;
    好了,再来看看如何让你的文件系统可以支持 ACL 吧!

    如何启动 ACL

    要让你的文件系统支持 ACL 非常的简单!假如要让你的 /home 支持 ACL 的话,可以直接这样做:
    [root@linux ~]# mount -o remount,acl /home
    [root@linux ~]# mount | grep /home
    /dev/hda5 on /home type ext3 (rw,acl)
    
    看到那个出现的 ACL 了吧!那就对了~如果没有出现这一行,你的文件系统是无法支持 ACL 的, 那下一节的练习您可就无能为力了~那如果想要一开机就让你的文件系统支持 ACL 呢? 呵呵!修改 /etc/fstab 就对了!将他改成类似底下的模样:
    [root@linux ~]# vi /etc/fstab
    /dev/hda5  /home   ext3   defaults,acl   1 2
    
    加入那一段特殊字体的数据,那么下次开机就能够支持 ACL 了!很简单吧! ^_^

    ACL 的设置技巧: getfacl, setfacl

    好了,让你的 filesystem 启动 ACL 支持后,接下来该如何设置与观察 ACL 呢? 很简单,利用这两个指令就可以了:
    • getfacl:取得某个文件/目录的 ACL 设置项目;
    • setfacl:设置某个目录/文件的 ACL 规范。
    先让我们来瞧一瞧 setfacl 如何使用吧!
    [root@linux ~]# setfacl [-mxdb] 设置值
    参数:
    -m  :设置一个 ACL 规范;
    -x  :取消一个 ACL 规范;
    -b  :全部的 ACL 规范都移除;
    -d  :设置缺省的 ACL 规范,仅能针对目录使用。
    
    最常用的就是那个 -m 的参数啦!用来定义一笔 ACL 的设置规范说。那么 ACL 该如何设置呢? 不同的用户、群组与缺省权限设置方法有点不同,不过,基本上有底下这三种简易的设置方法:
    1. 针对用户
    设置值的规范为: u:[用户帐号列表]:[rwx]
    例如针对 dmtsai 这个用户来规范其权限为 rx ,则:
    [root@linux ~]# setfacl -m u:dmtsai:rx somefilename
    
    2. 针对群组来设置
    设置值的规范为: g:[群组名]:[rwx]
    例如针对 users 这个群组来规范其权限为 rw ,则:
    [root@linux ~]# setfacl -m g:users:rw somefilename
    
    3. 针对缺省权限来规范,类似 umask 的功能
    设置值的规范为: m:[rwx]
    例如假设缺省权限为 rwx,则:
    [root@linux ~]# setfacl -m m:rwx somefilename
    
    了解了上面的设置方式后,现在让我们来实际操作一下吧!假设:
    • 你已经将 /home 这个独立的 partition 设置了 ACL 的支持了,
    • 并且在 /home 底下设置了一个名称为 project 的目录,
    • 该目录要给 eric 这个用户,且属于 users 这个群组,缺省权限应该是 770 ;
    • 有个用户帐号名称为 jordan ,他属于 jordan 那个群组,但他想要进入到 project 那个目录来工作, 意思是说,jordan 在该目录下需有 w 的权限才行;
    • 有个用户他是其他班级的老师,名称为 tip ,群组名亦为 tip ,他想要进入该目录查阅所有文件数据, 但是不能够进行删除与添加的工作,亦即他不能拥有 w 的权限。
    在传统的 Linux 文件权限中,要达成上述的功能时,你得要让 jordan 与 tip 这两个用户加入 users 那个群组才行,但是 jordan 是希望可以在该目录内工作的,所以他必须要拥有 w 的权限, 而 tip 却仅能读取,所以他不能拥有 w 的权限!哇!如此一来,就无法完成上述的交代事项了! 此时我们只好通过 ACL 来单独的针对 tip/jordan 这两个用户来设置他的权限呐!整个流程可以是这样的:
    1. 创建该目录并规划好权限:
    [root@linux ~]# mkdir /home/project
    [root@linux ~]# chown eric:users /home/project
    [root@linux ~]# chmod 770 /home/project
    [root@linux ~]# ls -ld /home/project
    drwxrwx---  2 eric users 4096 Sep  5 15:54 /home/project/
    # 瞧!已经将需要的目录规划好了!用户/群组与权限都OK了;
    
    2. 创建 jordan 的使用权限(需要有 w):
    [root@linux ~]# cd /home
    [root@linux home]# setfacl -m u:jordan:rwx project
    
    [root@linux home]# getfacl project
    # file: project    <==前面三行只是指出这个文件名的传统 Linux 权限
    # owner: eric
    # group: users
    user::rwx          <==注意看,这是针对『缺省用户』的权限设置;
    user:jordan:rwx    <==这是针对 jordan 的权限设置
    group::rwx         <==这是针对『缺省群组』的权限设置
    mask::rwx          <==这玩意儿则是缺省属性啦!
    other::---
    # 上面这个输出共 8 行我们会在底下详细说明!
    
    [root@linux home]# ls -ld project
    drwxrwx---+ 2 eric users 4096 Sep  5 15:54 project
    # 看看!多了一个 + 的标志喔!
    
    那个 getfacl 指令可以用来取得某个文件名的 ACL 数据啦!至于输出的共 8 行数据你必须要这样看:
    • 第 1-3 行:前面三行会显示出这个文件的 Linux 传统属性,包括用户、群组与文件名,缺省会用 # 开头作为说明;

    • 接下来的每一行的输出会以底下的格式来处理:
      针对的目标(用户、群组等]:[各种帐号列表]:[rwx]
      针对的目标主要有:
      	user	用户
      	group	群组
      	mask	缺省权限
      	other	非本群组的其他用户
      各种帐号列表中,如果没有任何数据,如 user::rwx ,则代表缺省用户帐号;
      
      主要有三个字段,用『 : 』来隔开三个字段;

    • 第 4 行『user::rwx』:由于用户列表字段中没有填写任何帐号,所以代表这个权限是针对缺省用户, 亦即是这个目录的拥有人 eric 啦,是 eric 的权限为『 rwx 』的意思说!

    • 第 5 行『user:jordan:rwx』:用户 jordan 在这个目录下具有 rwx 的权限的意思啦!

    • 第 6 行『group::rwx』:没有填写群组名称,所以同样是缺省群组,亦即是那个 users 啰, 该群组的权限为『rwx』啦;

    • 第 7 行『mask::rwx』:缺省的 mask 为 rwx 的意思,这个 mask 是有用途的!底下会说明。

    • 第 8 行『other::---』:指的就是其他的未规定的用户与群组的权限了
    好了,现在 jordan 这位朋友当他进入 /home/project 后,立刻就会拥有 rwx 的权限了! 而不需要加入 users 这个群组呢!真是很方便吧!太好了! 另外,你如何知道某个文件名具有额外的 ACL 权限呢?可以参考上面最终的输出结果中, 会发现 /home/project 这个目录的权限项目竟然是出现『 drwxrwx---+ 』呢! 那个多出来的『 + 』就是表示该文件名有额外的 ACL 控制项目啦! 那接下来如何处理 tip 呢?同样使用 ACL 来控制:
    3. 设置 tip 这个用户的权限数据: 
    [root@linux home]# setfacl -m u:tip:rx project
    [root@linux home]# getfacl project
    # file: project
    # owner: eric
    # group: users
    user::rwx
    user:tip:r-x   <==瞧!多出来的咚咚啦!
    user:jordan:rwx
    group::rwx
    mask::rwx
    other::---
    
    如此一来, tip 这位用户则仅能进入该目录去读取而已,而无法进行写入的动作呢! 是否很方便啊!有了 ACL 的控制项目后,您就可以将你系统内的有需要使用到特殊权限设置的目录进行细部设置, 让你的系统变的更合理,更安全啊!


  • ACL 内的 mask 项目
    虽然这样就能够设置好一个 ACL 控制项目,不过你还需要了解到在 ACL 内的 mask 所代表的意义喔! 在上面的那个小案例当中,我们并没有去设置这个 mask,mask 需要与用户的权限进行逻辑运算 (AND) 后, 才是有效的权限呐(effective permission)!

    举例来说,如果你觉得你的目录要让所有的人都暂时仅能读取不能写入时,可以将 ACL 内的 mask 设置为 rx 即可, 那其他人就不需要再额外的设置了!看看底下这个例子:
    [root@linux ~]# cd /home
    [root@linux home]# setfacl -m m:rx project
    [root@linux home]# getfacl project
    # file: project
    # owner: eric
    # group: users
    user::rwx
    user:tip:r-x
    user:jordan:rwx        #effective:r-x
    group::rwx             #effective:r-x
    mask::r-x
    other::---
    
    上面的输出全部都是 getfacl 的输出结果,鸟哥并没有加工啊! ^_^! 原本的 jordan 具有『rwx』的权限,而 mask 仅有『r-x』,两者去比较后 『两者都有的权限才会生效,就称为有效权限 (effective permission) 啰』! 所以,jordan 则仅会有 rx 的权限而已啊!这样对 mask 的用法瞭了吗?
  • 一些常见的攻击手法与主机的保护方式

    我们由图一了解到数据发送到本机时所需要经过的几道防线后, 现在您应该比较清楚为何我们常常在基础篇里面一直谈到设置正确的权限可以保护您的主机了吧? 那么除了前面的谈到的主机基本保护之外, 通常人家是如何攻击你的 Linux 主机呢?底下我们就来谈一谈吧! 先了解一下人家是如何攻击你的,我们才有办法想到如何防御,您说是吧?!


  • 取得帐号信息后猜密码:
    由于很多人喜欢用自己的名字来作为帐号信息,因此帐号的取得是很容易的! 举例来说,如果你的朋友将你的 email address 不小心泄漏出去,例如: dmtsai@your.host.name 之类的样式, 那么人家就会知道你有一部主机,名称为 your.host.name,且在这部主机上面会有一个用户帐号, 帐号名称为 dmtsai ,之后这个坏家伙再利用某些特殊软件例如 nmap 来进行你主机的 port scan 之后,嘿嘿!他就可以开始通过你主机有启动的软件功能来猜你这个帐号的密码了!

    另外,如果你常常观察你的主机注册表,那你也会发现如果你的主机有启动 Mail server 的服务时, 你的注册表就会常常出现有些怪家伙尝试以一些奇怪的常见帐号在试图猜测你的密码, 举例来说像:admin, administrator, webmaster .... 之类的帐号,尝试来窃取你的私人信件。 如果你的主机真的有这类的帐号,而且这类的帐号还没有良好的密码规划,那就容易『中标』! 唉!真是麻烦!所以我们常讲,系统帐号千万不能给予密码,容易被猜密码啊

    这种猜密码的攻击方式算是最早期的入侵模式之一了,攻击者知道你的帐号,或者是可以猜出来你的系统有哪些帐号, 欠缺的就只是密码而已, 因此他会『很努力的』去猜你的密码,此时,你的密码规划如果不好的话,很容易就被攻击了! 主机也很容易被绑架啊!所以,良好的密码设置习惯是很重要的

    不过这种攻击方式比较费时,因为目前很多软件都有密码输入次数的限制, 如果连续输入三次密码还不能成功的登录,那该次连接就会被断线! 所以,这种攻击方式日益减少,目前偶而还会看到就是了!这也是初级 cracker 会使用的方式之一。 那我们要如何保护呢?基本方式是这样的:
    • 减少信息的曝光机会:例如不要将 Email Address 随意散布到 Internet 上头;
    • 创建较严格的密码设置规则:包括 /etc/shadow, /etc/login.defs 等文件的设置, 建议您可以参考基础篇内的 帐号管理那一章来规范你的用户密码变更时间等等, 如果主机够稳定且不会持续加入某些帐号时,也可以考虑使用 chattr 来限制帐号 (/etc/passwd, /etc/shadow) 的更改;
    • 完善的权限设置:由于这类的攻击方式会取得你的某个用户帐号的登录权限, 所以如果你的系统权限设置得宜的话,那么攻击者也仅能取得一般用户的权限而已, 对于主机的伤害比较有限啦!所以说,权限设置是重要的;

  • 利用系统的程序漏洞『主动』攻击:
    图一里面的第三个步骤中,我们知道如果你的主机有开放网络服务时, 就必须有启动某个网络软件嘛!我们也知道由于软件可能撰写方式的问题,可能产生一些会被 cracker 乱用的臭虫代码,而这些臭虫代码由于产生问题的大小,有分为 bug (臭虫,可能会造成系统的不稳定或当机) 与 Security (安全问题,代码撰写方式会导致系统的使用权限被恶意者所掌握) 等问题。

    当程序的问题被公布后,某些较高端的 cracker 会尝试撰写一些针对这个漏洞的攻击代码, 并且将这个代码放置到 cracker 常去的网站上面,借以推销自己的『功力』..... 鸟哥要提醒的是,这种代码『是很容易被取得的』。 当更多『盈盈美黛子(台语,闲闲没事干之意)』取得这些代码后,他可能会想要『试一试这个攻击程序的威力』, 所以就拿来『扫射』一番,如果你八字比较轻,或者当天星座学家说你比较倒楣时, 可能就会被不小心的攻击到......

    这种攻击模式是目前最常见的,因为攻击者只要拿到攻击程序就可以进行攻击了, 『而且由攻击开始到取得你系统的 root 权限不需要猜密码, 不需要两分钟,就能够立刻入侵成功』,所以『盈盈美黛子』们最爱的就是这个咚咚了。 但这个玩意儿本身是靠『你主机的程序漏洞』来攻击的,所以,如果你的主机随时保持在即时更新的阶段, 或者是关闭大部分不需要的程序,那就可以躲避过这个问题。因此,你应该要这样做:
    • 关闭不需要的网络服务:开的 port 越少,可以被入侵的管道越少, 一部主机负责的服务越单纯,越容易找出问题点。看看前面谈到的 限制 Linux 的连接端口口 一章吧!
    • 随时保持更新:这个没话讲!一定要进行的!参考前一章 网络升级套件
    • 关闭不需要的软件功能:举例来说,后面会提到的远程登录服务器 SSH 可以提供 root 由远程登录,那么危险的事情当然要给他取消啊!^_^

  • 利用社交工程作欺骗:
    社交工程 (Social Engineering) 指的其实很简单,就是通过人与人的交互来达到『入侵』的目的! @_@!人与人的交互可以入侵你的主机?鸟哥在呼咙你吗?当然不是。

    近日在台湾的社会你不是常看到某些人会以『退税、中奖、花小钱买贵重物品』等名义来欺骗善良老百姓, 让老百姓掏出口袋里的金钱给那些可恶的金光党吗?社交工程也是类似的方法。在大公司里面, 或许你可能会接到这样的电话:『我是人事部门的经理,我的帐号为何突然间不能登录了? 你给我看一看,恩?干脆直接帮我另建一个帐号,我告诉你我要的密码是....』。如果你一时不查给他帐号密码的话, 你的主机可能就这样被绑走了~

    社交工程的欺骗方法多的是,包括使用『好心的 email 通知』、『警告信函』、『中奖单』等等, 在在都是要欺骗你的帐号密码,有的则利用钓鱼方式来欺骗你在某些恶意网站上面输入你的帐号密码, 很讨厌的啦!那要如何防范呢?
    • 追踪对谈者:不要一味的相信对方,你必须要有信心的向上呈报, 不要一时心慌就中了计!
    • 不要随意透露帐号/密码等信息:最好不要随意在 Internet 上面填写这些数据, 真的很危险的!因为在 Internet 上面,你永远不知道对方屏幕前面坐着的是谁?

  • 利用程序功能的『被动』攻击:
    啥?除了主动攻击之外,还有所谓的被动攻击喔?没错啊,『系金ㄟ』!那如何作被动攻击呢? 那就得要由『恶意网站』讲起了。如果你喜欢上网随意浏览的话,那么有的时候可能会连上一些广告很多, 或者是一堆弹出式窗口的网站,这些网站有时还会很好心的『提供你很多好用的软件自动下载与安装』的功能, 如果该网站是你所信任的,例如 Red Hat, CentOS, Windows 官网的话,那还好, 如果是一个你也不清楚他是干嘛的网站,那你是否要同意下载安装该软件?

    如果你常常在注意一些网络危机处理的相关新闻时,常会发现 Windows 的浏览器 (IE) 有问题, 有时则是全部的浏览器 (Firefox, Netscap, IE...) 都会出现问题。那你会不会觉得奇怪啊, 怎么『浏览器也会有问题?』这是因为很多浏览器会主动的答应对方 WWW 主机所提供的各项程序功能, 或者是自动安装来自对方主机的软件,有时浏览器还可能由于程序发生安全问题, 让对方 WWW 浏览器得以发送恶意代码给你的主机来运行,嘿嘿!中标!

    那你又会想啊,那我干嘛浏览那样的恶意网站?喝!总是会有些粗心大意的时候啊! 如果你今天不小心收到一个 email ,里面告诉你你的银行帐号有问题, 希望你赶紧连上某个网页去看看你的帐号是否在有问题的行列中,你会不会去? 如果今天有个网络消息说某某网页在提供大特价商品,那你会不会去碰碰运气? 都是可能的啊!不过,这也就很容易被对方攻击到了。

    那如何防备啊?当然创建良好的习惯最重要了:
    • 随时更新主机上的所有套件:如果你的浏览器是没有问题的, 那对方传递恶意代码时,你的浏览器就不会运行,那自然安全的多啊!
    • 较小化软件的功能:举例来说,让你的收信软件不要主动的下载文件, 让你的浏览器在安装某些软件时,要通过你的确认后才安装,这样就比较容易克服一些小麻烦;
    • 不要连接到不明的主机:其实鸟哥认为这个才最难! 因为很多时候我们都用 google 在搜索问题的解决之道啊,那你如何知道对方是否是骗人的? 所以,前面两点防备还是很重要的!不要以为没有连接上恶意网站就不会有问题啊!

  • 蠕虫或木马的 rootkit:
    rootkit 意思是说可以取得 root 权限的一群工具组 (kit),就如同前面主动攻击程序漏洞的方法一样, rootkit 主要也是通过主机的程序漏洞。不过, rootkit 也会通过社交工程让用户下载、安装 rootkit 软件, 结果让 cracker 得以简单的绑架对方主机啊!

    rootkit 除了可以通过上述的方法来进行入侵之外,rootkit 还会伪装或者是进行自我拷贝, 举例来说,很多的 rootkit 本身就是蠕虫或者是木马间谍程序。蠕虫会让你的主机一直发送封包向外攻击, 结果会让你的网络带宽被吃光光,例如 2001-2003 年间的 Nimda, Code Red 等等;至于木马程序 (Trojan Horse) 则会对你的主机进行打开后门 (开一个 port 来让 cracker 主动的入侵),结果就是....绑架、绑架、绑架!

    rootkit 其实挺不好追踪的,因为很多时候他会主动的去修改系统观察的指令, 包括 ls, top, netstat, ps, who, w, last, find 等等,让你看不到某些有问题的程序, 如此一来,你的 Linux 主机就很容易被当成是跳板了!有够危险!那如何防备呢?
    • 不要随意安装不明来源的文件或者是不明网站的文件数据;
    • 不要让系统有太多危险的指令:例如 SUID/SGID 的程序, 这些程序很可能会造成用户不当的使用,而使得木马程序有机可趁!
    • 可以定时以 rkhunter 之类的软件来追查:有个网站提供 rootkit 程序的检查,你可以前往下载与分析你的主机:
      http://www.rootkit.nl/projects/rootkit_hunter.html

  • DoS 攻击法 ( Denial of Service )
    这类型的攻击中文翻译成『阻断式攻击』,这种攻击法也很要命,而且方法有很多,最常见的就属 SYN Flood 攻击法了!还记得我们在网络基础里面提到的,当主机接收了一个带有 SYN 的 TCP 封包之后,就会激活对方要求的 port 来等待连接,并且发送出回应封包 (带有 SYN/ACK 旗标的 TCP 封包),并等待 Client 端的再次回应。

    好了,在这个步骤当中我们来想一想,如果 cient 端在发送出 SYN 的封包后,却将来自 Server 端的确认封包丢弃,那么您的 Server 端就会一直空等,而且 Client 端可以通过软件功能,在短短的时间内持续发送出这样的 SYN 封包,那么您的 Server 就会持续不断的发送确认封包,并且打开大量的 port 在空等~呵呵!等到全部主机的 port 都激活完毕,那么.....系统就挂了!

    更可怕的是,通常攻击主机的一方不会只有一部!他会通过 Internet 上面的僵尸主机 (已经成为跳板,但网站主却没有发现的主机) 发动全体攻击,让你的主机在短时间内就立刻挂点。 这种 DoS 的攻击手法比较类似『玉石俱焚』的手段, 他不是入侵您的系统,而是要让您的系统挂点呢! 最常被用来作为阻断式服务的网络服务就是 WWW 了,因为 WWW 通常得对整个 Internet 开放服务。

    这种攻击方法也是最难处理的,因为要嘛就得要系统内核有支持自动抵挡 DoS 攻击的机制, 要嘛您就得要自行撰写侦测软件来判断!真是麻烦啊~而除非您的网站非常大, 并且『得罪不少人』,否则应该不会被 DoS 攻击啦! ^_^


  • 其他:
    上面提到的都是比较常见的攻击方法,是还有一些高竿的攻击法啦, 不过那些攻击法都需要有比较高的技术水准,例如 IP 欺骗。他可以欺骗你主机告知该封包来源是来自信任网域, 而且通过封包发送的机制,由攻击的一方持续的主动发送出确认封包与工作指令。 如此一来,你的主机可能就会误判该封包确实有回应,而且是来自内部的主机。

    不过我们知道互联网是有路由的,而每部主机在每一个时段的 ACK 确认码都不相同, 所以这个方式要达成可以登录,会比较麻烦,所以说,不太容易发生在我们这些小型主机上面啦! 不过你还是得要注意一下说:
    • 设置规则完善的防火墙:利用 Linux 内置的防火墙软件 iptables 创建较为完善的防火墙,可以防范部分的攻击行为;
    • 内核功能:这部份比较复杂,您必须要对系统内核有很深入的了解, 才有办法设置好你的内核网络功能。
    • 注册表与系统监控:你可以通过分析注册表来了解系统的状况, 另外也可以通过类似 MRTG 之类的监控软件 来即时了解到系统是否有异常,这些工作都是很好的努力方向!

  • 主机防护小结语:
    要让你的系统更安全,没有『三两三』是没办法达成的!我们也一直鼓吹, 『维护网站比架设网站还要重要』的观念!因为『一人得道鸡犬升天』,同样的道理:『一人中标全员挂点』, 不要以为你的主机没有啥重要数据,被入侵或被植入木马也没有关系, 因为我们的服务器通常会对内部来源的主机规范的较为宽松,如果你的主机在公司内部, 但是不小心被入侵的话,那么贵公司的服务器是否就会暴露在危险的环境当中了?

    另外,在蠕虫很『发达』的年代,我们也会发现只要局域网路里面有一部主机中标, 整个局域网路就会无法使用网络了,因为带宽已经被蠕虫塞爆! 如果老板发现他今天没有办法收信了,但无法收信的原因并非服务器挂点, 而是因为内部人员的某部个人电脑中了蠕虫,而那部主机中蠕虫的原因只是因为该用户不小心去看了一下色情网站, 你觉得老板会高兴的跟该员工一起看色情网站还是 fire 掉该人员?

    所以啊,主机防护还是很重要的!不要小看了!提供几个方向给大家思考看看吧:
    1. 创建完善的登录密码规则限制;
    2. 完善的主机权限设置;
    3. 设置自动升级与修补套件漏洞、及移除危险套件;
    4. 在每项系统服务的设置当中,强化安全设置的项目;
    5. 利用 iptables, TCP_Wrappers 强化网络防火墙;
    6. 利用主机监控软件如 MRTG 与 logwatch 来分析主机状况与注册表;
  • 被入侵后的修复工作

    如果你的主机被入侵的话,而你也由于了解到主机监控的需要,所以在最短的时间内发现此一事件, 那么该如何针对这个被入侵的主机来修复?那如果你要修复的话,你这个网管人员还需要哪些额外的技能? 底下我们就来谈一谈。

    网管人员的额外技巧与任务

    从前一小节的分析当中,您会发现网管还真的是挺累的,他需要对于操作系统有一定程度的熟悉, 对于进程的运作 (process) 与权限概念,则需要更了解!否则就麻烦了!那除了操作系统的基本概念之外, 咱们网管还需要啥特殊技巧呢?当然需要啊!其实一部主机最常发生问题的状况, 都是由『内部的网络误用所产生的』,所以啊,你只管好主机而已是『没有办法杜绝问题』的啦! 底下就来谈谈你还需要啥技巧呢?

  • 了解什么是需要保护的内容:
    我的天呐,还要知道什么是需要保护的呀?呵呵!没错,就是如此!由刚刚我们知道的主机入侵方法当中, 不难了解,只要有人坐在您的主机前面,那么任何事都有可能会发生!因此,如果您的主机相当的重要, 请『不要让任何人靠近!』您可以参考一下汤姆克鲁斯在『不可能的任务』里面要窃取一部电脑内的数据的困难度! ^_^""
    • 硬件:能锁就锁吧!
    • 软件:还包含最重要的数据呢!
  • 预防黑客( Black hats )的入侵:
    这可不是开玩笑的,什么是黑客呀!这是因为原本在西部电影当中,坏人都是戴黑色帽子的, 所以之前的人们就称网络攻击者为 Black hats 啦!在预防这方面的攻击者时,除了严格管制网络的登录之外, 还需要特别控制原本您的主机中的人物!就我们小网站来说,不要以为好朋友就随便他啦! 他说要指定密码是跟他的帐号相同比较好记,您就答应他!等到人家用他的密码登录您的主机,并破坏您的主机, 那可就得不偿失了!如果是大企业的话,那么员工使用网络时,也要分等级的呢! ^_^

  • 主机环境安全化:
    没什么好讲的,除了多关心,还是多关心!仔细的分析注册表,常常上网看看最新的安全通告,这都是最基础的! 还包含了以最快的速度更新有问题的套件!因为,越快更新您的套件,就越快可以杜绝黑客的入侵!

  • 防火墙规则的订定:
    这部份比较麻烦一些啦!因为您必需要不断的测试测试再测试!以取得优化的网络安全设置! 怎么说呢?要晓得的是,如果您的防火墙规则订定得太多的时候, 那么一个数据封包就要经过越多的关卡才能完整的通过防火墙,以进入到主机内部!嘿嘿! 这可是相当的花费时间的!会造成主机的性能不彰!特别留意这一点呢!

  • 即时维护您的主机:
    就像刚刚说的,您必需要随时维护您的主机,因为,防火墙不是一经设置之后就不用在再他了! 因为,再严密的防火墙,也会有漏洞的!这些漏洞包括防火规则设置不良、利用较新的侦测入侵技术、 利用您的旧软件的服务漏洞等等!所以,必需要即时维护您的主机呀!这方面除了分析 log files 之外,也可以借由即时侦测来进行这个工作!例如 PortSentry 就是蛮不错的一套软件呢!

  • 良好的教育训练课程:
    不是所有的人都是电脑网络高手,尤其虽然现在信息爆炸但是仍然有很多的机会会遇到电脑白痴呀! 这个时候,要晓得的是,我们对于内部网域通常没有太多的规范,那如果他用内部的电脑去做坏事怎么办? 有时候还是无心的~挖哩~所以说,需要特别的教育训练课程呀!这也是公司需要网管的主因之一!

  • 完善的备份计划:
    天有不测风云,人有旦夕祸福呀!什么人都不知道什么时候会有大地震、我们也都不知道什么时候会突然的硬盘挂掉去~ 所以说,完善的备份计划是相当重要的!此外,大概没有人会说他的主机是 100% 的安全吧! 那如果你的系统被入侵,造成数据的损毁时,你要如何复原你的主机啊?呵呵!一个良好的网站管理人员, 无时无刻都会进行重要数据的备份的!很重要啊! 这一部份请参考一下基础学习篇Linux 主机备份的内容吧! 本书后续的远程连接服务器 SSH 章节内也会提到一个很棒的 rsync 工具,您可以瞧瞧!
  • 入侵恢复工作

    所谓『百密一疏』啊,人不是神,总会有考虑不周的情况,万一您的主机就因为这『一疏』导致被入侵了, 那该怎么办?由上面的说明当中,我们知道『木马』是很严重的,因为他会在您的系统下开个后门(Back door)让攻击者可以登录您的主机,而且还会窜改您 Linux 上面的程序,让您找不到该木马程序!怎么办?

    很多朋友都习惯『反正只要将 root 的密码改回来就好了』 这样的观点,事实上,那样一部主机还是有被做为中继站的危险啊!所以, 万一您的主机被入侵了,最好的方法还是『重新安装Linux 』会比较干净

    那该如何重新安装呢?很多朋友一再地安装,却一再地被入侵~为什么呢?因为他没有『记取教训』啊!呵呵! 底下我们就来谈一谈,一部被入侵的主机应该如何修复比较好?
    1. 立即拔除网络线:

      既然发现被入侵了,那么第一件事情就是拿掉网络功能!拿掉网络功能最简单的作法自然就是拔掉网络线了! 事实上,拿掉网络线最主要的功能除了保护自己之外,还可以保护同网域的其他主机。怎么说呢?举个最近 (2003/08) 发病的疾风病毒好了,他会感染同网域之内的其他主机喔!所以,拔除网络线之后, 远程的攻击者立即就无法进入您的 Linux 主机,而且您还可以保护网域内的其他相关主机啊!

    2. 分析注册表信息,搜索可能的入侵途径:

      被入侵之后,决不是只要重新安装就好,还需要额外分析 『为什么我的主机这一次会被入侵,对方是如何入侵的?』, 如果您能够找出问题点,那么不但您的 Linux 功力立刻增强了,主机也会越来越安全喔! 而如果您不知道如何找出被入侵的可能途径,那么重新安装后,下次还是可能被以同样的方法入侵啊! 粉麻烦的啦!好了,那该如何找出入侵的途径呢?

      • 分析注册表:低级的 cracker 通常仅是利用工具软件来入侵您的系统,所以我们可以借由分析一些主要的注册表来找出对方的 IP 以及可能有问题的漏洞。可以分析 /var/log/messages, /var/log/secure 还有利用 last 指令来找出上次登录者的信息。

      • 检查主机开放的服务:很多 Linux 用户常常不晓得自己的系统上面开了多少的服务?我们说过, 每个服务都有其漏洞或者是不应该激活的增强型或者是测试型功能,所以,找出您系统上面的服务, 并且检查一下每个服务是否有漏洞,或者是在设置上面有了缺失,然后一个一个的整理吧!

      • 查找 Internet 上面的安全通报: 通过安全通报来了解一下最新的漏洞信息,说不定您的问题就在上面!

    3. 重要数据备份:

      主机被入侵后,显得问题相当的严重,为什么呢?因为主机上面有相当重要的数据啊! 如果主机上面没有重要的数据,那么直接重新安装就好了!所以,被入侵之后,检查完了入侵途径, 再来就是要备份重要的数据了。好了,问个问题,什么是『重要数据』? who, ps, ls 等等指令是重要数据吗?还是 httpd.conf 等设置档是重要数据?又或者是 /etc/passwd, /etc/shadow 才是重要数据?

      呵呵!基本上,重要的数据应该是『非 Linux 系统上面原有的数据』,例如 /etc/passwd, /etc/shadow, WWW 网页的数据, /home 里面的用户重要文件等等,至于 /etc/*, /usr/, /var 等目录下的数据,就不见得需要备份了。 注意:不要备份一些 binary 运行档,因为 Linux 系统安装完毕后本来就有这些文件,此外, 这些文件也很有可能『已经被窜改过了』,那备份这些数据,反而造成下次系统还是不干净!

    4. 重新全新安装:

      备份完了数据,再来就是重新安装 Linux 系统了。而在这次的安装中, 您最好选择适合您自己的安装套件即可,不要全部套件都给他安装上去啊!挺危险的!

    5. 套件的漏洞修补:

      记得啊,重新安装完毕之后,请立即更新您的系统套件,否则还是会被入侵的啦!鸟哥喜欢先在其他比较干净的环境下将 Internet 上面的漏洞修补套件下载下来,然后刻录起来,然后拿到自己的刚刚安装完成的系统上面,mount CD 之后全部给他更新,更新之后,并且设置了相关的防火墙机制,同时进行下一步骤『 关闭或移除不需要的服务』后,我才将网络线插上主机的网络卡上! 因为鸟哥不敢确定在安装完毕后,连上 Internet 去更新套件的这段时间,会不会又受到入侵攻击说....

    6. 关闭或移除不需要的服务:

      这个重要性不需要再讲了吧?!激活越少的服务,系统当然可以被入侵的可能性就比较低。

    7. 数据回复与恢复服务设置:

      刚刚备份的数据要赶紧的拷贝回来系统,同时将系统的服务再次的重新开放,请注意, 这些服务的设置最好能够再次的确认一下,避免一些不恰当的设置参数在里头喔!

    8. 连上 Internet:

      所有的工作都进行的差不多了,那么才将刚刚拿掉的网络线接上来吧!恢复主机的运作了!
    经过这一连串的动作后,您的主机应该会恢复到比较干净的环境,此时还不能掉以轻心, 最好还是参考防火墙的设置,并且多方面的参考 Internet 上面一些老手的经验,好让您的主机可以更安全一些!

    重点回顾

    • 要管制登录服务器的来源主机,得要了解网络封包的特性,这主要包括 TCP/IP 的封包协定, 以及重要的 Socket Pair ,亦即来源与目标的 IP 与 port 等。在 TCP 封包方面,则还得了解 SYN/ACK 等封包状态;
    • TCP 封包要进入我们 Linux 本机,至少需要通过 IP Filter, super daemon/TCP Wrappers, Daemons, 密码验证功能 等等步骤;
    • 主机的基本保护之一,就是拥有正确的权限设置。而复杂的权限设置可以利用 ACL 或者是 SELinux 来辅助;
    • ACL 必须要让 Filesystem 支持,故可以在 /etc/fstab 内加入 acl 的控制参数;
    • 关闭 SELinux 可在 /etc/selinux/config 文件内设置,亦可在内核功能中加入 selinux=0 的项目;
    • ACL 主要可针对 user, group, mask 来设置,可针对单一个人帐号设置权限;
    • 设置 ACL 的方法为使用 setfacl, 查阅则以 getfacl 指令来动作;
    • ACL 内的 mask 是很重要的,必须与用户的权限进行逻辑 AND 的运算,才会得到正确的最终权限;
    • rootkit 为一种取得 root 的工具组,您可以利用 rkhunter 来查找您主机是否被植入 rootkit;
    • 网管人员应该注意在员工的教育训练还有主机的完善备份方案上面;
    • 一些所谓的黑客软件,几乎都是通过您的 Linux 上面的套件漏洞来攻击 Linux 主机的;
    • 套件升级是预防被入侵的最有效方法之一;
    • 良好的注册表分析习惯可以在短时间内发现系统的漏洞,并加以修复。

    课后练习

    • 我老是发现我的系统怪怪的,似乎有点停顿的模样,怀疑可能是 CPU 负荷太大,所以要去检查一下系统相关的信息。请问,我该以什么指令去检查我的系统相关的信息?
    • 可以使用 top, sar, free, ps -aux, uptime, last 等功能去查找系统的相关信息喔!然后再以 kill 之类的指令删除;
    • 我怀疑我的系统上面有过多的具有 SUID 的文件存在,导致一般用户可以随意的取得 root 的权限,请问,我要如何找出这些具有 SUID 权限的文件?
    • 因为 SUID 是 4000 这个权限的模样,所以我可以这样做:
      find / -perm +4000
    • 我由国内一些 ftp 网站上下载了 Red Hat 公司发布的套件,我想安装他,但又不知道该套件文件是否被修改过! 请问我该如何确定这个套件的可用性?
    • 利用最简易的 MD5 编码来测试一下,例如『 md5sum 套件名称』,再比对与原始套件发布的 MD5 数据是否相同!?
    • 如果我发现使用『 setfacl -m u:dmtsai:rwx /path/to/file 』时,系统却显示『setfacl: Operation not supported』, 你认为是哪里出问题?
    • 这是由于您的 filesystem 没有激活 ACL 支持,或者是系统的内核不支持。 请先使用 mount -o remount,acl /mount_point 测试看能否支持 ACL ,若不支持时,则可能是由于内核版本太旧了。
    • 如果要设置 dmtsai 可以使用 /home/project 这个目录 (假设 /home 已经支持 ACL),在该目录内 dmtsai 可以拥有完整的权限。请问该如何设置该目录?
    • 除了使用 setfacl -m u:dmtsai:rwx /home/project 之外,还需要设置 setfacl -m m:rwx /home/project , 因为 ACL 在目录方面,必须通过用户权限及 mask 的逻辑运算后才能生效!
    • SELinux 是否为防火墙?
    • SELinux 并非防火墙,他是用来作为更细部权限设置的一个内核模块。
    • 良好的密码规划是防备主机的第一要务,请问 Linux 系统当中,关于密码相关的文件与规则设置在哪些文件里面?
    • 密码的设置规则在 /etc/login.defs 里面!至于密码文件在 /etc/shadow 内!
    • 简易说明,当一部主机被入侵之后,应该如何处理?
    • 找出问题、重新安装、漏洞修补、数据还原!请参考本章最后一节的说明。

    参考数据

    修改历史:
    2002/08/12:第一次完成日期!
    2003/08/23:重新编排与增加重点回顾、课后练习
    2006/08/31:将旧的文章移动到此处
    2006/09/06:增加 SELinux 的简单说明,增加 ACL 的控制项目!
    其他链接
    环境工程模式篇
    鸟园讨论区
    鸟哥旧站

    今日 人数统计
    昨日 人数统计
    本月 人数统计
    上月 人数统计