关闭

关闭

封号提示

内容

首页 SELinux 简明学习指南_20120706.pdf

SELinux 简明学习指南_20120706.pdf

SELinux 简明学习指南_20120706.pdf

上传者: qkboy_wang 2012-07-06 评分 5 0 174 24 791 暂无简介 简介 举报

简介:本文档为《SELinux 简明学习指南_20120706pdf》,可适用于IT/计算机领域,主题内容包含SELinux简明学习指南HyphenWangwwwlinuxflyorg作者:HyphenWang符等。

SELinux简明学习指南HyphenWangwwwlinuxflyorg作者:HyphenWang网址:wwwlinuxflyorg 目录 介绍运行模式安全上下文登陆系统运行服务处理安全上下文配置布尔值和属性审计日志添加允许规则MLSMCS限制自定义安全模块常用命令第页共页作者:HyphenWang网址:wwwlinuxflyorg介绍 SELinux存在系统中已经有不短的历史了但由于各种原因吧经常会被人们有意无意的忽略或禁用。老实说在过去我也是其中之一。主要是感觉配置实在太麻烦了受限太多(涉及安全的东西都这样SELinux不能例外)。但这次因为某项目的测试需要只能死马当活马医努力学习吧。国内相关的资料不多而且大多是一些简单的命令介绍最详细的是harrytaurus写的SELinux学习笔记版本有页够多的。可能内容太多或关注于开发的角度吧反正刚开始我是没看懂。(不好意思啊劳烦作者的一番苦心^^)好吧找国外的资料《SELinuxbyExampleUsingSecurityEnhancedLinux》一书应该是最经典的教材当然FedoraSELinuxProject、TresysTechnology公司的SELinuxReferencePolicy、DanWalsh'sBlog等网站也是很好的参考资料。回过头来我下面从实用性的角度出发整理一下这几周学习SELinux的内容以便后来者继续学习和研究。当然我写的东西肯定没有SELinux学习笔记的详尽可理解为就是一个精简版。文章会分开好几部分可通过SELinuxTAG查询。而且受限于学习水平语句比较通俗文中问题肯定不少也希望大家提供反馈和意见。在最后若允许的话我会把各部分内容整理为单份文档格式便于传递和阅读。因这次的学习是以项目主导的运行平台为红旗安全操作系统(RFSOS)所以文中部分内容与其他发行版会略有不同。但RFSOS中安全策略是基于标准的referrencepolicy的与RHEL还是比较雷同的可以参考和比较学习。一、SELinux简介SELinux是由美国国家安全局(NSA)开发的为了防止内部资源管理设置错误引发的问题或受攻击入侵时把可访问内容控制在最小的范围之内。例如为了方便你把HTTP服务的varwwwhtml目录设置为权限。但万一由于一些漏洞问题黑客可在该目录下写入执行文件那么问题是很严重的(暂不考虑chroot设定的情况)。此外时不时爆出的本地提权漏洞(rootexploit)问题对系统的安全也有很大的威胁。为了控管这方面的权限与程序的问题所以美国国家安全局就著手处理操作系统这方面的控管。他们在SELinux整合到核心中用于在进行程序、文件、网络服务等访问时增加一道关卡而且这道坎使得原来的管理员root不再是万能的应用程序的配置也不再是任意的而是受限的。DAC(DiscretionaryAccessControl)自主式存取控制这简单来说就是类Unix系统的默认安全管理权限即rwxrwxrwx问题。在DAC模式下依据程序与文件资源的rwx权限来决定是否有可访问、写入、执行的能力。例如:第页共页作者:HyphenWang网址:wwwlinuxflyorg引用root具有最高权限:uideuid和gidegid的存在使得程序存在安全漏洞时将很容易获得root的权利这样他就是万能的主使用者本身可改变文件存取权限:假设用户对系统不熟悉给文件赋予的设置时结果可想而知的。这些都是问题怎么解决?那就采用MAC模式。(不是ext文件系统的MAC扩展)MAC(MandatoryAccessControl)委任式存取控制在该模式下不再由访问对象的属主定义不同用户对其的许可访问方式而是由固定的规则库决定。在规则库中定义了主体对客体的访问控制规则默认是禁止的也就是说没有允许你就不能读写即使你是root也不行。在此环境下万一黑客通过httpd得到varwwwhtml目录的读写、执行权限甚至是root身份他也无法对其他非允许的文件进行访问因为他们的类型不同规则不允许。那么系统受到的影响将降到最低。那么DAC与MAC有冲突吗?这是没有的可以把MAC理解为DAC的下一层换句话说。在激活SELinux的环境下访问一个文件资源(类Unix系统中一切都是文件)你将需要先获得DAC的许可然后再获得MAC的许可那么你才能访问该文件资源。访问控制模型由四部分组成:引用)Subject:主体比如系统中的进程、执行者)Object:客体被访问的对象如系统中的资源、数据其实就是文件)RulesDB:规则库定义了Subject可以通过什么方式对Object进行访问第页共页作者:HyphenWang网址:wwwlinuxflyorg)RVM(ReferenceValidationMechanism):操作系统内部的机制是Rules的执行者判断当前操作是否合法。SELinux是作为一个安全模块嵌入到LinuxKernel中的由policyrules(策略规则)驱动。首先它需要标识主体和客体的类型并把它们和判断规则等都会放入AccessVectorCache(AVC)中。AVC是一个缓存数据库可以提高性能。在操作系统安装完毕的最后一步进行label(标签)后磁盘上各文件(客体)就会拥有各自的context(安全上下文)主体对客体的操作将由AVC判断后执行。(图片来自鸟哥的私房菜:程序管理与SELinux初探)优势采用SELinux有以下几点好处:(这部分内容来自RedHatEnterpriseLinuxSecurityEnhancedLinuxUserGuideEdition)引用AllprocessesandfilesarelabeledwithatypeAtypedefinesadomainforprocesses,andatypeforfilesProcessesareseparatedfromeachotherbyrunningintheirowndomains,andSELinuxpolicyrulesdefinehowprocessesinteractwithfiles,aswellashowprocessesinteractwitheachotherAccessisonlyallowedifanSELinuxpolicyruleexiststhatspecificallyallowsitFinegrainedaccesscontrolSteppingbeyondtraditionalUNIXpermissionsthatarecontrolledatuserdiscretionandbasedonLinuxuserandgroupIDs,SELinuxaccessdecisionsarebasedonallavailableinformation,suchasanSELinuxuser,role,type,and,optionally,alevelSELinuxpolicyisadministrativelydefined,enforcedsystemwide,andisnotsetatuserdiscretionReducedvulnerabilitytoprivilegeescalationattacksOneexample:sinceprocessesrunindomains,andarethereforeseparatedfromeachother,andbecauseSELinuxpolicyrulesdefinehowprocesses第页共页作者:HyphenWang网址:wwwlinuxflyorgaccessfilesandotherprocesses,ifaprocessiscompromised,theattackeronlyhasaccesstothenormalfunctionsofthatprocess,andtofilestheprocesshasbeenconfiguredtohaveaccesstoForexample,iftheApacheHTTPServeriscompromised,anattackercannotusethatprocesstoreadfilesinuserhomedirectories,unlessaspecificSELinuxpolicyrulewasaddedorconfiguredtoallowsuchaccessSELinuxcanbeusedtoenforcedataconfidentialityandintegrity,aswellasprotectingprocessesfromuntrustedinputs但SELinux不是:引用防病毒软件不能代替密码、防火墙或其他安装系统不是一个整体化的安全解决方案。SELinux是用来加强已有的安全架构而并不是替代它们。所以RFSOS不单采用SELinux还包括加密文件系统、验证密钥、模块签名等一系列的安全措施。运行模式 既然SELinux有不少好处但为啥经常被禁用呢?主要是因为其配置太复杂而且涉及的资源、权限很多这也是安全配置的通病。不过若对SELinux有一定了解适当的配置使用还是对系统安全很有好处的特别是针对一些关键应用。通常系统运行的SELinux有三种模式:disabled、permissive、enforcing。二、运行模式说明SELinux的三种运行模式分别是:引用enforcing(启用):启用安全保护如果有安全违规行为发生将生成一个审计日志并阻止该非法行为permissive(报警):不启用安全保护如果有安全违规行为发生将生成一个审计日志但不阻止违规行为disabled(不启用):不启用SELinux安全模块功能。第页共页作者:HyphenWang网址:wwwlinuxflyorg启动SELinux时应运行在enforcing模式下而调试策略时可切换到permissive模式。disabled就是不用SELinux安全模型。此外常见有两种SEinux安全策略:引用targeted:仅保护一些系统服务一般不使用该策略mls:提供基于BLP、MLSMCS模型的完整保护RHEL系列相同默认采用targeted策略而红旗安全操作系统的默认生效策略为mls。它们之间的区别是:引用mls策略是红旗安全操作系统默认安全策略为系统及应用提供最大化的安全保护。targeted为系统提供的可选安全策略其目标是隔离高风险程序(如暴露在外易受黑客攻击的组件)。使用targeted策略的好处是一方面可以向Linux系统添加大量的安全保护同时又尽量少影响现有的用户程序(提高应用软件与系统兼容性)。在红旗安全操作系统中targeted策略和mls策略之间主要差异是不支持管理特权三权分立也不支持BLP模型。(后续会进一步说明)配置文件模式及策略在etcsysconfigselinux中设置:引用#catetcsysconfigselinux#ThisfilecontrolsthestateofSELinuxonthesystem#SELINUX=cantakeoneofthesethreevalues:#enforcingSELinuxsecuritypolicyisenforced#permissiveSELinuxprintswarningsinsteadofenforcing#disabledSELinuxisfullydisabledSELINUX=enforcing#SELINUX=permissive#SELINUXTYPE=typeofpolicyinusePossiblevaluesare:第页共页作者:HyphenWang网址:wwwlinuxflyorg#targetedOnlytargetednetworkdaemonsareprotected#mlsMultiLevelSecurityprotectionSELINUXTYPE=mls#SELINUXTYPE=targeted由于RFSOS默认采用mls策略初始会创建sysadm、secadm、auditadm三个权限不同的用户而对于安全配置的修改必须使用secadm用户进行其他用户对该配置文件都是“只读”的。类似的RFSOS在本地终端和SSH服务禁止root用户登录。若要修改上述配置文件请以secadm用户登录后执行以下操作:引用loginas:secadmsecadm'spassword:****************PasswordStatus:Passwordwon'tbeexpiredinrecentdays*SuccessListUserLoginTimeFromsecadmJun::secadmJun::secadmJun::ttysecadmJun::Lastlogin:FriJun::fromsecadmlocalhost~$iduid=(secadm)gid=(secadm)groups=(secadm)context=secadmu:secadmr:secadmt:ss:ccsecadmlocalhost~$su口令:rootlocalhost~#iduid=(root)gid=(root)groups=(root),(bin),(daemon),(sys),(adm),(disk),(wheel)context=secadmu:secadmr:secadmt:ss:cc登录secadm时请输入secadm用户的密码。执行su命令时需输入root的密码。蓝色标记的称为安第页共页作者:HyphenWang网址:wwwlinuxflyorg全上下文将在后续说明。※请注意本节的命令操作都以secadm用户的上述登陆状态进行。查看状态执行:引用rootlocalhost~#sestatusSELinuxstatus:enabledSELinuxfsmount:selinuxCurrentmode:enforcingModefromconfigfile:enforcingPolicyversion:Policyfromconfigfile:mlsrootlocalhost~#getenforceEnforcing修改模式enforcing和permissive模式的切换可通过setenforce命令进行:引用rootlocalhost~#setenforcerootlocalhost~#getenforcePermissive或直接对SELinux文件系统的文件进行修改:引用rootlocalhost~#catselinuxenforcerootlocalhost~#setenforcerootlocalhost~#catselinuxenforcerootlocalhost~#getenforceEnforcing第页共页作者:HyphenWang网址:wwwlinuxflyorg可见表示enforing模式表示permissive模式。而把配置文件修改为disabled模式可禁用SELinux但必须重启才能生效。安全策略的修改只能通过修改配置文件进行而且是立刻生效的:引用rootlocalhost~#vietcsysconfigselinuxrootlocalhost~#sestatusSELinuxstatus:enabledSELinuxfsmount:selinuxCurrentmode:enforcingModefromconfigfile:enforcingPolicyversion:Policyfromconfigfile:targeted但由于两种策略所标记的标签不同AVC中记录的数据不一致实时的修改会产生异常的问题。因此修改安全策略后应该重启服务器并重打标签。临时设定模式若只是由于某些原因需要临时关闭SELinux可在Grub引导菜单中通过e按钮切换到edit状态后在kernel一行如:引用kernelbootvmlinuzAXSroroot=LABEL=的后面加入selinux=即:引用kernelbootvmlinuzAXSroroot=LABEL=selinux=修改完毕后用esc键退出b键启动进入系统。当然如果你修改bootgrubmenulst中的配置那结果与修改配置文件是相同的都可把SELinux设为disabled模式禁用了。第页共页作者:HyphenWang网址:wwwlinuxflyorg类似的把enforcing=加入kernel行如:引用kernelbootvmlinuzAXSroroot=LABEL=enforcing=就是设置为permissive模式。如果SELinux为disabled状态将不会把selinuxfs文件系统挂接到selinux下面也就是不存在该目录。重打标签在操作系统安装完毕时系统会自动对磁盘中的文件根据fcontext规则打上标签以便AVC进行判断。在SELinux处于enforcing或permissive模式下对文件标签的修改都会被记录到磁盘上。但如果在disabled模式下这动作将不会进行。所以如果在disabled模式下对文件进行了改动重启进入激活SELinux状态的系统时就会报avc错误。类似的targted和mls安全规则所使用的标签也是不相同的。在两个安全规则间切换时也必须重打标签。重打标签的通常做法是通过在Grub菜单临时进入permissive模式(见上面的描述)以root执行:#touchautorelabel然后重启系统还是进入permissive模式系统即会自行对根分区所有文件重打标签。完成后可恢复到enforcing模式状态。更详细的信息请见原解决启动时提示Enteringrunlevel及大量avc提示的问题。安全上下文 正如上文所说的SELinux会对进程和文件(实际上进程也是文件之一)进行标记(label)包括SELinuxuser、role、level等。这些成为安全上下文(SecurityContext)。SELinux使用RoleBasedAccess(RBAC)、TypeEnforcement(TE)和MultiLevelSecurity(MLS)等模型。三、安全上下文TE模型第页共页作者:HyphenWang网址:wwwlinuxflyorgSELinux作为MAC的一种实现通过中央规则库(policyX)给所有进程、文件、内核数据结构定义各自的安全标识(label)或标签(type)明确定义被访问对象所支持的访问方式并规定进程标签(主体)对被访问对象(客体)的合法访问方式。对文件系统的标签在操作系统安装完毕后标注(或手动设置重标见上篇)而在系统启动过程中init进程经由selinuxfs接口装载policyX到内核空间由内核中的SecurityServer(如policydb、AVC等)在处理用户态系统调用时实时查询。policyX的X是版本号在编译时决定其可以由几百个子模块链接而成这些子模块称为policypackage(简称pp)。通常位于系统的以下位置:引用etcselinuxmlspolicypolicyetcselinuxtargetedpolicypolicy根据所选择的安全策略不同而加载。以RFSOS运行在mls下为例实时可用的pp模块位于:引用etcselinuxmlsmodulesactivemodules基础模块是basepp其他模块都是后来链接上去的。磁盘上的安全上下文磁盘上的文件其安全上下文(SecurityContext)是存放在文件的扩展属性(ExtendedAttributexattr)中的。但并不是所有的文件系统都支持该属性ext可以Samba的cifs和NFS就不行不行的需采用其他的办法弥补(后面会讲到)。先来看看磁盘上的文件:引用#llZinstalllogrwrrrootrootroot:objectr:sysadmhomet:sinstalllog关注第四列(必须加Z参数才能看到)通过冒号区分为四部分:user:role:type:level)user部分这不是普通的系统用户而是SELinuxUser由login程序根据当前规则库的定义把系统用户映射到SELinuxUser上的。RFSOS上就是这样:第页共页作者:HyphenWang网址:wwwlinuxflyorg引用#semanageloginlLoginNameSELinuxUserMLSMCSRangedefaultuserusauditadmauditadmuss:ccrootrootss:ccsecadmsecadmuss:ccsysadmsysadmuss:ccsystemusystemuss:cc可以看到之前我们提到的登陆用户secadm在SELinuxUser下就是secadmu。同样的还有其他的SELinuxUser:引用root:表示root的用户方便标识而已因通常很少会以root身份运行(系统默认禁止其本地登陆)所以实际上没什么特别的systemu:表示系统程序方面的识别通常就是程序或程序创建的文件※通常为了方便识别除root外都会加上【u】的标识。)role部分这是SELinuxRoleBasedAccessControl(RBAC)安全模型的一部分。role(角色)就是RBAC的属性。SELinuxUser由roles验证而roles由domains(域后面会提到)验证。roles扮演domains和SELinuxusers两者的中间人。获得roles就可以获得对应的domains也就是可以访问其里面的资源客体(object)。这可以避免权限提升攻击发生时的问题。例如:引用#idZsysadmu:sysadmr:sysadmt:ss:cc假设sysadmu被攻破黑客也只能得到systemr可访问的domain而sysadmr是不能进行安全配置第页共页作者:HyphenWang网址:wwwlinuxflyorg的所以secadm所拥有的权限他是无法获得的。除此以外常见的role还有:引用objectr:代表文件或目录等文件资源systemr:代表的是程序或一般使用者。※通常为了方便识别除root外都会加上【r】的标识。)type部分这是TE模型的关键属性。type定义进程的domain和文件的类型。SELinuxpolicyrules定义各个types之间能否访问以及允许type进入某个domian以及各domain访问的内容。默认的规则是禁止的换句话说只有显示的定义允许某个type的规则那么它才有访问的权限。在targetd安全策略上user、role都是可以忽略的最关键就是type。但mls就不行。)level部分这是MLS和MultiCategorySecurity(MCS)模型的属性是一个范围的级别lowlevelhighlevel。共个等级从低到高s为低等级、s为高等级最高就是s。(ss与s是相同的意思)每个level是一个sensitivitycategory对category(分类)共个级别是可选的没有则只写sensitivity如:s。如果还存在category(分类)那么也是通过“:”冒号区分以sensitivity:categoryset表示例如:引用ss:cc这是涵盖了全范围的level具体的访问限制暂不是后续另行描述。MLS安全策略使用在LabeledSecurityProtectionProfile(LSPP)环境中使用BellLaPadulaMandatoryAccessModel模型并采用upstreamSELinuxReferencePolicy策略比Tagerted安全要求更高。访问规则为policyX链接规则需采用访问向量(AccessVector)规则来定义语法是:<avkind><sourcetype(s)><targettype(s)>:<class(es)><permission(s)>第页共页作者:HyphenWang网址:wwwlinuxflyorg含义是:引用avkind:定义动作有allow(允许)、dontaudit(不审计但也不允许)、auditallow(允许并审计)、neverallow(不允许)sourcetype:主体类型通常是进程尝试访问的域类型targettype:客体类型被访问的域类型class:客体的类别permission:要设置的权限。一个典型的定义如:引用allowusertbint:file{readexecutegetattr}这个allow规则的源类型为usert目标类型为bint客体类别file许可execute等这个规则可以解读为“允许usert执行类型为bint的文件”。(因为要执行文件必须先可以获取属性getattr读read然后执行execute缺一不可)domaintransition(域转移)域就是上文提到的domain。为什么要设置域呢?安全要解决的一个重要问题就是:隔离。即当一个应用程序(用户)被攻破时不影响其他应用程序。域就是用于限制的。一个进程从某个域通过应用访问entrypoint(入口)而转移到另一个域是需要在policy中明确允许的。举个例:用户修改密码。先来看看文件的属性:引用第页共页作者:HyphenWang网址:wwwlinuxflyorg#llZusrbinpasswdrwsrxrxrootrootsystemu:objectr:passwdexect:susrbinpasswd#llZetcshadowrrootrootsystemu:objectr:shadowt:setcshadow在RFSOS中需要以sysadm登陆后su到root才能执行)见类型与域是相关的。蓝色和红色标记的类型不同表明两者不在同一个域里面。所以用户通过(可passwd修改etcshadow文件就需要进行域转移的许可。定义一些规则:引用allowusertpasswdexect:file{getattrexecute}许用户shell(usert)在passwd可执行文件(passwdexect)上启动execve()系统调用。允引用allowpasswdtpasswdexect:fileentrypoint条规则提供了对passwdt域的入口访问权entrypoint许可在SELinux中是一个相当有用的许可权限这这个权限所做的事情是定义哪个可执行文件(程序)可以"进入"某个特定的域。引用allowusertpasswdt:processtransition第页共页作者:HyphenWang网址:wwwlinuxflyorg原这述符(例如标准输入输出以及出错设备)子进程运行结束时发送sigchld等也是需要明确定义的:引用始的类型(usert)到新的类型(passwdt)进行域转变必须有transition许可才允许进行。就是域转移。当然除此以外当执行程序还需要一些额外的权限例如:例如:使用父进程的文件描allowpasswdtusert:fduseallowpasswdtusert:fifofilerwfifofilepermsallowpasswdtusert:processsigchld※上述提及的是(UnconfinedProcesses)运行的unconfinedt域对于非限制域进程SELinux规则时有效的但策略是对源的这时实际上域的限制就不存在了。换句话说这又回到了DAC模型的限制规则中因此除特殊的进程外不应该采用这个unconfinedt域。更详细的例子可参考:注意:限制域进程(ConfinedProcesses)运行的情况而系统中还有一个由非限制域进程于运行在非限制域的进程都是可访问几乎任意资RoleBasedAccessControl(RBAC)安全模型已经足够。但在MLS安全策略下增加的RBACUnconfinedProcesses如果采用的是Targeted安全策略那么上面定义的TE规则模型则还需要对角色进行判断。前面提过roles扮演domains和SELinuxusers两者的中间人。普通用户的角色必须允许与新的域类型建立关联后才可允许密码程序通过usert域类型执行然后转移到新的passwdt域上。第页共页作者:HyphenWang网址:wwwlinuxflyorg安全规则为:引用roleuserrtypepasswdt所以说RBAC进一步增加了TE模型的限制:主客体域类型的角色要一致!可能你会问这些在那里定义?在te文件中编写然后编译为pp模块然后才能加载到内核中。后续会讲到一些基本方法暂时只需知道有这样的概念即可。MultiLevelSecurity(MLS)和MultiCategorySecurity(MCS)这就是level属性也是MLS安全策略比Targeted增强的地方。简单来说就是做了上面工作还不足够如果level属性限制你你还需要匹配规则够烦吧!!MLS和MCS定义的level就是用于BellLaPadulaMandatoryAccessModel模型的:引用BLP模型的基本安全策略是“下读上写”即主体对客体向下读、向上写。主体可以读安全级别比他低或相等的客体可以写安全级别比他高或相等的客体。“下读上写”的安全策略保证了数据库中的所有数据只能按照安全级别从低到高的流向流动从而保证了敏感数据不泄露。怎么看级别呢?上面已经讲过每个level都是一个sensitivitycategory对(简称SC)而每个SensitivityLevel(简称SL)和CategoryLevel(简称CL)也都是一段范围的例如

类似资料

编辑推荐

【书法学习】《草诀百韵歌》[明]韩道亨.pdf

八百万种死法.pdf

秘授古脉法抄本.pdf

张楠藏密功法.pdf

英语常用口语.doc

职业精品

精彩专题

上传我的资料

精选资料

热门资料排行换一换

  • 鲁迅全集2005年版第11卷:两…

  • 热话题冷思考:当代世界与社会主义…

  • 泡沫经济的经济对策:复合萧条论 …

  • (明)王铎楷书一觉庵铭.pdf

  • (明)王铎隶书三潭诗卷.pdf

  • (明)王铎行书李贺诗帖.pdf

  • (民国)灵宝县志(1-3册).p…

  • 协同学入门.pdf

  • 重刊荆溪县志(全).pdf

  • 资料评价:

    / 103
    所需积分:2 立即下载

    意见
    反馈

    返回
    顶部