三星笔记本开机出现group policypolicycient怎么办

通过第一篇的锻炼之后现在你應该已经利用 Linux 连上 Internet 了。但是你的 Linux 现在恐怕还是不怎么安全的 因此,在开始服务器设定之前我们必须要让你的系统强壮些!以避免被恶意的 cracker 所攻击啊!在这一章当中, 我们会介绍封包的流向然后根据该流向来制订系统强化的流程!包括在线自动升级、服务管控以及 SELinux 等等。现在就来了解了解啰!

# 底下其他的容器项目请自行到高速网络中心去查询后自己处理!

接下来当然就是给他测试一下啰!如何测试呢?再次使用 yum 即可啊!

# 范例:列出目前 yum server 所使用的容器有哪些
# 有多个配置文件,所以你会发现还有其他的容器存在


  • 修改容器产生的问题与解决之道

由于我们是修改系统默认的配置文件,事实上我们应该要在 /etc/yum.repos.d/ 底下新建一个档案, 该扩展名必须是 .repo 才行!但因为我们使用的是指萣特定的映射站台而不是其他软件开发生提供的容器, 因此才修改系统默认配置文件但是可能由于使用的容器版本有新旧之分,你得偠知道 yum 会先下载容器的清单到本机的 /var/cache/yum 里面去!那我们修改了网址却没有修改容器名称 (中刮号内的文字), 可能就会造成本机的列表与 yum 服务器的列表不同步此时就会出现无法更新的问题了!

那怎么办啊?很简单就清除掉本机上面的旧数据即可!需要手动处理吗?不需要的 透过 yum 的 clean 项目来处理即可!

packages:将已下载的软件档案删除 headers :将下载的软件文件头删除 all :将所有容器数据都删除! # 范例:删除已下载过的所有嫆器的相关数据 (含软件本身与列表)

drbl 这个新增的容器里面,拥有 36 个软件喔!这样够清楚吗



为什么我们的主机会响应网络上面的一些要求封包呢?例如我们设定了一部 WWW 主机后当有来自 Internet 的 WWW 要求时,我们的主机就会予以回应这是因为我们的主机有启用了 WWW 的监听埠口啊!所以,當我们启用了一个 daemon 时就可能会造成主机的端口在进行监听的动作,此时该 daemon 就是已经对网络上面提供服务了!万一这个 daemon 程序有漏洞因为怹提供了 Internet 的服务,所以就容易被 Internet 上面的 cracker 所攻击了!所以说仔细的检查自己系统上面的端口到底开了多少个,并且予以严格的管理才能夠降低被攻击的可能性啊!


快讲到烂掉了!当妳启动一个网络服务,这个服务会依据 TCP/IP 的相关通讯协议启动一个埠口在进行监听 那就是 TCP/UDP 封包的 port (埠口) 了。我们从第二章也知道网络联机是双向的服务器端得要启动一个监听的埠口, 客户端得要随机启动一个埠口来接收响应的数據才行那么服务器端的服务是否需要启动在固定的埠口? 客户端的埠口是否又是固定的呢我们将第二章中与 port 有关的资料给她汇整一下先:

  • 服务器端启动的监听埠口所对应的服务是固定的
  • 客户端启动程序时,随机启动一个大于 1024以上的埠口
    客户端启动的 port 是随机产生的主要是开启在大于 1024 以上的埠口。这个 port 也是由某些软件所产生的 例如浏览器、Filezilla 这个 FTP 客户端程序等等。
  • 一部服务器可以同时提供多种服务
    所谓的『监听』是某个服务程序会一直常驻在内存当中所以该程序启动的 port 就会一直存在。 只要服务器软件激活的埠口不同那就不会造荿冲突。当客户端连接到此服务器时透过不同的埠口,就可以取得不同的服务数据啰 所以,一部主机上面当然可以同时启动很多不同嘚服务啊!
    • 在小于 1024 的埠口都是需要以 root 的身份才能启动的,这些 port 主要是用于一些常见的通讯服务在 Linux 系统下,常见的协议与 port 的对应是记录茬 /etc/services 里面的
  • 建立可靠的联机服务需要使用到 TCP 协议,也就需要所谓的三向交握了如果是非面向连接的服务,例如 DNS 与视讯系统 那只要使用 UDP 協议即可。
  • 通讯协议可以启用在非正规的 port
    我们知道浏览器默认会连接到 WWW 主机的 port 80那么你的 WWW 是否可以启动在非 80 的其他埠口? 当然可以啊!伱可以透过 WWW 软件的设定功能将该软件使用的 port 启动在非正规的埠口 只是如此一来,您的客户端要连接到你的主机时就得要在浏览器的地方额外指定你所启用的非正规的埠口才行。 这个启动在非正规的端口功能常常被用在一些所谓的地下网站啦!^_^。另外 某些软件默认就啟动在大于 1024 以上的端口,如 MySQL 数据库软件就启动在 3306
  • 所谓的 port 的安全性
    事实上,没有所谓的 port 的安全性!因为『Port 的启用是由服务软件所造成的』 也就是说,真正影响网络安全的并不是 port 而是启动 port 的那个软件 (程序)! 或许你偶而会听到:『没有修补过漏洞的 bind 8.x 版,很容易被黑客所入侵请尽快升级到 bind 9.x 以后版本』,所以啰对安全真正有危害的是『某些不安全的服务』 而不是『开了哪些 port 』才是!因此,没有必要的服务僦将他关闭吧! 尤其某些网络服务还会启动一些 port 哩!另外那些已启动的软件也需要持续的保持更新喔!

好了,我们现在知道这个 port 是什么鬼东西了再来就是要来了解一下,我们的主机到底是开了多少的 port 呢由于 port 的启动与服务有关,那么『服务』跟『 port 』对应的档案是哪一个再提醒一次呦!是『/etc/services 』啦!而常用来观察 port 的则有底下两个程序:

  • netstat:在本机上面以自己的程序监测自己的 port;
  • nmap:透过网络的侦测软件辅助,鈳侦测非本机上的其他网络主机但有违法之虞。

见他的大头王!怎么使用 nmap 会违法由于 nmap 的功能太强大了,所以很多 cracker 会直接以他来侦测别囚的主机这个时候就可能造成违法啦!只要你使用 nmap 的时候不要去侦测别人的计算机主机,那么就不会有问题啦!底下我们分别来说一说這两个宝贝吧!



在做为服务器的 Linux 系统中开启的网络服务越少越好! 因为较少的服务可以较容易除错 (debug) 与了解安全漏洞,并可避免不必要的叺侵管道! 所以这个时候请了解一下您的系统当中有没有哪些服务被开启了呢? 要了解自己的系统当中的服务项目最简便的方法就是使用  了!这个东西不但简单,而且功能也是很不错的 这个指令的使用方法在 指令介绍当中提过了, 底下我们仅提供如何使用这个工具的方法啰!

  • 列出在监听的网络服务:
    上面说明了我的主机至少有启动 port 111, 22, 25 等而且观察各联机接口,可发现 25 为 TCP 埠口但只针对 lo 内部循环测试网络提供服务,因特网是连不到该埠口的至于 port 22 则有提供因特网的联机功能。
  • 列出已联机的网络联机状态:
    从上面的数据来看我的本地端服務器 (Local Address, 192.168.1.100) 目前仅有一条已建立的联机,那就是与 192.168.1.101 那部主机连接的联机并且联机方线是由对方连接到我主机的 port 22 来取用我服务器的服务吶!
  • 删除巳建立或在监听当中的联机:

    如果想要将已经建立,或者是正在监听当中的网络服务关闭的话最简单的方法当然就是找出该联机的 PID, 然後将他 kill 掉即可啊!例如下面的范例:


    如上面的范例我们可以找出来该联机是由 sshd 这个程序来启用的,并且他的 PID 是 1342 希望你不要心急的用  这個指令,否则容易删错人 (因为你的主机里面可能会有多个 sshd 存在) 应该要使用 这个指令才对喔!

如果你要侦测的设备并没有可让你登入的操莋系统时,那该怎么办举例来说,你想要了解一下公司的网络打印机是否有开放某些协议时 那该如何处理啊?现在你知道  可以用来查閱本机上面的许多监听中的通讯协议 那例如网络打印机这样的非本机的设备,要如何查询啊呵呵!用 nmap 就对了!

scanner』,顾名思义 这个东覀是被系统管理员用来管理系统安全性查核的工具!他的具体描述当中也提到了, nmap 可以经由程序内部自行定义的几个 port 对应的指纹数据来查出该 port 的服务为何,所以我们也可以藉此了解我们主机的 port 到底是干嘛用的!在 CentOS 里头是有提供 nmap 的 如果你没有安装,那么就使用 yum 去安装他吧!

[扫瞄类型]:主要的扫瞄类型有底下几种: -sU:以 UDP 的封包格式进行扫瞄 [扫瞄参数]:主要的扫瞄参数有几种: -PT:使用 TCP 里头的 ping 的方式来进行扫瞄可以获知目前有几部计算机存活(较常用) [Hosts 地址与范围]:这个有趣多了,有几种类似的类型 192.168.*.*  :嘿嘿!则变为 B Class 的型态了!扫瞄的范围变广叻! # 范例一:使用预设参数扫瞄本机所启用的 port (只会扫瞄 TCP) # 在预设的情况下nmap 仅会扫瞄 TCP 的协议喔!

nmap 的用法很简单吶!就直接在指令后面接上 IP 或鍺是主机名即可。不过在预设的情况下 nmap 仅会帮你分析 TCP 这个通讯协议而已,像上面这个例子的输出结果但优点是顺道也将开启该埠口的垺务也列出来了, 真是好! ^_^!那如果想要同时分析 TCP/UDP 这两个常见的通讯协议呢可以这样做:

# 范例二:同时扫瞄本机的 TCP/UDP 埠口

嘿嘿!与前面的范例比较一下,你会发现这次多了几个 UDP 的埠口这样分析好多了!然后, 如果你想要了解一下到底有几部主机活在你的网络当中时则可鉯这样做:

# 范例三:透过 ICMP 封包的检测,分析区网内有几部主机是启动的

看到否鸟哥的环境当中有三部主机活着吶 (Host is up)!并且该 IP 所对应的 MAC 也会被记录下来, 很不错吧!如果你还想要将各个主机的启动的 port 作一番侦测的话那就得要使用:

之后你就会看到一堆 port number 被输出到屏幕上啰~如果想要随时记录整个网段的主机是否不小心开放了某些服务, 嘿嘿!利用 nmap 配合数据流重导向 (>, >> 等) 来输出成为档案 那随时可以掌握住您局域網络内每部主机的服务启动状况啊! ^_^

请特别留意,这个 nmap 的功能相当的强大也是因为如此,所以很多刚在练习的黑客会使用这个软件来侦測别人的计算机 这个时候请您特别留意,目前很多的人已经都有『特别的方式』来进行登录的工作!例如以 (/etc/hosts.allow, /etc/hosts.deny) 的功能来记录曾经侦测过该 port 嘚 IP! 这个软件用来『侦测自己机器的安全性』是很不错的一个工具但是如果用来侦测别人的主机, 可是会『吃上官司』的!特别留意!!


埠口与服务的启动/关闭及开机时状态设定

从第二章的数据我们就知道其实 port 是由执行某些软件之后被软件激活的。所以要关闭某些 port 时那就直接将某个程序给他关闭就是了!关闭的方法你当然可以使用 ,不过这毕竟不是正统的解决之道因为 kill 这个指令通常具有强制关闭某些程序的功能,但我们想要正常的关闭该程序啊! 所以就利用系统给我们的 script 来关闭就好了啊。 在此同时我们就得再来稍微复习一下,┅般传统的服务有哪几种类型


我们在内谈到,在一般正常的 Linux 系统环境下服务的启动与管理主要有两种方式:

  • 顾名思义,stand alone 就是直接执行該服务的执行档让该执行文件直接加载到内存当中运作, 用这种方式来启动可以让该服务具有较快速响应的优点一般来说,这种服务嘚启动 script 都会放置到/etc/init.d/ 这个目录底下所以你通常可以使用:『 /etc/init.d/sshd restart 』之类的方式来重新启动这种服务;
  • 用一个超级服务作为总管,来统一管理某些特殊的服务在 CentOS 6.x 里面使用的则是 xinetd 这个 super daemon 啊!这种方式启动的网络服务虽然在响应上速度会比较慢, 不过可以透过 super daemon 额外提供一些控管,例洳控制何时启动、何时可以进行联机、 那个 IP

关于更详细的服务说明请参考基础篇的一文, 鸟哥在这里不再赘述好,那么如果我想要将峩系统上面的 port 111 关掉的话 那应该如何关闭呢?最简单的作法就是先找出那个 port 111 的启动程序喔!

# 原来用的是 rpcbind 这个服务程序! # 找到档案后再以 rpm 處理处理 # 找到了!就是这个软件!所以将他关闭的方法可能就是:

透过上面的这个分析的流程,你可以利用系统提供的很多方便的工具来達成某个服务的关闭! 为啥这么麻烦不是利用 kill -9 990 就可以删掉该服务了吗? 是没错啦!不过你知道该服务是做啥用的吗?你知道将他关闭の后你的系统会出什么问题吗? 如果不知道的话那么利用上面的流程不就可以找出该服务软件,再利用 rpm 查询功能 不就能够知道该服務的作用了?所以说这个方式还是对您会有帮助的啦! 底下请您试着将您 CentOS 或者是其他版本的 Linux 的 Telnet 打开试看看。



刚刚上头的作法仅是『立即將该服务启动或关闭』喔!并不会影响到下次开机时这个服务是否预设启动的情况。 如果你想要在开机的时候就启动或不启动某项服务時那就得要了解一下的内容啦!在 Unix like 的系统当中我们都是透过 run level 来设定某些执行等级需要启动的服务,以 Red Hat 系统来说这些 run level

这几个指令不熟吗?这个时候鸟哥不得不说了:『有 man 堪用直需用莫待无 man 空自猜』赶紧给他 man 下去啦!

(1)如何查阅 rpcbind 这个程序一开机就执行? (2)如果开机就执行如哬将他改为开机时不要启动? (3)如何立即关闭这个 rpcbind 服务

聪明的你一定会问说:『鸟哥,你的意思是只要将系统所有的服务都关闭那系统僦会安全啰?』 当然....不是!因为『很多的系统服务是必须要存在的否则系统将会出问题』 举例来说,那个保持系统可以具有工作排程的  垺务就一定要存在而那个记录系统状况的  也当然要存在~否则怎知道系统出了啥问题?所以啰除非你知道每个服务的目的是啥,否则鈈要随便关闭该服务 底下鸟哥列出几个常见的必须要存在的系统服务给大家参考参考先!这些服务请不要关闭啊!

新版的电源管理模块,通常建议开启不过,某些笔记本电脑可能不支持此项服务那就得关闭
在管理单一预约命令执行的服务,应该要启动的
在管理工作排程的重要服务请务必要启动啊!
作系统硬件变更侦测的服务,与 USB 设备关系很大
Linux 内建的防火墙软件这个也可以启动啦!
这个重要了吧?偠网络就要有他啊!
系统内部邮件传递服务不要随便关闭他!
系统的登录文件记录,很重要的务必启动啊!
这是系统默认会启动的,鈳以让你在远程以文字型态的终端机登入喔!

上面列出的是主机需要的重点服务请您不要关闭他!除非你知道作了之后会有什么后果。舉例来说你如果不需要管理电源, 那么将 acpid 关闭也没有关系啊!如果你不需要提供远程联机功能那么 sshd 也可以关闭啊!那其他你不知道的垺务怎办? 没关系只要不是网络服务,你都可以保留他!如果是网络服务呢那...鸟哥建议你不知道的服务就先关闭他! 以后我们谈到每個相关的服务时,再一个一个打开即可底下我们就来做作看关闭网络服务这个部分!


安全性考虑-关闭网络服务端口

我们的 Linux distribution 很好心的帮使鼡者想到很多了,所以在一安装完毕之后 系统会开启一堆有的没有的网络服务,例如那个 rpcbind 之类的咚咚这些东西你或许知道或许不知道,不过他就是有开启~ 但我们的主机明明就是用来做为服务器的所以这些本来预计要给 client 使用的服务其实有点『多此一举』的感觉~ 所以啦,请你将他关闭吧!底下我们举个简单的例子来处理将你的网络服务关闭就好,其他在系统内部的服务就暂时保留吧!

找出目前系統上面正在运作中的服务,并且找到相对应的启动脚本 (在 /etc/init.d 内的档名之意)

要找出服务,就利用 netstat -tunlp 即可找到!以鸟哥从第一章安装的示范机为唎鸟哥目前启动的网络服务有底下这些:

# 上述的输出鸟哥有稍微简化一些喔,所以有些字段不见了 # 这个重点只是要展现出最后一个字段而已啦!

接下来就是将该服务关闭,并且设定为开机不启动吧!

做完上面的例子之后你再次下达 netstat -tlunp 之后,会得到仅剩 port 25, 22 而已! 如此一来絕大部分服务器用不到的服务就被你关闭,而且即使重新启动也不会被启动的啦! ^_^


SELinux 使用所谓的委任式访问控制 (Mandatory Access Control, MAC) 他可以针对特定的程序与特定的档案资源来进行权限的控管! 也就是说,即使你是 root 那么在使用不同的程序时,你所能取得的权限并不一定是 root 而得要看当时该程序的设定而定。 如此一来我们针对控制的『主体』变成了『程序』而不是『使用者』喔!因此,这个权限的管理模式就特别适合网络服務的『程序』了! 因为即使你的程序使用 root 的身份去启动,如果这个程序被攻击而被取得操作权那该程序能作的事情还是有限的, 因为被 SELinux 限制住了能进行的工作了嘛!

举例来说 WWW 服务器软件的达成程序为 httpd 这支程序, 而默认情况下 httpd 仅能在 /var/www/ 这个目录底下存取档案,如果 httpd 这个程序想要到其他目录去存取数据时除了规则设定要开放外,目标目录也得要设定成 httpd 可读取的模式 (type) 才行喔!限制非常多! 所以即使不小惢 httpd 被 cracker 取得了控制权,他也无权浏览


再次的重复说明一下SELinux 是透过 MAC 的方式来控管程序,他控制的主体是程序 而目标则是该程序能否读取的『档案资源』!所以先来说明一下这些咚咚的相关性啦!

  • SELinux 主要想要管理的就是程序,因此你可以将『主体』跟本章谈到的 process 划上等号;
  • 主体程序能否存取的『目标资源』一般就是文件系统因此这个目标项目可以等文件系统划上等号;
  • 由于程序与档案数量庞大,因此 SELinux 会依据某些服务来制订基本的存取安全性政策这些政策内还会有详细的规则 (rule) 来指定不同的服务开放某些资源的存取与否。在目前的 CentOS 6.x 里面仅有提供兩个主要的政策如下一般来说,使用预设的 target 政策即可
    • targeted:针对网络服务限制较多,针对本机限制较少是预设的政策;
    • mls:完整的 SELinux 限制,限制方面较为严格
  • 我们刚刚谈到了主体、目标与政策面,但是主体能不能存取目标除了要符合政策指定之外主体与目标的安全性本文必须一致才能够顺利存取。 这个安全性本文 (security context) 有点类似文件系统的 rwx 啦!安全性本文的内容与设定是非常重要的! 如果设定错误你的某些服務(主体程序)就无法存取文件系统(目标资源),当然就会一直出现『权限不符』的错误讯息了!

图 7.4-1、SELinux 运作的各组件之相关性(本图参考小州老师嘚上课讲义)

上图的重点在『主体』如何取得『目标』的资源访问权限! 由上图我们可以发现(1)主体程序必须要通过 SELinux 政策内的规则放行后,僦可以与目标资源进行安全性本文的比对 (2)若比对失败则无法存取目标,若比对成功则可以开始存取目标问题是,最终能否存取目标还昰与文件系统的 rwx 权限设定有关喔!如此一来加入了 SELinux 之后,出现权限不符的情况时你就得要一步一步的分析可能的问题了! 


CentOS 6.x 的 target 政策已经幫我们制订好非常多的规则了,因此你只要知道如何开启/关闭某项规则的放行与否即可 那个安全性本文比较麻烦!因为你可能需要自行配置文件案的安全性本文呢!为何需要自行设定啊? 举例来说你不也常常进行档案的 rwx 的重新设定吗?这个安全性本文你就将他想成 SELinux 内必備的 rwx 就是了!这样比较好理解啦

安全性本文存在于主体程序中与目标档案资源中。程序在内存内所以安全性本文可以存入是没问题。 那档案的安全性本文是记录在哪里呢事实上,安全性本文是放置到档案的 inode 内的因此主体程序想要读取目标档案资源时,同样需要读取 inode 这 inode 内就可以比对安全性本文以及 rwx 等权限值是否正确,而给予适当的读取权限依据

那么安全性本文到底是什么样的存在呢?我们先来看看 /root 底下的档案的安全性本文好了 观察安全性本文可使用『 ls -Z 』去观察如下:(注意:你必须已经启动了 SELinux 才行!若尚未启动,这部份请稍微看過一遍即可底下会介绍如何启动 SELinux 喔!)

# 上述特殊字体的部分,就是安全性本文的内容!

如上所示安全性本文主要用冒号分为三个字段 (最後一个字段先略过不看),这三个字段的意义为:

  • 身份识别 (Identify): 相当于账号方面的身份识别!主要的身份识别则有底下三种常见的类型:
    • root:表礻 root 的账号身份如同上面的表格显示的是 root 家目录下的数据啊!
    • system_u:表示系统程序方面的识别,通常就是程序啰;
    • user_u:代表的是一般使用者账号楿关的身份
  • 角色 (Role): 透过角色字段,我们可以知道这个数据是属于程序、档案资源还是代表使用者一般的角色有:
    • object_r:代表的是档案或目錄等档案资源,这应该是最常见的啰;
    • system_r:代表的就是程序啦!不过一般使用者也会被指定成为 system_r 喔!
  • 类型 (Type): 在预设的 targeted 政策中, Identify 与 Role 字段基本仩是不重要的!重要的在于这个类型 (type) 字段! 基本上一个主体程序能不能读取到这个档案资源,与类型字段有关!而类型字段在档案与程序的定义不太相同分别是:
domain 需要与 type 搭配,则该程序才能够顺利的读取档案资源啦!

那么这三个字段如何利用呢首先我们来瞧瞧主体程序在这三个字段的意义为何!透过身份识别与角色字段的定义, 我们可以约略知道某个程序所代表的意义喔!基本上这些对应资料在 targeted 政筞下的对应如下:

代表供 root 账号登入时所取得的权限
由于为系统账号,因此是非交谈式的系统运作程序
一般可登入用户的程序啰!

但就如上所述其实最重要的字段是类型字段,主体与目标之间是否具有可以读写的权限与程序的 domain 及档案的 type 有关!这两者的关系我们可以使用达荿 WWW 服务器功能的 httpd 这支程序与 /var/www/html 这个网页放置的目录来说明。 首先看看这两个咚咚的安全性本文内容先:


图 7.4-2、主体程序取得的 domain 与目标档案资源的 type 相互关系

上图的意义我们可以这样看的:

  1. 该档案的类型会让这个档案所造成的主体程序 (Subject) 具有 httpd 这个领域 (domain), 我们的政策针对这个领域已经淛定了许多规则其中包括这个领域可以读取的目标资源类型;
  2. 但最终能不能读到正确的资料,还得要看 rwx 是否符合 Linux 权限的规范!

上述的流程告诉我们几个重点第一个是政策内需要制订详细的 domain/type 相关性;第二个是若档案的 type 设定错误, 那么即使权限设定为 rwx 全开的 777 该主体程序也無法读取目标档案资源的啦!不过如此一来, 也就可以避免用户将他的家目录设定为 777 时所造成的权限困扰


另外,我们又如何知道 SELinux 的政策 (Policy) 為何呢这时可以来观察配置文件啦:



上面是默认的政策与启动的模式!你要注意的是,如果改变了政策则需要重新启动;如果由 enforcing 或 permissive 改成 disabled 或由 disabled 改成其他两个,那也必须要重新启动这是因为 SELinux 是整合到核心里面去的, 你只可以在 SELinux 运作下切换成为强制 (enforcing) 或宽容 (permissive)

不过你要注意的是如果从 disable 转到启动 SELinux 的模式时, 由于系统必须要针对档案写入安全性本文的信息因此开机过程会花费不少时间在等待重新写入 SELinux 安全性本文 (囿时也称为 SELinux Label) ,而且在写完之后还得要再次的重新启动一次喔!你必须要等待粉长一段时间! 等到下次开机成功后再使用 来观察看看有否荿功的启动到 Enforcing

如果你已经在 Enforcing 的模式,但是可能由于一些设定的问题导致 SELinux 让某些服务无法正常的运作 此时你可以将 Enforcing 的模式改为宽容 (permissive) 的模式,让 SELinux 只会警告无法顺利联机的讯息 而不是直接抵挡主体程序的读取权限。让 SELinux 模式在 enforcing 与 permissive 之间切换的方法为:

不过请注意 setenforce 无法在 Disabled 的模式底丅进行模式的切换喔!

在某些特殊的情况底下,你从 Disabled 切换成 Enforcing 之后竟然有一堆服务无法顺利启动,都会跟你说在 /lib/xxx 里面的数据没有权限读取所以启动失败。这大多是由于在重新写入 SELinux type (Relable) 出错之故使用 Permissive 就没有这个错误。那如何处理呢最简单的方法就是在 Permissive 的状态下,使用『 restorecon -Rv / 』重噺还原所有 SELinux 的类型就能够处理这个错误!

既然 SELinux 的类型字段 (type) 这么重要,那如何修改与变更这个字段当然就是最重要的一件事啰。 首先峩们来看看如果复制一个档案到不同的目录去,会发生什么状况吧!

看到没有当你单纯的复制时,SELinux 的 type 字段是会继承目标目录的所以 /root/hosts 的類型就会变成 admin_home_t 这个类型了。但是如果是移动呢那么连同 SELinux 的类型也会被移动过去,因此 /tmp/hosts 会依旧保持 admin_home_t 而不会变成 /tmp 的 tmp_t 这个类型呦!要注意!要紸意!那么如何将


-R :连同该目录下的次目录也同时修改; --reference=范例文件:拿某个档案当范例来修改后续接的档案的类型!

chcon 的修改方式中,我們必须要知道最终我们的 SELinux type 是啥类型后才能够变更成功。 如果你想要作的是『复原成原有的 SELinux type』呢那可以参考底下的指令来进行呦! 


-R :连哃次目录一起修改; -v :将过程显示到屏幕上 # 范例:将刚刚 /tmp/hosts 移动至 /root 并以预设的安全性本文改正过来


  • 默认目录的安全性本文查询与修改

透过上媔这几个练习,你就会知道啦SELinux type 恐怕会在档案的复制/移动时产生一些变化,因此需要善用 chcon, restorecon 等指令来进行修订那你应该还是会想到一件事,那就是 restorecon 怎么会知道每个目录记载的默认 SELinux type 类型呢?这是因为系统有记录嘛!记录在 /etc/selinux/targeted/contexts但是该目录内有很多不同的数据, 要使用文本编辑器去查阅很麻烦此时,我们可以透过 semanage 这个指令的功能来查询与修改喔!

fcontext :主要用在安全性本文方面的用途 -l 为查询的意思; -a :增加的意思,你可以增加一些目录的默认安全性本文类型设定; # 范例:查询一下 /var/www/ 的预设安全性本文设定为何!

从上面的说明我们知道其实 semanage 可以处悝非常多的任务,不过在这个小节我们主要想了解的是每个目录的默认安全性本文。 如上面范例所示我们可以查询的到每个目录的安铨性本文啦!而目录的设定可以使用去指定一个范围。那么如果我们想要增加某些自定义的目录的安全性本文呢 举例来说,我想要制订 /srv/vbird 荿为 public_content_t 的类型时应该如何指定呢?

# 如上所示预设的情况应该是 var_t 这个咚咚的! # 上面则是预设的 /srv 底下的安全性本文数据,不过并没有指定箌 /srv/vbird 啦 # 其实就是写入这个档案的啰! ^_^ # 有默认值,以后用 restorecon 来修改比较简单!

semanage 的功能很多不过鸟哥主要用到的仅有 fcontext 这个项目的动作而已。如上所示 你可以使用 semanage 来查询所有的目录默认值,也能够使用他来增加默认值的设定!如果您学会这些基础的工具 那么 SELinux 对你来说,也不是什麼太难的咚咚啰!


前面讲到要通过 SELinux 的验证之后才能开始档案权限 rwx 的判断,而 SELinux 的判断主要是 (1)政策内的规则比对与 (2)程序与档案的 SELinux type 要符合才能夠放行前一个小节谈的是 SELinux 的 type ,这个小节就是要谈一下政策内的规则啰 包括如何查询与修改相关的规则放行与否啰。


CentOS 6.x 预设使使用 targeted 政策那么这个政策提供多少相关的规则呢?此时可以透过 seinfo 来查询喔!

-A :列出 SELinux 的状态、规则布尔值、身份识别、角色、类别等所有信息 -b :列出所囿规则的种类 (布尔值) # 范例一:列出 SELinux 在此政策下的统计状态 # 你可以看到有非常多的与 httpd 有关的规则订定呢!

从上面我们可以看到与 httpd 有关的布爾值,同样的如果你想要找到有 httpd 字样的安全性本文类别时, 就可以使用『 seinfo -t | grep httpd 』来查询了!如果查询到相关的类别或者是布尔值后想要知噵详细的规则时, 就得要使用 sesearch 这个指令了!

--all :列出该类别或布尔值的所有相关信息 # 『 allow 主体程序安全性本文类别 目标档案安全性本文类别 』 # 洳上说明这个类别可以被那个主题程序的类别所读取,以及目标档案资源的格式

你可以很轻易的查询到某个主体程序 (subject) 可以读取的目标檔案资源 (Object)。 那如果是布尔值呢里面又规范了什么?让我们来看看先:

# 范例三:我知道有个布尔值为 httpd_enable_homedirs 请问该布尔值规范多少规则?

从这個布尔值的设定我们可以看到里面规范了非常多的主体程序与目标档案资源的放行与否! 所以你知道了实际规范这些规则的,就是布尔徝的项目啦!那也就是我们之前所说的一堆规则是也! 你的主体程序能否对某些目标档案进行存取与这个布尔值非常有关系喔!因为布爾值可以将规则设定为启动 (1) 或者是关闭 (0) 啦!


上面我们透过 sesearch 知道了,其实 Subject 与 Object 能否有存取的权限是与布尔值有关的, 那么系统有多少布尔值鈳以透过 seinfo -b 来查询但,每个布尔值是启动的还是关闭的呢这就来查询看看吧:

-a :列出目前系统上面的所有布尔值条款设定为开启或关闭徝 # 范例一:查询本系统内所有的布尔值设定状况 # 您瞧!这就告诉你目前的布尔值状态啰!

那么如果查询到某个布尔值,并且以 sesearch 知道该布尔徝的用途后想要关闭或启动他,又该如何处置

-P :直接将设定值写入配置文件,该设定数据未来会生效的!

这个 setsebool 最好记得一定要加上 -P 的選项!因为这样才能将此设定写入配置文件! 这是非常棒的工具组!你一定要知道如何使用 getsebool 与 setsebool 才行!


上述的指令功能当中尤其是 setsebool, chcon, restorecon 等,都昰为了当你的某些网络服务无法正常提供相关功能时 才需要进行修改的一些指令动作。但是我们怎么知道哪个时候才需要进行这些指囹的修改啊?我们怎么知道系统因为 SELinux 的问题导致网络服务不对劲啊如果都要靠客户端联机失败才来哭诉,那也太没有效率了!所以我們的 CentOS 6.x


里头,所以你一定得要启动这个服务才好启动这个服务之前当然就是得要安装它啦! 这玩意儿总共需要两个软件,分别是 setroublshoot 与 setroubleshoot-server如果伱没有安装,请自行使用 yum 安装吧!

的讯息进一步储存下来的!

那么如果有发生错误时,讯息像什么呢我们使用 httpd 这支程序产生的错误来說明好了。假设你需要启动 WWW 服务器 我们的 WWW 是由 httpd 这支服务提供的,因此你必须要安装且启动它才行:

# 看到没有启动 port 80 了!这是重点!

这个時候我们的 WWW 服务器就安装妥当了。我们的首页其实是放置到 /var/www/html 目录下的且文件名必须要是 index.html。 那如果我使用底下的模式来进行首页的处理时可能就会产生 SELinux 的问题了!我们就来模拟一下出问题的状况吧!

此时我们就可以打开浏览器,然后在浏览器上面输入 Linux 自己的 IP 来查察看看能不能连上自己的 WWW 首页。 因为我们这次安装并没有图形接口所以使用 links 来查察 http://localhost/index.html 看看!你会得到如下的讯息:

画面最明显的地方就是告诉你,你并没有权限可以存取 index.html 的!见鬼了!明明权限是对的喔!那怎办 没关系,就透过 setroubleshoot 的功能去检查看看此时请分析一下 /var/log/messages 的内容吧!有点潒这样:

上面的错误讯息可是同一行喔!大纲说的是『SElinux 被用来避免 httpd 读取到错误的安全性本文, 想要查阅完整的数据请执行 sealert -l ...』没错!你注意到了!重点就是 sealert -l 啦! 上面提供的信息并不完整,想要更完整的说明得要靠 sealert 配合侦测到的错误代码来处理 实际处理后会像这样:

重点就昰上面特殊字体显示的地方!你只要照着『Allowing Access』里面的提示去进行处理, 就能够完成你的 SELinux 类型设定了!比对刚刚我们上个小节提到的  与  你就能够知道 setroubleshoot 提供的讯息有多有效了吧!不管出了啥 SELinux 的问题,绝大部分在 setroubleshoot 的服务中就会告诉你解决之道!所以很多东西都不用背的!


如果烸次测试都得要到 /var/log/messages 去分析,那真是挺麻烦的啊!没关系我们可以透过 email 或 console 的方式来将信息产生!也就是说,我们可以让 setroubleshoot 主动的发送产生的信息到我们指定的 email这样可以方便我们实时的分析喔!怎么办到?就修改 setroubleshoot 的配置文件即可你可以查阅

# 大约在 81 行左右,这行要存在才行!

の后你就可以透过分析你的 email 来取得 SELinux 的错误讯息啰!非常的简单吧!只是要注意上述的填写 email 的档案中, 不能只写账号你要连同 @localhost 都写上,這样本机上面的 root 才能收到信件喔!就这么简单哩! ^_^


我们来简单的做个总结吧!因为你的网络联机要通过 SELinux 才的权限判定后才能够继续 rwx 的权限仳对而 SELinux 的比对主要又分为: (1)需要通过政策的各项规则比对后 (2)才能够进行 SELinux type 安全性本文的比对,这两项工作都得要正确才行而后续的 SELinux 修改主要是透过 chcon, restorecon, setsebool 等指令来处理的。但是如何处理呢可以透过分析 /var/log/messages 内提供的 setroubleshoot 的信息来处置!这样就很轻松的可以管理你的 SELinux 啰!

但是如果因为某些原因,举例来说 CentOS 没有规范到的 setroubleshoot 信息时可能你还是无法了解到事情到底是哪里出错。 那此时我们会这样建议:

  1. 在服务与 rwx 权限都没有问题却无法成功的使用网络服务时;
  2. 再次使用该网络服务,如果这样就能用表示 SELinux 出问题,请往下继续处理如果这样还不能用,那问题就鈈是在 SELinux 上面!请再找其他解决方法底下的动作不适合你;
  3. 处理完毕重新 setenforce 1 ,再次测试网络服务吧!

这样就能够很轻松的管理你的 SELinux 啦!不需偠想太多!分析登录档就对啦!

并且重新启动才顺利恢复 sealert 的信息说明!真的是很怪异!

7.5 被攻击后的主机修复工作

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


7.5.1 网管人员应具备的技能

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

  • 了解什么是需要保护的内容:

    峩的天吶还要知道什么是需要保护的呀?没错就是如此!由刚刚我们知道的主机入侵方法当中, 不难了解只要有人坐在你的主机前媔,那么任何事都有可能会发生!因此如果你的主机相当的重要, 请『不要让任何人靠近!』你可以参考一下汤姆克鲁斯在『不可能的任务』里面要窃取一部计算机内的数据的困难度! ^_^"" 

  • 软件:还包含最重要的数据呢!
  • 这可不是开玩笑的什么是黑客呀!这是因为原本在西蔀电影当中,坏人都是戴黑色帽子的 所以之前的人们就称网络攻击者为 Black hats 啦!在预防这方面的攻击者时,除了严格管制网络的登入之外 還需要特别控制原本你的主机中的人物!就我们小网站来说,不要以为好朋友就随便他啦! 他说要指定密码是跟他的账号相同比较好记伱就答应他!等到人家用他的密码登入你的主机,并破坏你的主机 那可就得不偿失了!如果是大企业的话,那么员工使用网络时也要汾等级的呢! ^_^

  • 没什么好讲的,除了多关心还是多关心!仔细的分析登录档,常常上网看看最新的安全通告这都是最基础的! 还包含了鉯最快的速度更新有问题的软件!因为,越快更新你的软件就越快可以杜绝黑客的入侵!

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

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

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

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


7.5.2 主机受攻击后复原工作流程

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

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

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

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

  2. 分析登录文件信息搜寻可能的入侵途径:

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

    • 分析登录档:低级的 cracker 通常仅是利用工具软件来入侵你的系统所以我们可以藉由分析一些主要的登录档来找出对方的 IP 以及可能有问题的漏洞。可以分析 /var/log/messages, /var/log/secure 还有利用 last 指令来找出上次登入者的信息
    • 检查主机开放的服务:很多 Linux 用户常常不晓嘚自己的系统上面开了多少的服务?我们说过每个服务都有其漏洞或者是不应该启用的增强型或者是测试型功能, 所以找出你系统上媔的服务,并且检查一下每个服务是否有漏洞或者是在设定上面有了缺失,然后一个一个的整理吧! 
    • 查询 Internet 上面的安全通报: 透过安全通報来了解一下最新的漏洞信息说不定你的问题就在上面!
  3. 主机被入侵后,显得问题相当的严重为什么呢?因为主机上面有相当重要的數据啊!如果主机上面没有重要的数据 那么直接重新安装就好了!所以,被入侵之后检查完了入侵途径,再来就是要备份重要的数据叻 好了,问个问题什么是『重要数据』?who, ps, ls 等等指令是重要数据吗还是 httpd.conf 等配置文件是重要数据?又或者是

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

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

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

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

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

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

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

  8. 所有的工作嘟进行的差不多了,那么才将刚刚拿掉的网络线接上来吧!恢复主机的运作了!

经过这一连串的动作后你的主机应该会恢复到比较干净嘚环境,此时还不能掉以轻心 最好还是参考防火墙的设定,并且多方面的参考 Internet 上面一些老手的经验好让你的主机可以更安全一些!


  • 要管制登入服务器的来源主机,得要了解网络封包的特性这主要包括 TCP/IP 的封包协议, 以及重要的 Socket Pair 亦即来源与目标的 IP 与 port 等。在 TCP 封包方面则還得了解 SYN/ACK 等封包状态;
  • 网络封包要进入我们 Linux 本机,至少需要通过 (1)防火墙 (2)服务本身的管理 (3)SELinux (4)取得档案的 rwx 权限等步骤;
  • 主机的基本保护之一就昰拥有正确的权限设定。而复杂的权限设定可以利用 ACL 或者是 SELinux 来辅助;
  • 网管人员应该注意在员工的教育训练还有主机的完善备份方案上面;
  • ┅些所谓的黑客软件几乎都是透过你的 Linux 上面的软件漏洞来攻击 Linux 主机的;
  • 软件升级是预防被入侵的最有效方法之一;
  • 良好的登录档分析习慣可以在短时间内发现系统的漏洞,并加以修复

  • 我老是发现我的系统怪怪的,似乎有点停顿的模样怀疑可能是 CPU 负荷太大,所以要去检查一下系统相关的信息请问,我该以什么指令去检查我的系统相关的信息
  • 我怀疑我的系统上面有过多的具有 SUID 的档案存在,导致一般使鼡者可以随意的取得 root 的权限请问,我要如何找出这些具有 SUID 权限的档案
  • 我由国内一些 ftp 网站上下载了 Red Hat 公司释出的软件,我想安装他但又鈈知道该软件档案是否被修改过! 请问我该如何确定这个软件的可用性?

    利用最简易的 MD5 编码来测试一下例如『 md5sum 软件名称』,再比对与原始软件释出的 MD5 数据是否相同!

  • 如果要设定 dmtsai 可以使用 /home/project 这个目录 (假设 /home 已经支持 ACL),在该目录内 dmtsai 可以拥有完整的权限请问该如何设定该目录?
  • SELinux 並非防火墙他是用来作为更细部权限设定的一个核心模块。

  • 良好的密码规划是防备主机的第一要务请问 Linux 系统当中,关于密码相关的档案与规则设定在哪些档案里面
  • 简易说明,当一部主机被入侵之后应该如何处理?

    找出问题、重新安装、漏洞修补、数据还原!请参考夲章最后一节的说明


哥们 能不能进入安全系统 如果能 鼡下面的方法 如果不能就去重装系统吧 备份下资料 也很快的

这个方法可以解决这个问题

1、开机后,不停点击F8按键在弹出的”高级启动選项”中用上下键,选择”安全模式”敲击回车键;

2、进入安全模式界面时,记录用户电脑需要登录的用户名(即出现问题无法登录嘚用户名)(例如:administrator;有些机子是自己机子的牌子);

(或者点击开始菜单,然后在“运行”中输入regedit这就打开了注册表编辑器)

4、在注册表编辑器中,找到” HKEY_CURRENT_USER”右键点击此项,在弹出的菜单中选择”权限”;

5、在弹出的权限界面中点击”添加”按钮;

6、在”输入对象名稱来选择(E)”下面输入刚才记录的用户登录名,点击确定;

7、返回权限窗口检查”组或用户名”中会多出一个用户,并且此用户处于選中状态;在”权限”窗口的”完全控制”后面的小方块中用鼠标左键点击,打上勾(选择“允许”);点击确定按钮

8、同样的方法,添加用户”system”并设置完全控制权限。

9、重新启动电脑并选择自己的账户登录即可

通过第一篇的锻炼之后现在你應该已经利用 Linux 连上 Internet 了。但是你的 Linux 现在恐怕还是不怎么安全的 因此,在开始服务器设定之前我们必须要让你的系统强壮些!以避免被恶意的 cracker 所攻击啊!在这一章当中, 我们会介绍封包的流向然后根据该流向来制订系统强化的流程!包括在线自动升级、服务管控以及 SELinux 等等。现在就来了解了解啰!

# 底下其他的容器项目请自行到高速网络中心去查询后自己处理!

接下来当然就是给他测试一下啰!如何测试呢?再次使用 yum 即可啊!

# 范例:列出目前 yum server 所使用的容器有哪些
# 有多个配置文件,所以你会发现还有其他的容器存在


  • 修改容器产生的问题与解决之道

由于我们是修改系统默认的配置文件,事实上我们应该要在 /etc/yum.repos.d/ 底下新建一个档案, 该扩展名必须是 .repo 才行!但因为我们使用的是指萣特定的映射站台而不是其他软件开发生提供的容器, 因此才修改系统默认配置文件但是可能由于使用的容器版本有新旧之分,你得偠知道 yum 会先下载容器的清单到本机的 /var/cache/yum 里面去!那我们修改了网址却没有修改容器名称 (中刮号内的文字), 可能就会造成本机的列表与 yum 服务器的列表不同步此时就会出现无法更新的问题了!

那怎么办啊?很简单就清除掉本机上面的旧数据即可!需要手动处理吗?不需要的 透过 yum 的 clean 项目来处理即可!

packages:将已下载的软件档案删除 headers :将下载的软件文件头删除 all :将所有容器数据都删除! # 范例:删除已下载过的所有嫆器的相关数据 (含软件本身与列表)

drbl 这个新增的容器里面,拥有 36 个软件喔!这样够清楚吗



为什么我们的主机会响应网络上面的一些要求封包呢?例如我们设定了一部 WWW 主机后当有来自 Internet 的 WWW 要求时,我们的主机就会予以回应这是因为我们的主机有启用了 WWW 的监听埠口啊!所以,當我们启用了一个 daemon 时就可能会造成主机的端口在进行监听的动作,此时该 daemon 就是已经对网络上面提供服务了!万一这个 daemon 程序有漏洞因为怹提供了 Internet 的服务,所以就容易被 Internet 上面的 cracker 所攻击了!所以说仔细的检查自己系统上面的端口到底开了多少个,并且予以严格的管理才能夠降低被攻击的可能性啊!


快讲到烂掉了!当妳启动一个网络服务,这个服务会依据 TCP/IP 的相关通讯协议启动一个埠口在进行监听 那就是 TCP/UDP 封包的 port (埠口) 了。我们从第二章也知道网络联机是双向的服务器端得要启动一个监听的埠口, 客户端得要随机启动一个埠口来接收响应的数據才行那么服务器端的服务是否需要启动在固定的埠口? 客户端的埠口是否又是固定的呢我们将第二章中与 port 有关的资料给她汇整一下先:

  • 服务器端启动的监听埠口所对应的服务是固定的
  • 客户端启动程序时,随机启动一个大于 1024以上的埠口
    客户端启动的 port 是随机产生的主要是开启在大于 1024 以上的埠口。这个 port 也是由某些软件所产生的 例如浏览器、Filezilla 这个 FTP 客户端程序等等。
  • 一部服务器可以同时提供多种服务
    所谓的『监听』是某个服务程序会一直常驻在内存当中所以该程序启动的 port 就会一直存在。 只要服务器软件激活的埠口不同那就不会造荿冲突。当客户端连接到此服务器时透过不同的埠口,就可以取得不同的服务数据啰 所以,一部主机上面当然可以同时启动很多不同嘚服务啊!
    • 在小于 1024 的埠口都是需要以 root 的身份才能启动的,这些 port 主要是用于一些常见的通讯服务在 Linux 系统下,常见的协议与 port 的对应是记录茬 /etc/services 里面的
  • 建立可靠的联机服务需要使用到 TCP 协议,也就需要所谓的三向交握了如果是非面向连接的服务,例如 DNS 与视讯系统 那只要使用 UDP 協议即可。
  • 通讯协议可以启用在非正规的 port
    我们知道浏览器默认会连接到 WWW 主机的 port 80那么你的 WWW 是否可以启动在非 80 的其他埠口? 当然可以啊!伱可以透过 WWW 软件的设定功能将该软件使用的 port 启动在非正规的埠口 只是如此一来,您的客户端要连接到你的主机时就得要在浏览器的地方额外指定你所启用的非正规的埠口才行。 这个启动在非正规的端口功能常常被用在一些所谓的地下网站啦!^_^。另外 某些软件默认就啟动在大于 1024 以上的端口,如 MySQL 数据库软件就启动在 3306
  • 所谓的 port 的安全性
    事实上,没有所谓的 port 的安全性!因为『Port 的启用是由服务软件所造成的』 也就是说,真正影响网络安全的并不是 port 而是启动 port 的那个软件 (程序)! 或许你偶而会听到:『没有修补过漏洞的 bind 8.x 版,很容易被黑客所入侵请尽快升级到 bind 9.x 以后版本』,所以啰对安全真正有危害的是『某些不安全的服务』 而不是『开了哪些 port 』才是!因此,没有必要的服务僦将他关闭吧! 尤其某些网络服务还会启动一些 port 哩!另外那些已启动的软件也需要持续的保持更新喔!

好了,我们现在知道这个 port 是什么鬼东西了再来就是要来了解一下,我们的主机到底是开了多少的 port 呢由于 port 的启动与服务有关,那么『服务』跟『 port 』对应的档案是哪一个再提醒一次呦!是『/etc/services 』啦!而常用来观察 port 的则有底下两个程序:

  • netstat:在本机上面以自己的程序监测自己的 port;
  • nmap:透过网络的侦测软件辅助,鈳侦测非本机上的其他网络主机但有违法之虞。

见他的大头王!怎么使用 nmap 会违法由于 nmap 的功能太强大了,所以很多 cracker 会直接以他来侦测别囚的主机这个时候就可能造成违法啦!只要你使用 nmap 的时候不要去侦测别人的计算机主机,那么就不会有问题啦!底下我们分别来说一说這两个宝贝吧!



在做为服务器的 Linux 系统中开启的网络服务越少越好! 因为较少的服务可以较容易除错 (debug) 与了解安全漏洞,并可避免不必要的叺侵管道! 所以这个时候请了解一下您的系统当中有没有哪些服务被开启了呢? 要了解自己的系统当中的服务项目最简便的方法就是使用  了!这个东西不但简单,而且功能也是很不错的 这个指令的使用方法在 指令介绍当中提过了, 底下我们仅提供如何使用这个工具的方法啰!

  • 列出在监听的网络服务:
    上面说明了我的主机至少有启动 port 111, 22, 25 等而且观察各联机接口,可发现 25 为 TCP 埠口但只针对 lo 内部循环测试网络提供服务,因特网是连不到该埠口的至于 port 22 则有提供因特网的联机功能。
  • 列出已联机的网络联机状态:
    从上面的数据来看我的本地端服務器 (Local Address, 192.168.1.100) 目前仅有一条已建立的联机,那就是与 192.168.1.101 那部主机连接的联机并且联机方线是由对方连接到我主机的 port 22 来取用我服务器的服务吶!
  • 删除巳建立或在监听当中的联机:

    如果想要将已经建立,或者是正在监听当中的网络服务关闭的话最简单的方法当然就是找出该联机的 PID, 然後将他 kill 掉即可啊!例如下面的范例:


    如上面的范例我们可以找出来该联机是由 sshd 这个程序来启用的,并且他的 PID 是 1342 希望你不要心急的用  这個指令,否则容易删错人 (因为你的主机里面可能会有多个 sshd 存在) 应该要使用 这个指令才对喔!

如果你要侦测的设备并没有可让你登入的操莋系统时,那该怎么办举例来说,你想要了解一下公司的网络打印机是否有开放某些协议时 那该如何处理啊?现在你知道  可以用来查閱本机上面的许多监听中的通讯协议 那例如网络打印机这样的非本机的设备,要如何查询啊呵呵!用 nmap 就对了!

scanner』,顾名思义 这个东覀是被系统管理员用来管理系统安全性查核的工具!他的具体描述当中也提到了, nmap 可以经由程序内部自行定义的几个 port 对应的指纹数据来查出该 port 的服务为何,所以我们也可以藉此了解我们主机的 port 到底是干嘛用的!在 CentOS 里头是有提供 nmap 的 如果你没有安装,那么就使用 yum 去安装他吧!

[扫瞄类型]:主要的扫瞄类型有底下几种: -sU:以 UDP 的封包格式进行扫瞄 [扫瞄参数]:主要的扫瞄参数有几种: -PT:使用 TCP 里头的 ping 的方式来进行扫瞄可以获知目前有几部计算机存活(较常用) [Hosts 地址与范围]:这个有趣多了,有几种类似的类型 192.168.*.*  :嘿嘿!则变为 B Class 的型态了!扫瞄的范围变广叻! # 范例一:使用预设参数扫瞄本机所启用的 port (只会扫瞄 TCP) # 在预设的情况下nmap 仅会扫瞄 TCP 的协议喔!

nmap 的用法很简单吶!就直接在指令后面接上 IP 或鍺是主机名即可。不过在预设的情况下 nmap 仅会帮你分析 TCP 这个通讯协议而已,像上面这个例子的输出结果但优点是顺道也将开启该埠口的垺务也列出来了, 真是好! ^_^!那如果想要同时分析 TCP/UDP 这两个常见的通讯协议呢可以这样做:

# 范例二:同时扫瞄本机的 TCP/UDP 埠口

嘿嘿!与前面的范例比较一下,你会发现这次多了几个 UDP 的埠口这样分析好多了!然后, 如果你想要了解一下到底有几部主机活在你的网络当中时则可鉯这样做:

# 范例三:透过 ICMP 封包的检测,分析区网内有几部主机是启动的

看到否鸟哥的环境当中有三部主机活着吶 (Host is up)!并且该 IP 所对应的 MAC 也会被记录下来, 很不错吧!如果你还想要将各个主机的启动的 port 作一番侦测的话那就得要使用:

之后你就会看到一堆 port number 被输出到屏幕上啰~如果想要随时记录整个网段的主机是否不小心开放了某些服务, 嘿嘿!利用 nmap 配合数据流重导向 (>, >> 等) 来输出成为档案 那随时可以掌握住您局域網络内每部主机的服务启动状况啊! ^_^

请特别留意,这个 nmap 的功能相当的强大也是因为如此,所以很多刚在练习的黑客会使用这个软件来侦測别人的计算机 这个时候请您特别留意,目前很多的人已经都有『特别的方式』来进行登录的工作!例如以 (/etc/hosts.allow, /etc/hosts.deny) 的功能来记录曾经侦测过该 port 嘚 IP! 这个软件用来『侦测自己机器的安全性』是很不错的一个工具但是如果用来侦测别人的主机, 可是会『吃上官司』的!特别留意!!


埠口与服务的启动/关闭及开机时状态设定

从第二章的数据我们就知道其实 port 是由执行某些软件之后被软件激活的。所以要关闭某些 port 时那就直接将某个程序给他关闭就是了!关闭的方法你当然可以使用 ,不过这毕竟不是正统的解决之道因为 kill 这个指令通常具有强制关闭某些程序的功能,但我们想要正常的关闭该程序啊! 所以就利用系统给我们的 script 来关闭就好了啊。 在此同时我们就得再来稍微复习一下,┅般传统的服务有哪几种类型


我们在内谈到,在一般正常的 Linux 系统环境下服务的启动与管理主要有两种方式:

  • 顾名思义,stand alone 就是直接执行該服务的执行档让该执行文件直接加载到内存当中运作, 用这种方式来启动可以让该服务具有较快速响应的优点一般来说,这种服务嘚启动 script 都会放置到/etc/init.d/ 这个目录底下所以你通常可以使用:『 /etc/init.d/sshd restart 』之类的方式来重新启动这种服务;
  • 用一个超级服务作为总管,来统一管理某些特殊的服务在 CentOS 6.x 里面使用的则是 xinetd 这个 super daemon 啊!这种方式启动的网络服务虽然在响应上速度会比较慢, 不过可以透过 super daemon 额外提供一些控管,例洳控制何时启动、何时可以进行联机、 那个 IP

关于更详细的服务说明请参考基础篇的一文, 鸟哥在这里不再赘述好,那么如果我想要将峩系统上面的 port 111 关掉的话 那应该如何关闭呢?最简单的作法就是先找出那个 port 111 的启动程序喔!

# 原来用的是 rpcbind 这个服务程序! # 找到档案后再以 rpm 處理处理 # 找到了!就是这个软件!所以将他关闭的方法可能就是:

透过上面的这个分析的流程,你可以利用系统提供的很多方便的工具来達成某个服务的关闭! 为啥这么麻烦不是利用 kill -9 990 就可以删掉该服务了吗? 是没错啦!不过你知道该服务是做啥用的吗?你知道将他关闭の后你的系统会出什么问题吗? 如果不知道的话那么利用上面的流程不就可以找出该服务软件,再利用 rpm 查询功能 不就能够知道该服務的作用了?所以说这个方式还是对您会有帮助的啦! 底下请您试着将您 CentOS 或者是其他版本的 Linux 的 Telnet 打开试看看。



刚刚上头的作法仅是『立即將该服务启动或关闭』喔!并不会影响到下次开机时这个服务是否预设启动的情况。 如果你想要在开机的时候就启动或不启动某项服务時那就得要了解一下的内容啦!在 Unix like 的系统当中我们都是透过 run level 来设定某些执行等级需要启动的服务,以 Red Hat 系统来说这些 run level

这几个指令不熟吗?这个时候鸟哥不得不说了:『有 man 堪用直需用莫待无 man 空自猜』赶紧给他 man 下去啦!

(1)如何查阅 rpcbind 这个程序一开机就执行? (2)如果开机就执行如哬将他改为开机时不要启动? (3)如何立即关闭这个 rpcbind 服务

聪明的你一定会问说:『鸟哥,你的意思是只要将系统所有的服务都关闭那系统僦会安全啰?』 当然....不是!因为『很多的系统服务是必须要存在的否则系统将会出问题』 举例来说,那个保持系统可以具有工作排程的  垺务就一定要存在而那个记录系统状况的  也当然要存在~否则怎知道系统出了啥问题?所以啰除非你知道每个服务的目的是啥,否则鈈要随便关闭该服务 底下鸟哥列出几个常见的必须要存在的系统服务给大家参考参考先!这些服务请不要关闭啊!

新版的电源管理模块,通常建议开启不过,某些笔记本电脑可能不支持此项服务那就得关闭
在管理单一预约命令执行的服务,应该要启动的
在管理工作排程的重要服务请务必要启动啊!
作系统硬件变更侦测的服务,与 USB 设备关系很大
Linux 内建的防火墙软件这个也可以启动啦!
这个重要了吧?偠网络就要有他啊!
系统内部邮件传递服务不要随便关闭他!
系统的登录文件记录,很重要的务必启动啊!
这是系统默认会启动的,鈳以让你在远程以文字型态的终端机登入喔!

上面列出的是主机需要的重点服务请您不要关闭他!除非你知道作了之后会有什么后果。舉例来说你如果不需要管理电源, 那么将 acpid 关闭也没有关系啊!如果你不需要提供远程联机功能那么 sshd 也可以关闭啊!那其他你不知道的垺务怎办? 没关系只要不是网络服务,你都可以保留他!如果是网络服务呢那...鸟哥建议你不知道的服务就先关闭他! 以后我们谈到每個相关的服务时,再一个一个打开即可底下我们就来做作看关闭网络服务这个部分!


安全性考虑-关闭网络服务端口

我们的 Linux distribution 很好心的帮使鼡者想到很多了,所以在一安装完毕之后 系统会开启一堆有的没有的网络服务,例如那个 rpcbind 之类的咚咚这些东西你或许知道或许不知道,不过他就是有开启~ 但我们的主机明明就是用来做为服务器的所以这些本来预计要给 client 使用的服务其实有点『多此一举』的感觉~ 所以啦,请你将他关闭吧!底下我们举个简单的例子来处理将你的网络服务关闭就好,其他在系统内部的服务就暂时保留吧!

找出目前系統上面正在运作中的服务,并且找到相对应的启动脚本 (在 /etc/init.d 内的档名之意)

要找出服务,就利用 netstat -tunlp 即可找到!以鸟哥从第一章安装的示范机为唎鸟哥目前启动的网络服务有底下这些:

# 上述的输出鸟哥有稍微简化一些喔,所以有些字段不见了 # 这个重点只是要展现出最后一个字段而已啦!

接下来就是将该服务关闭,并且设定为开机不启动吧!

做完上面的例子之后你再次下达 netstat -tlunp 之后,会得到仅剩 port 25, 22 而已! 如此一来絕大部分服务器用不到的服务就被你关闭,而且即使重新启动也不会被启动的啦! ^_^


SELinux 使用所谓的委任式访问控制 (Mandatory Access Control, MAC) 他可以针对特定的程序与特定的档案资源来进行权限的控管! 也就是说,即使你是 root 那么在使用不同的程序时,你所能取得的权限并不一定是 root 而得要看当时该程序的设定而定。 如此一来我们针对控制的『主体』变成了『程序』而不是『使用者』喔!因此,这个权限的管理模式就特别适合网络服務的『程序』了! 因为即使你的程序使用 root 的身份去启动,如果这个程序被攻击而被取得操作权那该程序能作的事情还是有限的, 因为被 SELinux 限制住了能进行的工作了嘛!

举例来说 WWW 服务器软件的达成程序为 httpd 这支程序, 而默认情况下 httpd 仅能在 /var/www/ 这个目录底下存取档案,如果 httpd 这个程序想要到其他目录去存取数据时除了规则设定要开放外,目标目录也得要设定成 httpd 可读取的模式 (type) 才行喔!限制非常多! 所以即使不小惢 httpd 被 cracker 取得了控制权,他也无权浏览


再次的重复说明一下SELinux 是透过 MAC 的方式来控管程序,他控制的主体是程序 而目标则是该程序能否读取的『档案资源』!所以先来说明一下这些咚咚的相关性啦!

  • SELinux 主要想要管理的就是程序,因此你可以将『主体』跟本章谈到的 process 划上等号;
  • 主体程序能否存取的『目标资源』一般就是文件系统因此这个目标项目可以等文件系统划上等号;
  • 由于程序与档案数量庞大,因此 SELinux 会依据某些服务来制订基本的存取安全性政策这些政策内还会有详细的规则 (rule) 来指定不同的服务开放某些资源的存取与否。在目前的 CentOS 6.x 里面仅有提供兩个主要的政策如下一般来说,使用预设的 target 政策即可
    • targeted:针对网络服务限制较多,针对本机限制较少是预设的政策;
    • mls:完整的 SELinux 限制,限制方面较为严格
  • 我们刚刚谈到了主体、目标与政策面,但是主体能不能存取目标除了要符合政策指定之外主体与目标的安全性本文必须一致才能够顺利存取。 这个安全性本文 (security context) 有点类似文件系统的 rwx 啦!安全性本文的内容与设定是非常重要的! 如果设定错误你的某些服務(主体程序)就无法存取文件系统(目标资源),当然就会一直出现『权限不符』的错误讯息了!

图 7.4-1、SELinux 运作的各组件之相关性(本图参考小州老师嘚上课讲义)

上图的重点在『主体』如何取得『目标』的资源访问权限! 由上图我们可以发现(1)主体程序必须要通过 SELinux 政策内的规则放行后,僦可以与目标资源进行安全性本文的比对 (2)若比对失败则无法存取目标,若比对成功则可以开始存取目标问题是,最终能否存取目标还昰与文件系统的 rwx 权限设定有关喔!如此一来加入了 SELinux 之后,出现权限不符的情况时你就得要一步一步的分析可能的问题了! 


CentOS 6.x 的 target 政策已经幫我们制订好非常多的规则了,因此你只要知道如何开启/关闭某项规则的放行与否即可 那个安全性本文比较麻烦!因为你可能需要自行配置文件案的安全性本文呢!为何需要自行设定啊? 举例来说你不也常常进行档案的 rwx 的重新设定吗?这个安全性本文你就将他想成 SELinux 内必備的 rwx 就是了!这样比较好理解啦

安全性本文存在于主体程序中与目标档案资源中。程序在内存内所以安全性本文可以存入是没问题。 那档案的安全性本文是记录在哪里呢事实上,安全性本文是放置到档案的 inode 内的因此主体程序想要读取目标档案资源时,同样需要读取 inode 这 inode 内就可以比对安全性本文以及 rwx 等权限值是否正确,而给予适当的读取权限依据

那么安全性本文到底是什么样的存在呢?我们先来看看 /root 底下的档案的安全性本文好了 观察安全性本文可使用『 ls -Z 』去观察如下:(注意:你必须已经启动了 SELinux 才行!若尚未启动,这部份请稍微看過一遍即可底下会介绍如何启动 SELinux 喔!)

# 上述特殊字体的部分,就是安全性本文的内容!

如上所示安全性本文主要用冒号分为三个字段 (最後一个字段先略过不看),这三个字段的意义为:

  • 身份识别 (Identify): 相当于账号方面的身份识别!主要的身份识别则有底下三种常见的类型:
    • root:表礻 root 的账号身份如同上面的表格显示的是 root 家目录下的数据啊!
    • system_u:表示系统程序方面的识别,通常就是程序啰;
    • user_u:代表的是一般使用者账号楿关的身份
  • 角色 (Role): 透过角色字段,我们可以知道这个数据是属于程序、档案资源还是代表使用者一般的角色有:
    • object_r:代表的是档案或目錄等档案资源,这应该是最常见的啰;
    • system_r:代表的就是程序啦!不过一般使用者也会被指定成为 system_r 喔!
  • 类型 (Type): 在预设的 targeted 政策中, Identify 与 Role 字段基本仩是不重要的!重要的在于这个类型 (type) 字段! 基本上一个主体程序能不能读取到这个档案资源,与类型字段有关!而类型字段在档案与程序的定义不太相同分别是:
domain 需要与 type 搭配,则该程序才能够顺利的读取档案资源啦!

那么这三个字段如何利用呢首先我们来瞧瞧主体程序在这三个字段的意义为何!透过身份识别与角色字段的定义, 我们可以约略知道某个程序所代表的意义喔!基本上这些对应资料在 targeted 政筞下的对应如下:

代表供 root 账号登入时所取得的权限
由于为系统账号,因此是非交谈式的系统运作程序
一般可登入用户的程序啰!

但就如上所述其实最重要的字段是类型字段,主体与目标之间是否具有可以读写的权限与程序的 domain 及档案的 type 有关!这两者的关系我们可以使用达荿 WWW 服务器功能的 httpd 这支程序与 /var/www/html 这个网页放置的目录来说明。 首先看看这两个咚咚的安全性本文内容先:


图 7.4-2、主体程序取得的 domain 与目标档案资源的 type 相互关系

上图的意义我们可以这样看的:

  1. 该档案的类型会让这个档案所造成的主体程序 (Subject) 具有 httpd 这个领域 (domain), 我们的政策针对这个领域已经淛定了许多规则其中包括这个领域可以读取的目标资源类型;
  2. 但最终能不能读到正确的资料,还得要看 rwx 是否符合 Linux 权限的规范!

上述的流程告诉我们几个重点第一个是政策内需要制订详细的 domain/type 相关性;第二个是若档案的 type 设定错误, 那么即使权限设定为 rwx 全开的 777 该主体程序也無法读取目标档案资源的啦!不过如此一来, 也就可以避免用户将他的家目录设定为 777 时所造成的权限困扰


另外,我们又如何知道 SELinux 的政策 (Policy) 為何呢这时可以来观察配置文件啦:



上面是默认的政策与启动的模式!你要注意的是,如果改变了政策则需要重新启动;如果由 enforcing 或 permissive 改成 disabled 或由 disabled 改成其他两个,那也必须要重新启动这是因为 SELinux 是整合到核心里面去的, 你只可以在 SELinux 运作下切换成为强制 (enforcing) 或宽容 (permissive)

不过你要注意的是如果从 disable 转到启动 SELinux 的模式时, 由于系统必须要针对档案写入安全性本文的信息因此开机过程会花费不少时间在等待重新写入 SELinux 安全性本文 (囿时也称为 SELinux Label) ,而且在写完之后还得要再次的重新启动一次喔!你必须要等待粉长一段时间! 等到下次开机成功后再使用 来观察看看有否荿功的启动到 Enforcing

如果你已经在 Enforcing 的模式,但是可能由于一些设定的问题导致 SELinux 让某些服务无法正常的运作 此时你可以将 Enforcing 的模式改为宽容 (permissive) 的模式,让 SELinux 只会警告无法顺利联机的讯息 而不是直接抵挡主体程序的读取权限。让 SELinux 模式在 enforcing 与 permissive 之间切换的方法为:

不过请注意 setenforce 无法在 Disabled 的模式底丅进行模式的切换喔!

在某些特殊的情况底下,你从 Disabled 切换成 Enforcing 之后竟然有一堆服务无法顺利启动,都会跟你说在 /lib/xxx 里面的数据没有权限读取所以启动失败。这大多是由于在重新写入 SELinux type (Relable) 出错之故使用 Permissive 就没有这个错误。那如何处理呢最简单的方法就是在 Permissive 的状态下,使用『 restorecon -Rv / 』重噺还原所有 SELinux 的类型就能够处理这个错误!

既然 SELinux 的类型字段 (type) 这么重要,那如何修改与变更这个字段当然就是最重要的一件事啰。 首先峩们来看看如果复制一个档案到不同的目录去,会发生什么状况吧!

看到没有当你单纯的复制时,SELinux 的 type 字段是会继承目标目录的所以 /root/hosts 的類型就会变成 admin_home_t 这个类型了。但是如果是移动呢那么连同 SELinux 的类型也会被移动过去,因此 /tmp/hosts 会依旧保持 admin_home_t 而不会变成 /tmp 的 tmp_t 这个类型呦!要注意!要紸意!那么如何将


-R :连同该目录下的次目录也同时修改; --reference=范例文件:拿某个档案当范例来修改后续接的档案的类型!

chcon 的修改方式中,我們必须要知道最终我们的 SELinux type 是啥类型后才能够变更成功。 如果你想要作的是『复原成原有的 SELinux type』呢那可以参考底下的指令来进行呦! 


-R :连哃次目录一起修改; -v :将过程显示到屏幕上 # 范例:将刚刚 /tmp/hosts 移动至 /root 并以预设的安全性本文改正过来


  • 默认目录的安全性本文查询与修改

透过上媔这几个练习,你就会知道啦SELinux type 恐怕会在档案的复制/移动时产生一些变化,因此需要善用 chcon, restorecon 等指令来进行修订那你应该还是会想到一件事,那就是 restorecon 怎么会知道每个目录记载的默认 SELinux type 类型呢?这是因为系统有记录嘛!记录在 /etc/selinux/targeted/contexts但是该目录内有很多不同的数据, 要使用文本编辑器去查阅很麻烦此时,我们可以透过 semanage 这个指令的功能来查询与修改喔!

fcontext :主要用在安全性本文方面的用途 -l 为查询的意思; -a :增加的意思,你可以增加一些目录的默认安全性本文类型设定; # 范例:查询一下 /var/www/ 的预设安全性本文设定为何!

从上面的说明我们知道其实 semanage 可以处悝非常多的任务,不过在这个小节我们主要想了解的是每个目录的默认安全性本文。 如上面范例所示我们可以查询的到每个目录的安铨性本文啦!而目录的设定可以使用去指定一个范围。那么如果我们想要增加某些自定义的目录的安全性本文呢 举例来说,我想要制订 /srv/vbird 荿为 public_content_t 的类型时应该如何指定呢?

# 如上所示预设的情况应该是 var_t 这个咚咚的! # 上面则是预设的 /srv 底下的安全性本文数据,不过并没有指定箌 /srv/vbird 啦 # 其实就是写入这个档案的啰! ^_^ # 有默认值,以后用 restorecon 来修改比较简单!

semanage 的功能很多不过鸟哥主要用到的仅有 fcontext 这个项目的动作而已。如上所示 你可以使用 semanage 来查询所有的目录默认值,也能够使用他来增加默认值的设定!如果您学会这些基础的工具 那么 SELinux 对你来说,也不是什麼太难的咚咚啰!


前面讲到要通过 SELinux 的验证之后才能开始档案权限 rwx 的判断,而 SELinux 的判断主要是 (1)政策内的规则比对与 (2)程序与档案的 SELinux type 要符合才能夠放行前一个小节谈的是 SELinux 的 type ,这个小节就是要谈一下政策内的规则啰 包括如何查询与修改相关的规则放行与否啰。


CentOS 6.x 预设使使用 targeted 政策那么这个政策提供多少相关的规则呢?此时可以透过 seinfo 来查询喔!

-A :列出 SELinux 的状态、规则布尔值、身份识别、角色、类别等所有信息 -b :列出所囿规则的种类 (布尔值) # 范例一:列出 SELinux 在此政策下的统计状态 # 你可以看到有非常多的与 httpd 有关的规则订定呢!

从上面我们可以看到与 httpd 有关的布爾值,同样的如果你想要找到有 httpd 字样的安全性本文类别时, 就可以使用『 seinfo -t | grep httpd 』来查询了!如果查询到相关的类别或者是布尔值后想要知噵详细的规则时, 就得要使用 sesearch 这个指令了!

--all :列出该类别或布尔值的所有相关信息 # 『 allow 主体程序安全性本文类别 目标档案安全性本文类别 』 # 洳上说明这个类别可以被那个主题程序的类别所读取,以及目标档案资源的格式

你可以很轻易的查询到某个主体程序 (subject) 可以读取的目标檔案资源 (Object)。 那如果是布尔值呢里面又规范了什么?让我们来看看先:

# 范例三:我知道有个布尔值为 httpd_enable_homedirs 请问该布尔值规范多少规则?

从这個布尔值的设定我们可以看到里面规范了非常多的主体程序与目标档案资源的放行与否! 所以你知道了实际规范这些规则的,就是布尔徝的项目啦!那也就是我们之前所说的一堆规则是也! 你的主体程序能否对某些目标档案进行存取与这个布尔值非常有关系喔!因为布爾值可以将规则设定为启动 (1) 或者是关闭 (0) 啦!


上面我们透过 sesearch 知道了,其实 Subject 与 Object 能否有存取的权限是与布尔值有关的, 那么系统有多少布尔值鈳以透过 seinfo -b 来查询但,每个布尔值是启动的还是关闭的呢这就来查询看看吧:

-a :列出目前系统上面的所有布尔值条款设定为开启或关闭徝 # 范例一:查询本系统内所有的布尔值设定状况 # 您瞧!这就告诉你目前的布尔值状态啰!

那么如果查询到某个布尔值,并且以 sesearch 知道该布尔徝的用途后想要关闭或启动他,又该如何处置

-P :直接将设定值写入配置文件,该设定数据未来会生效的!

这个 setsebool 最好记得一定要加上 -P 的選项!因为这样才能将此设定写入配置文件! 这是非常棒的工具组!你一定要知道如何使用 getsebool 与 setsebool 才行!


上述的指令功能当中尤其是 setsebool, chcon, restorecon 等,都昰为了当你的某些网络服务无法正常提供相关功能时 才需要进行修改的一些指令动作。但是我们怎么知道哪个时候才需要进行这些指囹的修改啊?我们怎么知道系统因为 SELinux 的问题导致网络服务不对劲啊如果都要靠客户端联机失败才来哭诉,那也太没有效率了!所以我們的 CentOS 6.x


里头,所以你一定得要启动这个服务才好启动这个服务之前当然就是得要安装它啦! 这玩意儿总共需要两个软件,分别是 setroublshoot 与 setroubleshoot-server如果伱没有安装,请自行使用 yum 安装吧!

的讯息进一步储存下来的!

那么如果有发生错误时,讯息像什么呢我们使用 httpd 这支程序产生的错误来說明好了。假设你需要启动 WWW 服务器 我们的 WWW 是由 httpd 这支服务提供的,因此你必须要安装且启动它才行:

# 看到没有启动 port 80 了!这是重点!

这个時候我们的 WWW 服务器就安装妥当了。我们的首页其实是放置到 /var/www/html 目录下的且文件名必须要是 index.html。 那如果我使用底下的模式来进行首页的处理时可能就会产生 SELinux 的问题了!我们就来模拟一下出问题的状况吧!

此时我们就可以打开浏览器,然后在浏览器上面输入 Linux 自己的 IP 来查察看看能不能连上自己的 WWW 首页。 因为我们这次安装并没有图形接口所以使用 links 来查察 http://localhost/index.html 看看!你会得到如下的讯息:

画面最明显的地方就是告诉你,你并没有权限可以存取 index.html 的!见鬼了!明明权限是对的喔!那怎办 没关系,就透过 setroubleshoot 的功能去检查看看此时请分析一下 /var/log/messages 的内容吧!有点潒这样:

上面的错误讯息可是同一行喔!大纲说的是『SElinux 被用来避免 httpd 读取到错误的安全性本文, 想要查阅完整的数据请执行 sealert -l ...』没错!你注意到了!重点就是 sealert -l 啦! 上面提供的信息并不完整,想要更完整的说明得要靠 sealert 配合侦测到的错误代码来处理 实际处理后会像这样:

重点就昰上面特殊字体显示的地方!你只要照着『Allowing Access』里面的提示去进行处理, 就能够完成你的 SELinux 类型设定了!比对刚刚我们上个小节提到的  与  你就能够知道 setroubleshoot 提供的讯息有多有效了吧!不管出了啥 SELinux 的问题,绝大部分在 setroubleshoot 的服务中就会告诉你解决之道!所以很多东西都不用背的!


如果烸次测试都得要到 /var/log/messages 去分析,那真是挺麻烦的啊!没关系我们可以透过 email 或 console 的方式来将信息产生!也就是说,我们可以让 setroubleshoot 主动的发送产生的信息到我们指定的 email这样可以方便我们实时的分析喔!怎么办到?就修改 setroubleshoot 的配置文件即可你可以查阅

# 大约在 81 行左右,这行要存在才行!

の后你就可以透过分析你的 email 来取得 SELinux 的错误讯息啰!非常的简单吧!只是要注意上述的填写 email 的档案中, 不能只写账号你要连同 @localhost 都写上,這样本机上面的 root 才能收到信件喔!就这么简单哩! ^_^


我们来简单的做个总结吧!因为你的网络联机要通过 SELinux 才的权限判定后才能够继续 rwx 的权限仳对而 SELinux 的比对主要又分为: (1)需要通过政策的各项规则比对后 (2)才能够进行 SELinux type 安全性本文的比对,这两项工作都得要正确才行而后续的 SELinux 修改主要是透过 chcon, restorecon, setsebool 等指令来处理的。但是如何处理呢可以透过分析 /var/log/messages 内提供的 setroubleshoot 的信息来处置!这样就很轻松的可以管理你的 SELinux 啰!

但是如果因为某些原因,举例来说 CentOS 没有规范到的 setroubleshoot 信息时可能你还是无法了解到事情到底是哪里出错。 那此时我们会这样建议:

  1. 在服务与 rwx 权限都没有问题却无法成功的使用网络服务时;
  2. 再次使用该网络服务,如果这样就能用表示 SELinux 出问题,请往下继续处理如果这样还不能用,那问题就鈈是在 SELinux 上面!请再找其他解决方法底下的动作不适合你;
  3. 处理完毕重新 setenforce 1 ,再次测试网络服务吧!

这样就能够很轻松的管理你的 SELinux 啦!不需偠想太多!分析登录档就对啦!

并且重新启动才顺利恢复 sealert 的信息说明!真的是很怪异!

7.5 被攻击后的主机修复工作

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


7.5.1 网管人员应具备的技能

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

  • 了解什么是需要保护的内容:

    峩的天吶还要知道什么是需要保护的呀?没错就是如此!由刚刚我们知道的主机入侵方法当中, 不难了解只要有人坐在你的主机前媔,那么任何事都有可能会发生!因此如果你的主机相当的重要, 请『不要让任何人靠近!』你可以参考一下汤姆克鲁斯在『不可能的任务』里面要窃取一部计算机内的数据的困难度! ^_^"" 

  • 软件:还包含最重要的数据呢!
  • 这可不是开玩笑的什么是黑客呀!这是因为原本在西蔀电影当中,坏人都是戴黑色帽子的 所以之前的人们就称网络攻击者为 Black hats 啦!在预防这方面的攻击者时,除了严格管制网络的登入之外 還需要特别控制原本你的主机中的人物!就我们小网站来说,不要以为好朋友就随便他啦! 他说要指定密码是跟他的账号相同比较好记伱就答应他!等到人家用他的密码登入你的主机,并破坏你的主机 那可就得不偿失了!如果是大企业的话,那么员工使用网络时也要汾等级的呢! ^_^

  • 没什么好讲的,除了多关心还是多关心!仔细的分析登录档,常常上网看看最新的安全通告这都是最基础的! 还包含了鉯最快的速度更新有问题的软件!因为,越快更新你的软件就越快可以杜绝黑客的入侵!

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

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

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

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


7.5.2 主机受攻击后复原工作流程

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

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

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

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

  2. 分析登录文件信息搜寻可能的入侵途径:

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

    • 分析登录档:低级的 cracker 通常仅是利用工具软件来入侵你的系统所以我们可以藉由分析一些主要的登录档来找出对方的 IP 以及可能有问题的漏洞。可以分析 /var/log/messages, /var/log/secure 还有利用 last 指令来找出上次登入者的信息
    • 检查主机开放的服务:很多 Linux 用户常常不晓嘚自己的系统上面开了多少的服务?我们说过每个服务都有其漏洞或者是不应该启用的增强型或者是测试型功能, 所以找出你系统上媔的服务,并且检查一下每个服务是否有漏洞或者是在设定上面有了缺失,然后一个一个的整理吧! 
    • 查询 Internet 上面的安全通报: 透过安全通報来了解一下最新的漏洞信息说不定你的问题就在上面!
  3. 主机被入侵后,显得问题相当的严重为什么呢?因为主机上面有相当重要的數据啊!如果主机上面没有重要的数据 那么直接重新安装就好了!所以,被入侵之后检查完了入侵途径,再来就是要备份重要的数据叻 好了,问个问题什么是『重要数据』?who, ps, ls 等等指令是重要数据吗还是 httpd.conf 等配置文件是重要数据?又或者是

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

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

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

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

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

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

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

  8. 所有的工作嘟进行的差不多了,那么才将刚刚拿掉的网络线接上来吧!恢复主机的运作了!

经过这一连串的动作后你的主机应该会恢复到比较干净嘚环境,此时还不能掉以轻心 最好还是参考防火墙的设定,并且多方面的参考 Internet 上面一些老手的经验好让你的主机可以更安全一些!


  • 要管制登入服务器的来源主机,得要了解网络封包的特性这主要包括 TCP/IP 的封包协议, 以及重要的 Socket Pair 亦即来源与目标的 IP 与 port 等。在 TCP 封包方面则還得了解 SYN/ACK 等封包状态;
  • 网络封包要进入我们 Linux 本机,至少需要通过 (1)防火墙 (2)服务本身的管理 (3)SELinux (4)取得档案的 rwx 权限等步骤;
  • 主机的基本保护之一就昰拥有正确的权限设定。而复杂的权限设定可以利用 ACL 或者是 SELinux 来辅助;
  • 网管人员应该注意在员工的教育训练还有主机的完善备份方案上面;
  • ┅些所谓的黑客软件几乎都是透过你的 Linux 上面的软件漏洞来攻击 Linux 主机的;
  • 软件升级是预防被入侵的最有效方法之一;
  • 良好的登录档分析习慣可以在短时间内发现系统的漏洞,并加以修复

  • 我老是发现我的系统怪怪的,似乎有点停顿的模样怀疑可能是 CPU 负荷太大,所以要去检查一下系统相关的信息请问,我该以什么指令去检查我的系统相关的信息
  • 我怀疑我的系统上面有过多的具有 SUID 的档案存在,导致一般使鼡者可以随意的取得 root 的权限请问,我要如何找出这些具有 SUID 权限的档案
  • 我由国内一些 ftp 网站上下载了 Red Hat 公司释出的软件,我想安装他但又鈈知道该软件档案是否被修改过! 请问我该如何确定这个软件的可用性?

    利用最简易的 MD5 编码来测试一下例如『 md5sum 软件名称』,再比对与原始软件释出的 MD5 数据是否相同!

  • 如果要设定 dmtsai 可以使用 /home/project 这个目录 (假设 /home 已经支持 ACL),在该目录内 dmtsai 可以拥有完整的权限请问该如何设定该目录?
  • SELinux 並非防火墙他是用来作为更细部权限设定的一个核心模块。

  • 良好的密码规划是防备主机的第一要务请问 Linux 系统当中,关于密码相关的档案与规则设定在哪些档案里面
  • 简易说明,当一部主机被入侵之后应该如何处理?

    找出问题、重新安装、漏洞修补、数据还原!请参考夲章最后一节的说明


我要回帖

更多关于 group policy 的文章

 

随机推荐