RedHatEnterpriseLinux8,怎么创建html文件

文件 3
RedHatEnterpriseLinux8 使用SELinux Security-EnhancedLinux(SELinux)的基本和高级配置 LastUpdated:2021-07-16 RedHatEnterpriseLinux8使用SELinux Security-EnhancedLinux(SELinux)的基本和高级配置 法律通告 Copyright©2021RedHat,Inc. ThetextofandillustrationsinthisdocumentarelicensedbyRedHatunderaCreativeCommonsAttribution–ShareAlike3.0Unportedlicense("CC-BY-SA").AnexplanationofCC-BY-SAisavailableat/licenses/by-sa/3.0/.InordancewithCC-BY-SA,ifyoudistributethisdocumentoranadaptationofit,youmustprovidetheURLfortheoriginalversion. RedHat,asthelicensorofthisdocument,waivestherighttoenforce,andagreesnottoassert,Section4dofCC-BY-SAtothefullestextentpermittedbyapplicablelaw. RedHat,RedHatEnterpriseLinux,theShadowmanlogo,theRedHatlogo,JBoss,OpenShift,Fedora,theInfinitylogo,andRHCEaretrademarksofRedHat,Inc.,registeredintheUnitedStatesandothercountries. Linux®istheregisteredtrademarkofLinusTorvaldsintheUnitedStatesandothercountries. Java®isaregisteredtrademarkofOracleand/oritsaffiliates. XFS®isatrademarkofSiliconGraphicsInternationalCorp.oritssubsidiariesintheUnitedStatesand/orothercountries. MySQL®isaregisteredtrademarkofMySQLABintheUnitedStates,theEuropeanUnionandothercountries. Node.js®isanofficialtrademarkofJoyent.RedHatisnotformallyrelatedtoorendorsedbytheofficialJoyentNode.jsopensourcemercialproject. TheOpenStack®WordMarkandOpenStacklogoareeitherregisteredtrademarks/servicemarksortrademarks/servicemarksoftheOpenStackFoundation,intheUnitedStatesandothercountriesandareusedwiththeOpenStackFoundation'spermission.Wearenotaffiliatedwith,endorsedorsponsoredbytheOpenStackFoundation,orthemunity. Allothertrademarksarethepropertyoftheirrespectiveowners. 摘要 本文档可帮助用户和管理员了解SELinux功能的基本性和原则,并描述了设置和配置各种服务的实际任务。
目录 目录 使...开..源..包..含..更..多................................................................................................4............. 对...红..帽..文..档..提..供..反..馈............................................................................................5............. 第...1.章...S.E..L.I.N.U..X..入..门..........................................................................................6............. 1.1.SELINUX简介
6 1.2.运行SELINUX的好处
7 1.3.SELINUX示例
7 1.4.SELINUX构架和软件包
8 1.5.SELINUX状态和模式
8 第...2..章..更..改...S..E.L.I.N.U..X..状..态..和..模..式..............................................................................1.0............. 2.1.SELINUX状态和模式的更改 10 2.2.切换到PERMISSIVE模式 10 2.3.切换到ENFORCING模式 11 2.4.在之前禁用的系统中启用SELINUX 12 2.5.禁用SELINUX 13 2.6.在引导时更改SELINUX模式 14 第...3..章..管...理..限..制..和..未..限..制..的...用..户...............................................................................1.6............. 3.1.限制和未限制的用户 16 3.2.SELINUX用户功能 16 3.3.添加一个新用户会自动映射到SELINUXUNCONFINED_U用户 18 3.4.以SELINUX限制的用户身份添加新用户 19 3.5.限制常规用户 19 3.6.通过映射到SYSADM_U来限制管理员 21 3.7.使用SUDO和SYSADM_R角色限制管理员 22 3.8.其它资源 23 第...4..章..为...使..用..非..标..准..配..置...的..应..用..程..序..和..服..务...配..置..S..E.L..IN..U.X......................................................2.4............. 4.1.在非标准配置中为APACHEHTTP服务器自定义SELINUX策略 24 4.2.调整用于使用SELINUX布尔值共享NFS和CIFS卷的策略 26 4.3.其它资源 27 第...5..章..故..障...排..除..与...S.E.L..IN..U.X..相..关...的..问..题.......................................................................2.8............. 5.1.识别SELINUX拒绝 28 5.2.分析SELINUX拒绝信息 29 5.3.修复分析的SELINUX拒绝问题 30 5.4.审计日志中的SELINUX拒绝 32 5.5.其它资源 33 第...6..章..使...用..多..级..别..安..全..(...M..L.S.)...............................................................................3.4............. 6.1.多级别安全(MLS) 34 6.2.MLS中的SELINUX角色 35 6.3.将SELINUX策略切换到MLS 36 6.4.在MLS中建立用户许可 38 6.5.在MLS中更改文件敏感度 40 第...7..章..编..写...自..定..义...S.E.L..IN..U.X..策..略..............................................................................4.2............. 7.1.自定义SELINUX策略和相关工具 42 7.2.为自定义应用程序创建并强制SELINUX策略 42 7.3.创建本地SELINUX策略模块 46 7.4.其它资源 48
1 RedHatEnterpriseLinux8使用SELinux 第...8..章..为...容..器..创..建...S.E.L..IN..U..X.策...略.............................................................................4.9............. 8.1.UDICASELINUX策略生成器介绍 49 8.2.为自定义容器创建和使用SELINUX策略 49 8.3.其它资源 51 第...9..章..在...多..个..系..统..中..部..署...相..同..的..S..E.L..IN..U.X..配..置.................................................................5.2............. 9.1.SELINUX系统角色简介 52 9.2.使用SELINUX系统角色在多个系统中应用SELINUX设置 53 9.3.使用SEMANAGE将SELINUX设置传送到另一个系统中 54
2 目录
3 RedHatEnterpriseLinux8使用SELinux 使开源包含更多 红帽承诺替换我们的代码、文档和网页属性中存在问题的语言。
我们从这四个术语开始:master、slave、blacklist和whitelist。
这些更改将在即将发行的几个发行本中逐渐实施。
如需了解更多详细信息,请参阅CTOChrisWright信息。

4 对红帽文档提供反馈 对红帽文档提供反馈 我们感谢您对文档提供反馈信息。
请让我们了解如何改进文档。
要做到这一点:关于特定内容的简单评论:
1.请确定您使用Multi-pageHTML格式查看文档。
另外,确定Feedback按钮出现在文档页的右上方。

2.用鼠标指针高亮显示您想评论的文本部分。

3.点在高亮文本上弹出的AddFeedback。

4.按照显示的步骤操作。
要提交更复杂的反馈,请创建一个Bugzillaticket:
1.进入Bugzilla网站。

2.在Component中选择Documentation。

3.在Description中输入您要提供的信息。
包括文档相关部分的链接。

4.点SubmitBug。

5 RedHatEnterpriseLinux8使用SELinux 第1章SELINUX入门 SELinux(SecurityEnhancedLinux)提供了一个额外的系统安全层。
SELinux可用于解答:<主体>是否可以针对<对象>进行<操作>?

例如:一个web服务器是否可以对用户目录中的文件进行访问? 1.1.SELINUX简介 系统管理员一般无法通过基于用户、组群和其它权限(称为DiscretionaryessControl,DAC)的标准访问策略生成全面、精细的安全策略。
例如,限制特定应用程序只能查看日志文件,而同时允许其他应用程序在日志文件中添加新数据。
SecurityEnhancedLinux(SELinux)实施强制访问控制(MAC)。
每个进程和系统资源都有一个特殊的安全性标签,称为SELinux上下文(context)。
SELinux上下文有时被称为SELinux标签,它是一个提取系统级别细节并专注于实体的安全属性的标识符。
这不仅提供了在SELinux策略中引用对象的一个一致方法,而且消除了在其他身份识别系统中可能存在的模糊性。
例如,某个文件可以在使用绑定挂载的系统中有多个有效的路径名称。
SELinux策略在一系列规则中使用这些上下文,它们定义进程如何相互交互以及与各种系统资源进行交互。
默认情况下,策略不允许任何交互,除非规则明确授予了相应的权限。
注意请记住,对SELinux策略规则的检查是在DAC规则后进行的。
如果DAC规则已拒绝了访问,则不会使用SELinux策略规则。
这意味着,如果传统的DAC规则已阻止了访问,则不会在SELinux中记录拒绝信息。
SELinux上下文包括以下字段:user(用户)、role(角色)、type(类型)和securitylevel(安全级别)。
在SELinux策略中,SELinux类型信息可能是最重要的。
这是因为,最常用的、用于定义允许在进程和系统资源间进行的交互的策略规则会使用SELinux类型而不是SELinux的完整上下文。
SELinux类型以_t结尾。
例如:网页服务器的类型名称为httpd_t。
在/var/www/html/中的文件和目录的类型上下文是httpd_sys_content_t。
在/tmp和/var/tmp/中的文件和目录的类型上下文是tmp_t。
web服务器端口的类型上下文是http_port_t。
存在一个策略规则,它允许Apache(web服务器进程作为httpd_t运行)访问/var/www/html/和其它web服务器目录中带有上下文的文件和目录(httpd_sys_content_t)。
而在/tmp和/var/tmp/中的文件的策略没有允许规则,因此不允许对它们进行访问。
因此,当使用SELinux时,即使Apache被破坏,一个恶意的脚本可以访问它,也无法访问/tmp目录。
图1.1.通过SELinux以安全的方式运行Apache和MariaDB的示例。

6 第1章SELINUX入门 在上例中,SELinux允许以httpd_t运行的Apache进程访问/var/www/html/目录,并拒绝同一进程访问/data/mysql/目录,因为httpd_t和mysqld_db_t类型上下文没有允许规则。
另一方面,作为mysqld_t运行的MariaDB进程可以访问/data/mysql/目录,SELinux也会正确地拒绝使用mysqld_t类型的进程来访问标记为httpd_sys_content_t的/var/www/html/目录。
其它资源selinux(8)aproposselinux命令列出的manpage和manpage。
如果安装了selinux-policy-doc软件包,man-k_selinux命令列出的manpage。
TheSELinuxColoringBook可帮助您更好地了解SELinux基本概念。

SELinuxWikiFAQ 1.2.运行SELINUX的好处 SELinux提供以下优点:所有进程和文件都被标记。
SELinux策略规则定义了进程如何与文件交互,以及进程如何相互交互。
只有存在明确允许的SELinux策略规则时,才能允许访问。
精细访问控制。
传统的UNIX通过用户的授权、基于Linux的用户和组进行控制。
而SELinux的访问控制基于所有可用信息,如SELinux用户、角色、类型以及可选的安全级别。
SELinux策略由系统管理员进行定义,并在系统范围内强制执行。
改进了权限升级攻击的缓解方案。
进程在域中运行,因此是相互分离的。
SELinux策略规则定义了如何处理访问文件和其它进程。
如果某个进程被破坏,攻击者只能访问该进程的正常功能,而且只能访问已被配置为可以被该进程访问的文件。
例如:如果ApacheHTTP服务器被破坏,攻击者无法使用该进程读取用户主目录中的文件,除非添加或者配置了特定的SELinux策略规则允许这类访问。
SELinux可以用来强制实施数据机密性和完整性,同时保护进程不受不可信输入的影响。
但是,SELinux本身并不是: 防病毒软件,用来替换密码、防火墙和其它安全系统,多合一的安全解决方案。
SELinux旨在增强现有的安全解决方案,而不是替换它们。
即使运行SELinux,仍需要遵循好的安全实践,如保持软件更新、使用安全的密码、使用防火墙。
1.3.SELINUX示例 以下示例演示了SELinux如何提高安全性:默认操作为deny(拒绝)。
如果SELinux策略规则不存在允许访问(如允许进程打开一个文件),则拒绝访问。
SELinux可以限制Linux用户。
SELinux策略中包括很多受限制的SELinux用户。
可将Linux用户映射到受限制的SELinux用户,以便利用其使用的安全规则和机制。
例如:将一个Linux用户映射到SELinuxuser_u用户,这会导致Linux用户无法运行应用程序,除非应用程序配置了用户
7 RedHatEnterpriseLinux8使用SELinux ID(setuid),如sudo和su。
另外,这还可以防止用户执行他们自己的主目录中的潜在的恶意文件和应用程序。
增加进程和数据的分离。
SELinux域(domain)的概念允许定义哪些进程可以访问某些文件和目录。
例如:在运行SELinux时,除非有其他配置,攻击者将无法侵入Samba服务器,然后使用Samba服务器作为攻击向量读取和写入其它进程使用的文件(如MariaDB数据库)。
SELinux可帮助缓解配置错误带来的破坏。
不同的DNS服务器通常会在彼此间复制信息,这被称为区传输(zonetransfer).攻击者可以利用区传输来更新DNS服务器使其包括错误的信息。
当在RedHatEnterpriseLinux中使用BIND(BerkeleyNameDomain)作为DNS服务器运行时,即使管理员没有限制哪些服务器可执行区传输,默认的SELinux策略也会阻止区文件[1]通过BINDnamed守护进程本身或其它进程的区传输被更新。
1.4.SELINUX构架和软件包 SELinux是一个内置在Linux内核中的Linux安全模块(LSM)。
内核中的SELinux子系统由安全策略驱动,该策略由管理员控制并在引导时载入。
系统中所有与安全性相关的、内核级别的访问操作都会被SELinux截取,并在加载的安全策略上下文中检查。
如果载入的策略允许操作,它将继续进行。
否则,操作会被阻断,进程会收到一个错误。
SELinux决策(如允许或禁止访问)会被缓存。
这个缓存被称为essVectorCache(AVC)。
通过使用这些缓存的决定,可以较少对SELinux策略规则的检查,这会提高性能。
请记住,如果DAC规则已首先拒绝了访问,则SELinux策略规则无效。
原始审计消息会记录到/var/log/audit/audit.log,它们以type=AVC字符串开头。
在RedHatEnterpriseLinux8中,系统服务由systemd守护进程控制;systemd启动和停止所有服务,同时用户和进程使用systemctl工具与systemd进行通信。
systemd守护进程可以参考SELinux策略,检查调用进程标签以及调用者试图管理的单元文件标签,然后询问SELinux是否允许调用者的访问。
这个方法可控制对关键系统功能的访问控制,其中包括启动和停止系统服务。
systemd守护进程也可以作为SELinux访问管理器使用。
它会检索运行systemctl的进程标签,或向systemd发送D-Bus信息的进程标签。
然后守护进程会查找进程要配置的单元文件标签。
最后,如果SELinux策略允许进程标签和单元文件标签之间的特定访问,systemd就可以从内核中检索信息。
这意味着,当需要通过systemd与特定服务进行交互的应用程序被侵入时,这个应用程序也会被SELinux限制。
策略作者也可以使用这些精细的控制来限制管理员。
重要 为了避免不正确的SELinux标记以及后续问题,请确定使用systemctlstart命令启动服务。
RedHatEnterpriseLinux8提供以下用于SELinux的软件包: 策略:selinux-policy-targeted、selinux-policy-mls 工具:policycoreutils、policycoreutils-gui、libselinux-utils、policycoreutils-pythonutils、setools-console、
checkpolicy 1.5.SELINUX状态和模式 SELinux可使用三种模式之一运行:enforcing(强制)、permissive(宽容)或disabled(禁用)。
Enforcing模式是默认操作模式,在enforcing模式下SELinux可正常运行,并在整个系统中强制实施载入的安全策略。

8 第1章SELINUX入门在permissive模式中,系统会象enforcing模式一样加载安全策略,包括标记对象并在日志中记录访问拒绝条目,但它并不会拒绝任何操作。
不建议在生产环境系统中使用permissive模式,但permissive模式对SELinux策略开发和调试很有帮助。
强烈建议不要使用禁用(disabled)模式。
它不仅会使系统避免强制使用SELinux策略,还会避免为任何持久对象(如文件)添加标签,这使得在以后启用SELinux非常困难。
使用setenforce工具在enforcing和permissive模式间进行切换。
使用setenforce所做的更改在重启后不会被保留。
要改为使用enforcing模式,以Linux根用户身份输入setenforce1命令。
要改为使用permissive模式,输入setenforce0命令。
使用getenforce实用程序查看当前的SELinux模式:#getenforceEnforcing#setenforce0#getenforcePermissive#setenforce1#getenforceEnforcing在RedHatEnterpriseLinux中,您可以在系统处于enforcing模式时,将独立的域设置为permissive模式。
例如,使httpd_t域为permissive模式:#semanagepermissive-ahttpd_t请注意,permissive域是一个强大的工具,它可能会破坏您系统的安全性。
红帽建议谨慎使用permissive域,如仅在调试特定情境时使用。
[1]包括DNS服务器所使用的信息(如主机名到IP地址映射)的文本文件。

9 RedHatEnterpriseLinux8使用SELinux 第2章更改SELINUX状态和模式 启用后,SELinux可使用两种模式之一运行:enforcing或permissive。
以下小节介绍了如何永久更改这些模式。
2.1.SELINUX状态和模式的更改 如SELinux状态和模式中所述,SELinux可以被启用或禁用。
启用后,SELinux有两个模式:enforcing和permissive。
使用getenforce或sestatus命令检查SELinux在哪个模式中运行。
getenforce命令返回Enforcing、Permissive或Disabled。
sestatus命令返回SELinux状态以及正在使用的SELinux策略: $sestatus SELinuxstatus: enabled SELinuxfsmount: /sys/fs/selinux SELinuxrootdirectory:/etc/selinux Loadedpolicyname: targeted Currentmode: enforcing Modefromconfigfile: enforcing PolicyMLSstatus: enabled Policydeny_unknownstatus:allowed Memoryprotectionchecking:actual(secure) Maxkernelpolicyversion:31 注意 当系统以permissive模式运行SELinux时,用户和进程可能会错误地标记各种文件系统对象。
当禁用SELinux时创建的文件系统对象不会被标记。
这会在将SELinux改为enforcing模式时导致问题,因为SELinux依赖于正确的文件系统对象标签。
为了防止不正确标记和未标记的文件造成问题,当从disabled状态改为permissive或enforcing模式时会自动重新标记文件系统。
在permissive模式中,以root用户身份使用fixfiles-Fonboot命令创建包含/.autorelabel选项的-F文件,以确保在下次重启时重新标记文件。
2.2.切换到PERMISSIVE模式 使用以下步骤将SELinux模式永久改为permissive。
当SELinux是以permissive模式运行时,不会强制SELinux策略。
系统可保持正常操作,SELinux不会拒绝任何操作,而只是记录AVC信息,它们可用于故障排除、调试和SELinux策略改进。
每个AVC在这个示例中仅记录一次。
先决条件 在您的系统中安装了selinux-policy-targeted、libselinux-utils和policycoreutils软件包。
未使用selinux=0或者enforcing=0内核参数。
流程
1.在您选择的文本编辑器中打开/etc/selinux/config文件,例如: 10 第2章更改SELINUX状态和模式 #vi/etc/selinux/config
2.配置SELINUX=permissive选项: #ThisfilecontrolsthestateofSELinuxonthesystem.#SELINUX=cantakeoneofthesethreevalues:#enforcing-SELinuxsecuritypolicyisenforced.#permissive-SELinuxprintswarningsinsteadofenforcing.#disabled-NoSELinuxpolicyisloaded.SELINUX=permissive#SELINUXTYPE=cantakeoneofthesetwovalues:#targeted-Targetedprocessesareprotected,#mls-MultiLevelSecurityprotection.SELINUXTYPE=targeted
3.重启系统: #reboot 验证
1.系统重启后,确认getenforce命令返回Permissive: $getenforcePermissive 2.3.切换到ENFORCING模式 使用以下步骤将SELinux切换到enforcing模式。
当SELinux处于enforcing模式时,它会强制SELinux策略并根据SELinux策略规则拒绝访问。
在RHEL中,当系统最初使用SELinux安装时,默认启用enforcing模式。
先决条件 在您的系统中安装了selinux-policy-targeted、libselinux-utils和policycoreutils软件包。
未使用selinux=0或者enforcing=0内核参数。
流程
1.在您选择的文本编辑器中打开/etc/selinux/config文件,例如: #vi/etc/selinux/config
2.配置SELINUX=enforcing选项: #ThisfilecontrolsthestateofSELinuxonthesystem.#SELINUX=cantakeoneofthesethreevalues:#enforcing-SELinuxsecuritypolicyisenforced.#permissive-SELinuxprintswarningsinsteadofenforcing.#disabled-NoSELinuxpolicyisloaded.SELINUX=enforcing#SELINUXTYPE=cantakeoneofthesetwovalues: 11 RedHatEnterpriseLinux8使用SELinux #targeted-Targetedprocessesareprotected,#mls-MultiLevelSecurityprotection.SELINUXTYPE=targeted
3.保存更改,重启系统:#reboot 在下一次引导中,SELinux会重新标记系统中的所有文件和目录,并为禁用SELinux时创建的文件和目录添加SELinux上下文。
验证
1.系统重启后,确认getenforce命令返回Enforcing:$getenforceEnforcing 注意切换到enforcing模式后,SELinux可能会因为不正确或缺少SELinux策略规则而拒绝某些操作。
要查看SELinux拒绝的操作,以root用户身份输入以下命令: #ausearch-mAVC,USER_AVC,SELINUX_ERR,USER_SELINUX_ERR-tstoday另外,如果安装了setroubleshoot-server软件包,请输入: #grep"SELinuxispreventing"/var/log/messages如果SELinux是活跃的,且Audit守护进程(auditd)没有在您的系统中运行,在dmesg命令输出中搜索特定的SELinux信息: #dmesg|grep-i-etype=1300-etype=1400如需更多信息,请参阅SELinux故障排除。
2.4.在之前禁用的系统中启用SELINUX 当您在之前禁用的系统中启用SELinux时,为了避免出现问题(如系统无法引导或进程失败),请按照以下步骤执行: 流程
1.以permissive模式启用SELinux。
如需更多信息,请参阅切换到permissive模式。

2.重启您的系统:#reboot
3.检查SELinux拒绝信息。
如需更多信息,请参阅识别SELinux拒绝操作信息。

4.如果没有拒绝的操作,切换到enforcing模式。
如需更多信息,请参阅在引导时进入SELinux模 12 第2章更改SELINUX状态和模式
4.如果没有拒绝的操作,切换到enforcing模式。
如需更多信息,请参阅在引导时进入SELinux模式。
验证
1.系统重启后,确认getenforce命令返回Enforcing:$getenforceEnforcing 注意要在enforcing模式下使用SELinux运行自定义应用程序,请选择以下之一: 在unconfined_service_t域中运行应用程序。
为应用程序编写新策略。
如需更多信息,请参阅编写自定义SELinux策略部分。
其它资源SELinux状态和模式部分涵盖了模式的临时更改。
2.5.禁用SELINUX 使用以下步骤永久禁用SELinux。
重要禁用SELinux时,SELinux策略不被加载;它不会被强制执行,也不会记录AVC信息。
因此,运行SELinux的好处中介绍的好处都将没有。
红帽强烈建议您使用permissive模式,而不是永久禁用SELinux。
如需有关permissive模式的更多信息,请参阅切换为permissive模式。
警告在/etc/selinux/config中使用SELINUX=disabled选项禁用SELinux的结果是,内核在引导时首先启用SELinux,并在后续的引导过程后切换到禁用模式。
因为内存泄漏和竞争条件会导致内核panics,如果您的情况确实需要完全禁用SELinux,则首选的方法是,在内核命令行中添加selinux=0参数(如引导时更改SELinux模式)所述。
流程
1.在您选择的文本编辑器中打开/etc/selinux/config文件,例如:#vi/etc/selinux/config2.配置SELINUX=disabled选项: 13 RedHatEnterpriseLinux8使用SELinux #ThisfilecontrolsthestateofSELinuxonthesystem.#SELINUX=cantakeoneofthesethreevalues:#enforcing-SELinuxsecuritypolicyisenforced.#permissive-SELinuxprintswarningsinsteadofenforcing.#disabled-NoSELinuxpolicyisloaded.SELINUX=disabled#SELINUXTYPE=cantakeoneofthesetwovalues:#targeted-Targetedprocessesareprotected,#mls-MultiLevelSecurityprotection.SELINUXTYPE=targeted
3.保存更改并重启您的系统: #reboot 验证
1.重启后,确认getenforce命令返回Disabled: $getenforceDisabled 2.6.在引导时更改SELINUX模式 在引导时,您可以设置几个内核参数来更改SELinux的运行方式: enforcing=0设置此参数可让系统以permissive模式启动,这在进行故障排除时非常有用。
如果您的文件系统被破坏,使用permissive模式可能是唯一的选择。
在permissive模式中,系统将继续正确创建标签。
在这个模式中产生的AVC信息可能与enforcing模式不同。
在permissive模式中,只报告来自于同一拒绝的一系列操作的第一个拒绝信息。
然而,在enforcing模式中,您可能会得到一个与读取目录相关的拒绝信息,应用程序将停止。
在permissive模式中,您会得到相同的AVC信息,但应用程序将继续读取目录中的文件,并为因为每个拒绝额外获得一个AVC。
selinux=0这个参数会导致内核不载入SELinux构架的任意部分。
初始化脚本会注意到系统使用selinux=0参数引导,并创建/.autorelabel文件。
这会导致系统在下次使用SELinuxenabled模式引导时自动重新标记。
重要 红帽不推荐使用selinux=0参数。
要调试您的系统,首选使用permissive模式。
autorelabel=1这个参数强制系统使用类似以下命令的重新标记: #touch/.autorelabel#reboot 如果文件系统中包含大量错误标记的对象,以permissive模式启动系统,使autorelabel进程成功。
14 第2章更改SELINUX状态和模式其它资源 有关SELinux的其他内核引导参数,如checkreqprot,请查看在安装kernel-doc软件包时安装的/usr/share/doc/kernel-doc-/Documentation/admin-guide/kernelparameters.txt文件。
使用安装的内核的版本号替换字符串,例如: #yuminstallkernel-doc$less/usr/share/doc/kernel-doc-4.18.0/Documentation/admin-guide/kernel-parameters.txt 15 RedHatEnterpriseLinux8使用SELinux 第3章管理限制和未限制的用户 下面的部分解释了Linux用户与SELinux用户的映射,描述了基本限制的用户域,并演示了将新用户映射到SELinux用户。
3.1.限制和未限制的用户 每个Linux用户都使用SELinux策略映射到SELinux用户。
这可允许Linux用户继承对SELinux用户的限制。
要在您的系统中查看SELinux用户映射,以root用户身份使用semanagelogin-l命令: #semanagelogin-l LoginName SELinuxUser MLS/MCSRange __default__ unconfined_us0-s0:c0.c1023* root unconfined_us0-s0:c0.c1023* Service 在RedHatEnterpriseLinux中,Linux用户默认映射到SELinuxdefault登录,这与SELinuxunconfined_u用户映射。
下面一行定义了默认映射: __default__ unconfined_us0-s0:c0.c1023* 受限制和不受限制的Linux用户会受到可执行和可写入的内存检查,也受到MCS或MLS的限制。
要列出可用的SELinux用户,请输入以下命令: $seinfo-uUsers:8 guest_urootstaff_usysadm_usystem_uunconfined_uuser_uxguest_u 请注意,seinfo命令由setools-console软件包提供,默认不会安装。
如果一个未限制的Linux用户执行一个应用程序,这个应用程序被SELinux策略定义为可以从unconfined_t域转换到其自身限制域的应用程序,则未限制的Linux用户仍会受到那个受限制域的限制。
这样做的安全优点是,即使Linux用户的运行没有限制,但应用程序仍受限制。
因此,对应用程序中漏洞的利用会被策略限制。
同样,我们可以将这些检查应用到受限制的用户。
每个受限制的用户都受到受限用户域的限制。
SELinux策略还可定义从受限制的用户域转换到自己受限制的目标域转换。
在这种情况下,受限制的用户会受到那个目标限制的域的限制。
重点是,根据用户的角色,把特定的权限与受限制的用户相关联。
3.2.SELINUX用户功能 下表提供了RedHatEnterpriseLinux中Linux用户的基本受限制域示例:表3.1.SELinux用户功能 16 第3章管理限制和未限制的用户 用户 角色 sysadm_ustaff_uuser_uguest_uxguest_u sysadm_rstaff_ruser_rguest_rxguest_r 域 sysadm_tstaff_tuser_tguest_txguest_t X窗口系统 是是是否是 su或sudo su和sudo仅sudo否否否 在主目录和网络 /tmp中执行(默认) 是 是 是 是 是 是 是 否 是 仅Firefox user_t、guest_t和xguest_t域中的Linux用户只能在SELinux策略允许时运行setuserID(setuid)应用程序(如passwd)。
这些用户无法运行su和sudosetuid应用程序,因此无法使用这些应用程序成为root用户。
sysadm_t、staff_t、user_t和xguest_t域中的Linux用户可以使用X窗口系统和终端登录。
默认情况下,staff_t、user_t、guest_t和xguest_t域中的Linux用户可以在他们的主目录/tmp目录中执应用程序。
要防止他们在他们有写入访问权限的目录中执行应用程序(通过继承的用户权限),将guest_exec_content和xguest_exec_content布尔值设置为off。
这有助于防止有缺陷或恶意的应用程序修改用户的文件。
xguest_t域里的唯一网络访问Linux用户是Firefox连接到网页。
sysadm_u用户无法使用SSH直接登录。
要为sysadm_u启用SSH登录,将ssh_sysadm_login布尔值设置为on: #setsebool-Pssh_sysadm_loginon 请注意,system_u是系统进程和对象的特殊用户身份。
它绝对不能和Linux用户关联。
另外,unconfined_u和root是非限制的用户。
因此,它们不包含在前面的SELinux用户功能表中。
除了已提到的SELinux用户,还有一些特殊的角色,它们可以使用semanageuser命令与用户映射。
这些角色决定了SELinux允许这些用户可以做什么: webadm_r只能管理与ApacheHTTP服务器相关的SELinux类型。
dbadm_r只能管理与MariaDB数据库和PostgreSQL数据库管理系统相关的SELinux类型。
logadm_r只能管理与syslog和auditlog进程相关的SELinux类型。
secadm_r只能管理SELinux。
auditadm_r只能管理与审计子系统相关的进程。
要列出所有可用角色,请输入seinfo-r命令: $seinfo-rRoles:14 17 RedHatEnterpriseLinux8使用SELinux auditadm_rdbadm_rguest_rlogadm_rnx_server_robject_rsecadm_rstaff_rsysadm_rsystem_runconfined_ruser_rwebadm_rxguest_r 请注意,seinfo命令由setools-console软件包提供,默认不会安装。
其它资源 seinfo
(1)、semanage-login
(8)和xguest_selinux(8)manpage 3.3.添加一个新用户会自动映射到SELINUXUNCONFINED_U用户 下面的步骤演示了如何在系统中添加新Linux用户。
用户会自动映射到SELinuxunconfined_u用户。
先决条件 root用户以不受限制的形式运行,如RedHatEnterpriseLinux中的默认设置。
流程
1.输入以下命令创建一个名为example.user的新的Linux用户: #useraddexample.user
2.要为Linuxexample.user用户分配密码: #passwdexample.userChangingpasswordforuserexample.user.Newpassword:Retypenewpassword:passwd:allauthenticationtokensupdatedessfully.
3.退出当前会话。

4.以Linuxexample.user用户身份登录。
当您登录后,pam_selinuxPAM模块会自动将Linux用户映射到SELinux用户(本例中为unconfined_u),并设置结果的SELinux上下文。
然后会使用这个上下文启动Linux用户的shell。
验证
1.当以example.user用户身份登录时,检查Linux用户的上下文: 18 第3章管理限制和未限制的用户 $id-Zunconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 其它资源pam_selinux(8)man手册. 3.4.以SELINUX限制的用户身份添加新用户 使用以下步骤为该系统添加新的SELinux保护用户。
这个示例步骤会在创建用户帐户后马上将用户映射到SELinuxstaff_u用户。
先决条件root用户以不受限制的形式运行,如RedHatEnterpriseLinux中的默认设置。
流程
1.输入以下命令创建一个名为example.user的新Linux用户,并将其映射到SELinuxstaff_u用户: #useradd-Zstaff_uexample.user
2.要为Linuxexample.user用户分配密码:#passwdexample.userChangingpasswordforuserexample.user.Newpassword:Retypenewpassword:passwd:allauthenticationtokensupdatedessfully.
3.退出当前会话。

4.以Linuxexample.user用户身份登录。
用户的shell使用staff_u上下文启动。
验证
1.当以example.user用户身份登录时,检查Linux用户的上下文:$id-Zuid=1000(example.user)gid=1000(example.user)groups=1000(example.user)context=staff_u:staff_r:staff_t:s0-s0:c0.c1023 其它资源pam_selinux(8)man手册. 3.5.限制常规用户 您可以将系统中的所有常规用户映射到user_uSELinux用户。
默认情况下,RedHatEnterpriseLinux中的所有Linux用户,包括有管理特权的用户,都映射到未限制 19 RedHatEnterpriseLinux8使用SELinux 默认情况下,RedHatEnterpriseLinux中的所有Linux用户,包括有管理特权的用户,都映射到未限制的SELinux用户unconfined_u。
您可以通过将用户分配给受SELinux限制的用户来提高系统安全性。
这对遵守V-71971安全技术实施指南非常有用。
流程
1.显示SELinux登录记录列表。
这个列表显示了Linux用户与SELinux用户的映射: #semanagelogin-l LoginNameSELinuxUserMLS/MCSRangeService __default__unconfined_us0-s0:c0.c1023* root unconfined_us0-s0:c0.c1023*
2.将__default__user(代表所有没有显式映射的用户)映射到user_uSELinux用户: #semanagelogin-m-suser_u-rs0__default__ 验证
1.检查__default__用户是否已映射到user_uSELinux用户: #semanagelogin-l LoginNameSELinuxUserMLS/MCSRangeService __default__user_us0 * root unconfined_us0-s0:c0.c1023*
2.验证新用户的进程是否在user_u:user_r:user_t:s0SELinux上下文中运行。
a.创建一个新用户:#adduserexample.user b.定义example.user的密码:#passwdexample.user c.以root身份登录并以新用户身份登录。
d.显示用户ID的安全上下文: [example.user@localhost~]$id-Zuser_u:user_r:user_t:s0 e.显示用户当前进程的安全上下文: [example.user@localhost~]$psaxZ LABEL PIDTTYSTATTIMECOMMAND - 1?
Ss0:05/usr/lib/systemd/systemd--switched-root-- system--deserialize18 20 第3章管理限制和未限制的用户 - 3729?
S0:00(sd-pam) user_u:user_r:user_t:s03907?
Ss0:00/usr/lib/systemd/systemd--user - 3911?
S0:00(sd-pam) user_u:user_r:user_t:s03918?
S0:00sshd:example.user@pts/0 user_u:user_r:user_t:s03922pts/0Ss0:00-bash user_u:user_r:user_dbusd_t:s03969?
Ssl0:00/usr/bin/dbus-daemon--session-- address=systemd:--nofork--nopidfile--systemd-activation--syslog-only user_u:user_r:user_t:s03971pts/0R+0:00psaxZ 3.6.通过映射到SYSADM_U来限制管理员 您可以通过将用户直接映射到sysadm_uSELinux用户来限制具有管理权限的用户。
当用户登录时,会话会在sysadm_u:sysadm_r:sysadm_tSELinux上下文中运行。
默认情况下,RedHatEnterpriseLinux中的所有Linux用户,包括有管理特权的用户,都映射到未限制的SELinux用户unconfined_u。
您可以通过将用户分配给受SELinux限制的用户来提高系统安全性。
这对遵守V-71971安全技术实施指南非常有用。
先决条件root用户运行没有限制。
这是RedHatEnterpriseLinux的默认设置。
流程
1.可选:允许sysadm_u用户使用SSH连接到系统:#setsebool-Pssh_sysadm_loginon2.创建新用户,将用户添加到wheel用户组中,并将用户映射到sysadm_uSELinux用户:#adduser-Gwheel-Zsysadm_uexample.user3.可选:将现有用户映射到sysadm_uSELinux用户,并将该用户添加到wheel用户组中:#usermod-Gwheel-Zsysadm_uexample.user 验证
1.检查example.user是否已映射到sysadm_uSELinux用户: #semanagelogin-l|grepexample.userexample.usersysadm_us0-s0:c0.c1023*
2.以example.user身份登录(例如使用SSH),并显示用户的安全上下文: [example.user@localhost~]$id-Zsysadm_u:sysadm_r:sysadm_t:s0-s0:c0.c1023
3.切换到root用户: $sudo-i[sudo]passwordforexample.user: 21 RedHatEnterpriseLinux8使用SELinux
4.验证安全性上下文是否保持不变:#id-Zsysadm_u:sysadm_r:sysadm_t:s0-s0:c0.c1023
5.试用管理任务,例如重启sshd服务:#systemctlrestartsshd 如果没有输出结果,则代表命令可以成功完成。
如果该命令没有成功完成,它会输出以下信息: Failedtorestartsshd.service:essdeniedSeesystemlogsand'systemctlstatussshd.service'fordetails. 3.7.使用SUDO和SYSADM_R角色限制管理员 您可以将具有管理权限的特定用户映射到staff_uSELinux用户,并配置sudo以便用户获得sysadm_rSELinux管理员角色。
这个角色允许用户在不拒绝SELinux的情况下执行管理任务。
当用户登录时,会话会在staff_u:staff_r:staff_tSELinux上下文中运行,当用户使用sudo运行一个命令时,会话会更改为staff_u:sysadm_r:sysadm_t上下文。
默认情况下,RedHatEnterpriseLinux中的所有Linux用户,包括有管理特权的用户,都映射到未限制的SELinux用户unconfined_u。
您可以通过将用户分配给受SELinux限制的用户来提高系统安全性。
这对遵守V-71971安全技术实施指南非常有用。
先决条件root用户运行没有限制。
这是RedHatEnterpriseLinux的默认设置。
流程
1.创建新用户,将用户添加到wheel用户组中,并将用户映射到staff_uSELinux用户:#adduser-Gwheel-Zstaff_uexample.user2.可选:将现有用户映射到staff_uSELinux用户,并将该用户添加到wheel用户组中:#usermod-Gwheel-Zstaff_uexample.user3.要允许example.user获取SELinux管理员角色,请在/etc/sudoers.d/目录中创建新文件,例如:#visudo-f/etc/sudoers.d/example.user4.在新文件中添加以下行:example.userALL=(ALL)TYPE=sysadm_tROLE=sysadm_rALL 验证 22 第3章管理限制和未限制的用户
1.检查example.user是否已映射到staff_uSELinux用户: #semanagelogin-l|grepexample.userexample.userstaff_us0-s0:c0.c1023*
2.以example.user身份登录(例如使用SSH),切换到root用户:[example.user@localhost~]$sudo-i[sudo]passwordforexample.user:
3.显示root安全上下文:#id-Zstaff_u:sysadm_r:sysadm_t:s0-s0:c0.c10234.试用管理任务,例如重启sshd服务:#systemctlrestartsshd如果没有输出结果,则代表命令可以成功完成。
如果该命令没有成功完成,它会输出以下信息:Failedtorestartsshd.service:essdeniedSeesystemlogsand'systemctlstatussshd.service'fordetails. 3.8.其它资源 unconfined_selinux
(8)、user_selinux
(8)、staff_selinux
(8)和sysadm_selinux(8)manpage如何使用SELinux受限用户设置系统 23 RedHatEnterpriseLinux8使用SELinux 第4章为使用非标准配置的应用程序和服务配置SELINUX 当SELinux处于enforcing模式时,默认策略是目标(targeted)策略。
以下小节提供有关在更改默认配置后为各种服务设置和配置SELinux策略的信息,比如端口、数据库位置或者用于进程的文件系统权限。
您了解如何更改非标准端口的SELinux类型,识别并修复默认目录更改的不正确的标签,以及使用SELinux布尔值调整策略。
4.1.在非标准配置中为APACHEHTTP服务器自定义SELINUX策略 您可以将ApacheHTTP服务器配置为在不同端口中侦听,并在非默认目录中提供内容。
要防止SELinux拒绝带来的后果,请按照以下步骤调整系统的SELinux策略。
先决条件已安装httpd软件包,并将ApacheHTTP服务器配置为侦听TCP端口3131,并使用/var/test_www/目录而不是默认的/var/www/目录。
在系统中安装了policycoreutils-python-utils和setroubleshoot-server软件包。
流程
1.启动httpd服务并检查状态: #systemctlstarthttpd#systemctlstatushttpd...httpd[14523]:(13)Permissiondenied:AH00072:make_sock:couldnotbindtoaddress[::]:3131...systemd[1]:FailedtostartTheApacheHTTPServer....
2.SELinux策略假设httpd在端口80上运行: #semanageport-l|grephttp http_cache_port_t tcp8080,8118,8123,10001-10010 http_cache_port_t udp3130 http_port_t tcp80,81,443,488,8008,8009,8443,9000 pegasus_http_port_t tcp5988 pegasus_https_port_t tcp5989
3.更改SELinux类型端口3131使其与端口80匹配:#semanageport-a-thttp_port_t-ptcp3131
4.再次启动httpd:#systemctlstarthttpd
5.但是,内容仍无法访问:#wgetlocalhost:3131/index.html 24 第4章为使用非标准配置的应用程序和服务配置SELINUX ...HTTPrequestsent,awaitingresponse...403Forbidden... 使用sealert工具查找原因: #sealert-l"*"...SELinuxispreventingessonthefile/var/test_....
6.使用matchpathcon工具比较标准SELinux类型和新路径: #matchpathcon/var/www/html/var/test_www/html/var/www/htmlsystem_u:object_r:httpd_sys_content_t:s0/var/test_www/htmlsystem_u:object_r:var_t:s0
7.将新/var/test_www/html/内容目录的SELinux类型改为默认/var/www/html目录的类型: #semanagefcontext-a-e/var/www/var/test_www
8.递归重新标记/var目录: #restorecon-Rv/var/...Relabeled/var/test_www/htmlfromunconfined_u:object_r:var_t:s0tounconfined_u:object_r:httpd_sys_content_t:s0Relabeled/var/test_fromunconfined_u:object_r:var_t:s0tounconfined_u:object_r:httpd_sys_content_t:s0 验证
1.检查httpd服务是否正在运行: #systemctlstatushttpd...Active:active(running)...systemd[1]:StartedTheApacheHTTPServer.httpd[14888]:Serverconfigured,listeningon:port3131...
2.验证ApacheHTTP服务器提供的内容是否可以访问: #wgetlocalhost:3131/index.html...HTTPrequestsent,awaitingresponse...200OKLength:0[text/html]Savingto:‘index.html’... 其它资源 25 RedHatEnterpriseLinux8使用SELinux semanage
(8)、matchpathcon
(8)和sealert(8)manpage。
4.2.调整用于使用SELINUX布尔值共享NFS和CIFS卷的策略 您可以使用布尔值在运行时更改SELinux策略部分,即使您不了解SELinux策略的编写方式。
这启用了更改,比如允许服务访问NFS卷而无需重新载入或者重新编译SELinux策略。
以下流程演示了列出SELinux布尔值并进行配置,以实现策略中所需的更改。
在客户端的NFS挂载使用NFS卷策略定义的默认上下文标记。
在RHEL中,这个默认上下文使用nfs_t类型。
另外,挂载在客户端中的Samba共享使用策略定义的默认上下文标记。
这个默认上下文使用cifs_t类型。
您可以启用或禁用布尔值来控制允许哪些服务访问nfs_t和cifs_t类型。
要允许ApacheHTTP服务器服务(httpd)访问和共享NFS和CIFS卷,请执行以下步骤: 先决条件 (可选)安装selinux-policy-devel软件包来获取semanageboolean-l命令输出中的SELinux布尔值和更多详细描述。
流程
1.识别与NFS、CIFS和Apache相关的SELinux布尔值: #semanageboolean-l|grep'nfs\|cifs'|grephttpd httpd_use_cifs (off,off)Allowesscifsfilesystems httpd_use_nfs (off,off)Allowessnfsfilesystems
2.列出布尔值的当前状态: $getsebool-a|grep'nfs\|cifs'|grephttpdhttpd_use_cifs-->offhttpd_use_nfs-->off
3.启用指定的布尔值: #setseboolhttpd_use_nfson#setseboolhttpd_use_cifson 注意 使用setsebool的-P选项在重启后保留更改。
setsebool-P命令需要重建整个策略,且可能需要一些时间,具体取决于您的配置。
验证
1.检查布尔值为on: $getsebool-a|grep'nfs\|cifs'|grephttpdhttpd_use_cifs-->onhttpd_use_nfs-->on 其它资源 semanage-boolean
(8)、sepolicy-booleans
(8)、getsebool
(8)、setsebool
(8)、booleans
(5) 26 第
4章为使用非标准配置的应用程序和服务配置SELINUXsemanage-boolean
(8)、sepolicy-booleans
(8)、getsebool
(8)、setsebool
(8)、booleans
(5)和booleans(8)manpage 4.3.其它资源 故障排除与SELinux相关的问题 27 RedHatEnterpriseLinux8使用SELinux 第5章故障排除与SELINUX相关的问题 如果您计划在之前禁用SELinux的系统中启用SELinux,或者您以非标准配置运行服务,您可能需要排除SELinux可能会阻断的问题。
请注意,在多数情况下,SELinux拒绝通常代表存在错误的配置。
5.1.识别SELINUX拒绝 只执行此流程中的必要步骤;在大多数情况下,您只需要执行第1步。
流程
1.当您的操作被SELinux阻止时,/var/log/audit/audit.log文件是第一个检查拒绝的更多信息。
要查询审计日志,使用ausearch工具。
因为SELinux决策(如允许或禁止访问)已被缓存,且这个缓存被称为essVectorCache(AVC),所以对消息类型参数使用AVC和USER_AVC值,例如: #ausearch-mAVC,USER_AVC,SELINUX_ERR,USER_SELINUX_ERR-tsrecent 如果没有匹配项,请检查audit守护进程是否正在运行。
如果没有启动,在启动auditd后重复拒绝的场景,并再次检查审计日志。

2.如果auditd正在运行,但ausearch输出中没有匹配项,请检查systemd日志提供的消息: #journalctl-tsetroubleshoot
3.如果SELinux是活跃的,且Audit守护进程没有在您的系统中运行,在dmesg命令输出中搜索特定的SELinux信息: #dmesg|grep-i-etype=1300-etype=1400
4.即使进行了前面的三个检查后,您仍可能找不到任何结果。
在这种情况下,因为dontaudit规则,AVC拒绝可以会被静默。
临时禁用dontaudit规则,允许记录所有拒绝信息: #semodule-DB 在重新运行拒绝的场景并使用前面的步骤查找拒绝信息后,以下命令会在策略中再次启用dontaudit规则: #semodule-B
5.如果您应用了前面所有四个步骤,这个问题仍然无法识别,请考虑SELinux是否真正阻止了您的场景:切换到permissive模式: #setenforce0$getenforcePermissive 重复您的场景。
如果问题仍然存在,则代表SELinux以外的系统阻断了您的场景。
28 第5章故障排除与SELINUX相关的问题 5.2.分析SELINUX拒绝信息 在确认SELinux会阻止您的场景后,可能需要在进行修复前分析根本原因。
先决条件在系统中安装了policycoreutils-python-utils和setroubleshoot-server软件包。
流程
1.使用sealert命令列出有关日志拒绝的详情,例如: $sealert-l"*"SELinuxispreventing/usr/bin/passwdfromwriteessonthefile/root/test. *****Pluginleaks(86.2confidence)suggests***************************** Ifyouwanttoignorepasswdtryingtowriteessthetestfile,becauseyoubelieveitshouldnotneedthisess.Thenyoushouldreportthisasabug.Youcangeneratealocalpolicymoduletodontauditthisess.Do#ausearch-x/usr/bin/passwd--raw|audit2allow-D-Mmy-passwd#semodule-X300-imy-passwd.pp *****Plugincatchall(14.7confidence)suggests************************** ... RawAuditMessagestype=AVCmsg=audit(1553609555.619:127):avc:denied{write}forpid=m="passwd"path="/root/test"dev="dm-0"ino=17142697scontext=unconfined_u:unconfined_r:passwd_t:s0-s0:c0.c1023tcontext=unconfined_u:object_r:admin_home_t:s0tclass=filepermissive=0 ... Hash:passwd,passwd_t,admin_home_t,file,write
2.如果上一步中的输出没有包含清晰的建议:启用全路径审核查看访问对象的完整路径,并让其他LinuxAudit事件字段可见: #auditctl-w/etc/shadow-pw-kshadow-write 清除setroubleshoot缓存: #rm-f/var/lib/setroubleshoot/setroubleshoot.xml 重现问题。
重复步骤
1。
完成这个过程后,禁用全路径审核: 29 RedHatEnterpriseLinux8使用SELinux #auditctl-W/etc/shadow-pw-kshadow-write
3.如果sealert只返回catchall建议或者建议使用audit2allow工具添加新规则,请将您的问题与审计日志中SELinux拒绝中列出的示例匹配。
其它资源sealert(8)manpage 5.3.修复分析的SELINUX拒绝问题 在大多数情况下,sealert工具提供的建议为您提供有关如何修复与SELinux策略相关的问题的指导。
有关如何使用sealert分析SELinux拒绝的信息,请参阅分析SELinux拒绝信息。
当工具建议使用audit2allow工具进行配置更改时请小心。
当您看到SELinux拒绝时,您不应该使用audit2allow来生成本地策略模块作为您的第一个选项。
故障排除应该先检查是否有标记问题。
第二个最常见的情况是您更改了进程配置,并且忘记了要让SELinux了解它。
标记问题标记问题的常见原因是,当服务使用非标准目录时。
例如,管理员可能想要使用/srv/myweb/,而不是在网站中使用/var/www/html/。
在RedHatEnterpriseLinux中,使用var_t类型标记/srv目录。
/srv中创建的文件和目录继承这个类型。
另外,顶层目录中新创建的对象(如/myserver)可以使用default_t类型进行标记。
SELinux可防止ApacheHTTP服务器(httpd)访问这两个类型。
要允许访问,SELinux必须知道/srv/myweb/中的文件可以被httpd访问: #semanagefcontext-a-thttpd_sys_content_t"/srv/myweb(/.*)?
" 此semanage命令将/srv/myweb/目录及其下的所有文件和目录添加到SELinux文件上下文中。
semanage实用程序不会更改上下文。
以root用户身份,使用restorecon实用程序应用更改: #restorecon-R-v/srv/myweb 不正确的上下文matchpathcon工具检查文件路径的上下文,并将其与该路径的默认标签进行比较。
以下示例演示了在包含错误标记文件的目录中使用matchpathcon: $matchpathcon-V/var/www/html/*/var/hascontextunconfined_u:object_r:user_home_t:s0,shouldbesystem_u:object_r:httpd_sys_content_t:s0/var/hascontextunconfined_u:object_r:user_home_t:s0,shouldbesystem_u:object_r:httpd_sys_content_t:s0 在本例中,index.html和page1.html文件使用user_home_t类型进行标识。
这种类型用于用户主目录中的文件。
使用mv命令从主目录中移动文件可能会导致文件使用user_home_t类型进行标记。
这个类型不应存在于主目录之外。
使用restorecon实用程序将这些文件恢复到其正确类型: #restorecon-v/var/restoreconreset/var/contextunconfined_u:object_r:user_home_t:s0>system_u:object_r:httpd_sys_content_t:s0 要恢复目录中所有文件的上下文,请使用
-R选项: 30 第5章故障排除与SELINUX相关的问题 #restorecon-R-v/var/www/html/restoreconreset/var/contextunconfined_u:object_r:samba_share_t:s0>system_u:object_r:httpd_sys_content_t:s0restoreconreset/var/contextunconfined_u:object_r:samba_share_t:s0>system_u:object_r:httpd_sys_content_t:s0 以非标准方式配置受限应用程序 服务可以以多种方式运行。
要考虑这一点,您需要指定如何运行您的服务。
您可以通过
SELinux布尔值达到此目的,允许在运行时更改SELinux策略的部分。
这启用了更改,比如允许服务访问NFS卷而无需重新载入或者重新编译SELinux策略。
另外,在非默认端口号中运行服务需要使用semanage命令更新策略配置。
例如:要允许ApacheHTTP服务器与MariaDB通信,启用work_connect_db布尔值: #setsebool-Pwork_connect_dbon请注意,该-P选项可使系统重启后设置具有持久性。
如果特定服务无法访问,请使用getsebool和grep工具查看是否有布尔值可用于访问。
例如,使用getsebool-a|grepftp命令搜索FTP相关的布尔值: $getsebool-a|grepftpftpd_anon_write-->offftpd_full_ess-->offftpd_use_cifs-->offftpd_use_nfs-->off ftpd_connect_db-->offhttpd_enable_ftp_server-->offtftp_anon_write-->off 要获得布尔值列表并找出是否启用或禁用它们,请使用getsebool-a命令。
要获得包括布尔值的列表,并找出它们是否启用或禁用,请安装selinux-policy-devel软件包并以root用户身份使用semanageboolean-l命令。
端口号 根据策略配置,服务只能在某些端口号中运行。
尝试更改服务在没有更改策略的情况下运行的端口可能会导致服务无法启动。
例如,以root运行semanageport-l|grephttp命令列出http相关端口: #semanageport-l|grephttp http_cache_port_t tcp3128,8080,8118 http_cache_port_t udp3130 http_port_t tcp80,443,488,8008,8009,8443 pegasus_http_port_t tcp5988 pegasus_https_port_t tcp5989 http_port_t端口类型定义了ApacheHTTP服务器可侦听的端口,在本例中为TCP端口80、443、488、8008、8009和8443。
如果管理员配置了httpd.conf,httpd侦听端口9876(Listen9876),但没有更新策略来反应这一点,以下命令会失败: #systemctlstarthttpd.serviceJobforhttpd.servicefailed.See'systemctlstatushttpd.service'and'journalctl-xn'fordetails. 31 RedHatEnterpriseLinux8使用SELinux #systemctlstatushttpd.servicehttpd.service-TheApacheHTTPServer Loaded:loaded(/usr/lib/systemd/system/=/usr/sbin/(code=exited,status=0/SUCCESS)Process:16870ExecStart=/usr/sbin/httpd$OPTIONS-DFOREGROUND(code=exited,status=1/FAILURE) 记录类似于/var/log/audit/audit.log的SELinux拒绝信息: type=AVCmsg=audit(1225948455.061:294):avc:denied{name_bind}forpid=m="httpd"src=9876scontext=unconfined_u:system_r:httpd_t:s0tcontext=system_u:object_r:port_t:s0tclass=tcp_socket 要允许httpd侦听没有列出的http_port_t端口,使用semanageport命令为端口分配不同的标签: #semanageport-a-thttp_port_t-ptcp9876 -a选项添加一个新记录;-t选项定义了一个类型;-p选项定义了一个协议。
最后的参数是要添加的端口号。
个别情况、演变或损坏的应用程序以及被破坏的系统应用程序可能会包含程序漏洞,从而导致SELinux拒绝访问。
另外,SELinux规则会不断演变-SELinux可能没有了解某个应用程序会以某种特定方式运行,因此即使应用程序按预期工作,也有可能出现拒绝访问的问题。
例如,当一个PostgreSQL的新版本发布后,它可能会执行一些当前策略无法处理的操作,从而导致访问被拒绝,即使应该允许访问。
对于这种情况,在访问被拒绝后,使用audit2allow工具创建自定义策略模块来允许访问。
您可以在RedHatBugzilla中报告SELinux策略中缺少的规则。
对于RedHatEnterpriseLinux8,针对RedHatEnterpriseLinux8产品创建程序漏洞,并选择selinux-policy组件。
在此类程序漏洞报告中包含audit2allow-w-a和audit2allow-a命令的输出。
如果应用程序请求主要的安全特权,这可能代表,应用程序可能已被破坏。
使用入侵检测工具检查此类行为。
红帽客户门户网站中的SolutionEngine也以文章的形式提供了相关的指导信息。
它包括了您遇到的相同或非常类似的问题的解决方案。
选择相关的产品和版本,并使用与SELinux相关的关键字,如selinux或avc,以及您被阻断的服务或应用程序的名称,例如:selinuxsamba。
5.4.审计日志中的SELINUX拒绝 Linux审计系统默认在/var/log/audit/audit.log文件中存储日志条目。
要只列出与SELinux相关的记录,请使用将messagetype参数设置为AVC和AVC_USER的ausearch命令,例如: #ausearch-mAVC,USER_AVC,SELINUX_ERR,USER_SELINUX_ERR 审计日志文件中的SELinux拒绝条目类似如下: type=AVCmsg=audit(1395177286.929:1638):avc:denied{read}forpid=m="httpd"name="webpages"dev="0:37"ino=2112scontext=system_u:system_r:httpd_t:s0tcontext=system_u:object_r:nfs_t:s0tclass=dir 32 第5章故障排除与SELINUX相关的问题 这个条目最重要的部分是:avc:denied-SELinux执行的操作,并在AVC中记录{read}-被拒绝的操作pid=6591-试图执行被拒绝操作的主体的进程识别符m="httpd"-用于调用分析进程的命令名称httpd_t-进程的SELinux类型nfs_t-受进程操作影响的对象的SELinux类型tclass=dir-目标对象类 以前的日志条目可转换为:SELinux拒绝了PID为6591、类型为httpd_t的httpd进程从nfs_t类型的目录中读取。
当ApacheHTTP服务器试图访问使用Samba套件类型标记的目录时,会出现以下SELinux拒绝信息: type=AVCmsg=audit(1226874073.147:96):avc:denied{getattr}forpid=m="httpd"path="/var/www/html/file1"dev=dm-0ino=284133scontext=unconfined_u:system_r:httpd_t:s0tcontext=unconfined_u:object_r:samba_share_t:s0tclass=file {getattr}-getattr条目表示源进程正在尝试读取目标文件的状态信息。
这在读取文件前发生。
SELinux会拒绝这个操作,因为进程会访问该文件,且没有适当的标签。
通常的权限包括getattr、read和write。
path="/var/www/html/file1"-该进程试图访问的对象(目标)的路径。
scontext="unconfined_u:system_r:httpd_t:s0"-试图拒绝动作的进程(源)的SELinux上下文。
在这个示例中,它是ApacheHTTP服务器的SELinux上下文,它使用httpd_t类型运行。
tcontext="unconfined_u:object_r:samba_share_t:s0"-试图访问的进程的对象(目标)的SELinux上下文。
在这个示例中,它是file1的SELinux上下文。
这个SELinux拒绝信息可以被解释为:SELinux拒绝了PID为2465的httpd进程访问带有samba_share_t类型的/var/www/html/file1文件。
除非有其他配置,在httpd_t域中运行的进程无法访问该文件。
其它资源auditd
(8)和ausearch(8)manpage 5.5.其它资源 CLI中基本SELinux故障排除SELinux尝试告诉我什么?SELinux错误的4个关键原因 33 RedHatEnterpriseLinux8使用SELinux 第6章使用多级别安全(MLS) 多级别安全(Multi-LevelSecurity,简称MLS)策略使用许可级别的概念,这个概念首先由美国国防人员设计。
MLS根据严格控制的环境(如军事)中的信息管理,满足一组非常宽松的安全要求。
使用MLS比较复杂,且无法很好地映射到一般用例情景。
6.1.多级别安全(MLS) 多级别安全(MLS)技术使用信息安全级别将数据分类为分级分类,例如:[Low]非保密[low]保密[high]机密[Highest]顶端机密 默认情况下,MongoSSELinux策略使用16个敏感级别:s0是最不安全的。
s15是最为敏感. 在MLS中:用户和进程称为主体,其敏感度级别称为许可级别。
文件、设备和其他系统的被动组件称为对象,其敏感度级别称为分类。
为实施MLS,SELinux使用Bell-LaPadulaModel(BLP)模型。
这个模型根据附加到每个主体和对象的标签指定系统中如何进行信息流。
BLP的基本原理是"无读取,没有写操作"。
这意味着用户只能读取自己敏感级别和较低级别的文件,数据只能从较低级别传输到更高的级别,且永远不会相反。
MLSSELinux策略(即在RHEL上实施MLS)中,我们应用了一个名为Bell-LaPadula且具有写入相等性的已修改原则。
这意味着用户可以在自己的敏感级别和较低级别读取文件,但只能自己写入。
例如,这可防止低克隆用户将内容写入到-secret文件中。
MLS环境中的非特权用户的安全上下文为: user_u:user_r:user_t:s1 其中: user_u是SELinux用户。
user_r是SELinux角色。
user_t是SELinux类型。
s1 34 第6章使用多级别安全(MLS) 是MLS敏感度级别。
系统始终将MLS访问规则与传统的文件访问权限相结合。
例如,如果安全性级别为"Secret"的用户使用DiscretionaryessControl(DAC)来阻止其他用户对文件的访问,即使"TopSecret"用户无法访问该文件。
高安全许可不会自动允许用户浏览整个文件系统。
拥有顶级别的用户不会自动获得多级系统的管理权限。
虽然他们可能有权访问系统上的所有敏感信息,但这与具有管理权限不同。
此外,管理权限不提供对敏感信息的访问。
例如,即使有人作为root登录,他们仍然无法读取顶级信息。
您可以使用类别进一步调整MLS系统中的访问。
使用多类别安全性(MCS),您可以定义类别(如项目或部门),用户只能访问所分配的类别中的文件。
6.2.MLS中的SELINUX角色 SELinux策略将每个Linux用户映射到SELinux用户。
这允许Linux用户继承SELinux用户的限制。
重要MLS策略不包含unconfined模块,包括未限制的用户、类型和角色。
因此,不受限制的用户(包括root)无法访问每个对象,并在目标策略中执行每个操作。
您可以通过调整策略中的布尔值,根据特定需求调整SELinux策略中受限用户的权限。
您可以使用semanageboolean-l命令确定这些布尔值的当前状态。
表6.1.MLS中的SELinux用户角色 用户 默认角色 其他角色 guest_uxguest_uuser_ustaff_u sysadm_uroot guest_rxguest_ruser_rstaff_r sysadm_rstaff_r auditadm_rsecadm_rsysadm_rsystem_r auditadm_rsecadm_r 35 RedHatEnterpriseLinux8使用SELinux 用户system_u 默认角色system_r 其他角色sysadm_rsystem_r 每个SELinux角色对应于SELinux类型并提供特定的访问权限。
表6.2.MLS中的SELinux角色的类型和访问权限 角色 类型 X窗口系统 su和sudo guest_r guest_t 否 否 xguest_r xguest_t 是 否 user_r user_t 是 staff_r staff_t 是 auditadm_r
auditadm_t secadm_r secadm_t sysadm_r sysadm_t 否仅sudo是是是 在主目录和/tmp中执行(默认)是是 是是是是是 网络 否仅Web浏览器(Firefox、GNOMEWeb)是是是是是 此外,非登录角色dbadm_r、logadm_r和webadm_r可用于管理任务的子集。
默认情况下,这些角色不与任何SELinux用户关联。
6.3.将SELINUX策略切换到MLS 使用以下步骤将SELinux策略从targeted切换到多级别安全(MLS)。
重要 红帽不推荐在运行X窗口系统的系统中使用MLS策略。
另外,当您使用MLS标签重新标记文件系统时,系统可能会阻止受限制的域访问,这会阻止您的系统正确启动。
因此请确定您在重新标记文件前将SELinux切换到permissive模式。
在大多数系统中,您会看到在切换到MLS后出现了很多SELinux拒绝信息,且其中很多都不容易修复。
流程 36 第6章使用多级别安全(MLS)
1.安装selinux-policy-mls软件包:#yuminstallselinux-policy-mls
2.在您选择的文本编辑器中打开/etc/selinux/config文件,例如:#vi/etc/selinux/config
3.将SELinux模式从enforcing改为permissive,并从targeted策略切换到MLS:SELINUX=permissiveSELINUXTYPE=mls 保存更改,退出编辑器。

4.在启用MLS策略前,您必须使用MLS标签重新标记文件系统中的每个文件: #fixfiles-FonbootSystemwillrelabelonnextboot5.重启系统:#reboot6.检查SELinux拒绝信息:#ausearch-mAVC,USER_AVC,SELINUX_ERR,USER_SELINUX_ERR-tsrecent-i因为前面的命令没有涵盖所有情况,请参阅SELinux故障排除中有关识别、分析以及修复SELinux拒绝的指导。

7.在确定您的系统中没有与SELinux相关的问题后,通过更改/etc/selinux/config中的对应选项将SELinux切换回enforcing模式:SELINUX=enforcing8.重启系统:#reboot 重要如果您的系统没有启动,或者您无法在切换到MLS后登录,请将enforcing=0参数添加到内核命令行中。
如需更多信息,请参阅在引导时更改SELinux模式。
另请注意,在MLS中,作为root通过SSH登录的用户会被映射到sysadm_rSELinux角色,它与作为staff_r中的root进行登录不同。
在您首次使用MLS启动系统前,请考虑通过将ssh_sysadm_loginSELinux布尔值设置为1来允许作为sysadm_r进行SSH登录。
要在以后才启用ssh_sysadm_login(已使用MLS),您必须以staff_r中的root身份登录,使用newrole-rsysadm_r命令切换到sysadm_r中的root,然后将布尔值设置为
1。
37 RedHatEnterpriseLinux8使用SELinux 验证
1.验证SELinux是否在enforcing模式下运行: #getenforceEnforcing
2.检查SELinux的状态是否返回mls值: #sestatus|grepmls Loadedpolicyname: mls 其它资源fixfiles
(8)、setsebool
(8)和ssh_selinux(8)manpage。
6.4.在MLS中建立用户许可 将SELinux策略切换到MLS后,必须通过将SELinux策略映射到受限SELinux用户,为用户分配安全级别。
具有给定安全机制的用户: 无法读取敏感度较高的对象。
不能写入较低敏感度级别的对象。
可以在较低敏感度级别修改对象,但这会将对象的分类级别提高到用户的许可级别。
先决条件SELinux策略被设置为mls。
SELinux模式被设置为enforcing。
已安装policycoreutils-python-utils软件包。
分配给SELinux受限用户的用户:对于非特权用户,分配至user_u。
对于特权用户,分配给staff_u。
注意确保MLS策略处于活动状态时已创建用户:其他SELinux策略中创建的用户无法在MLS中使用。
流程
1.可选:要防止在SELinux策略中添加错误,切换到permissiveSELinux模式,这有助于进行故障排除: #setenforce0 重要 38 第6章使用多级别安全(MLS) 重要 在permissive模式中,SELinux不会强制执行活跃策略,而仅记录essVectorCache(AVC)消息,这些信息随后可用于故障排除和调试。

2.为staff_uSELinux用户定义许可范围。
例如,这个命令设置从s1到s15的竞争范围,s1是默认的级别: #semanageuser-m-Ls1-rs1-s15staff_u
3.为用户主目录生成SELinux文件上下文配置条目: #genhomedircon
4.默认恢复文件安全上下文: #restorecon-R-F-v/home/Relabeled/home/stafffromstaff_u:object_r:user_home_dir_t:s0tostaff_u:object_r:user_home_dir_t:s1Relabeled/home/staff/.bash_logoutfromstaff_u:object_r:user_home_t:s0tostaff_u:object_r:user_home_t:s1Relabeled/home/staff/.bash_profilefromstaff_u:object_r:user_home_t:s0tostaff_u:object_r:user_home_t:s1Relabeled/home/staff/.bashrcfromstaff_u:object_r:user_home_t:s0tostaff_u:object_r:user_home_t:s1
5.为用户分配授权级别: #semanagelogin-m-rs1example_user 其中s1是分配给用户的授权级别。

6.将用户的主目录重新标记到用户的授权级别: #chcon-R-ls1/home/example_user
7.可选:如果您之前切换到permissiveSELinux模式,并在验证所有功能都按预期工作后,请切换回enforcingSELinux模式: #setenforce1 验证步骤
1.验证用户是否已映射到正确的SELinux用户,并分配了正确的授权级别: #semanagelogin-lLoginNameSELinuxUser__default__user_uexample_useruser_u... MLS/MCSRange s0-s0 * s1 * Service
2.在MLS中以用户身份登录。
39 RedHatEnterpriseLinux8使用SELinux
3.验证用户的安全级别是否正常工作: 重要 您用于验证的文件不应包含任何敏感信息,如果配置不正确,用户实际上无需授权即可访问这些文件。
a.验证用户无法读取具有更高级别敏感度的文件。
b.尝试写入到具有较低级别敏感度的文件。
这应该将文件的分类级别提高到用户的对应级别。
c.验证用户是否可以读取具有较低级别敏感度的文件。
其它资源第6.3节“将SELinux策略切换到MLS”.第3.4节“以SELinux限制的用户身份添加新用户”.第2章更改SELinux状态和模式.第5章故障排除与SELinux相关的问题.CLI知识库中的基本SELinux故障排除文章。
6.5.在MLS中更改文件敏感度 在MLSSELinux策略中,用户只能在自己的敏感度级别修改文件。
这是为了防止任何高度敏感的信息接触较低水平的用户,同时防止低保留性用户创建高敏感文件。
不过,管理员可以手动增加文件的分类,例如,要在更高级别处理的文件。
先决条件SELinux策略被设置为mls。
SELinux模式设置为强制模式。
您有安全管理权限,这意味着您被分配给以下任一权限:secadm_r角色。
如果启用了sysadm_secadm模块,则使用sysadm_r角色。
sysadm_secadm模块默认启用。
已安装policycoreutils-python-utils软件包。
分配给任何许可级别的用户。
如需更多信息,请参阅 第6.4节“在MLS中建立用户许可”.+在这个示例中,User1具有法定级别s1。
*分配有分类级别的文件,并可访问该文件。
+在这个示例中,/path/to/file具有分类级别s1。
流程 40 第6章使用多级别安全(MLS)
1.检查文件的分类级别:#ls-lZfile-rw-r-----.1User1User1user_u:object_r:user_home_t:s1012.Feb10:43/path/to/file
2.更改文件的默认分类级别:#semanagefcontext-a-rs2/path/to/file
3.强制重新标记文件的SELinux上下文:#restorecon-F-v/path/to/fileRelabeled/path/to/filefromroot:object_r:user_home_t:s0touser_u:object_r:user_home_t:s2 验证
1.检查文件的分类级别:#ls-lZfile-rw-r-----.1User1User1user_u:object_r:user_home_t:s2012.Feb10:53/path/to/file2.可选:验证低clearance用户无法读取该文件:$cat/path/to/filecat:file:Permissiondenied 其它资源第6.4节“在MLS中建立用户许可”. 41 RedHatEnterpriseLinux8使用SELinux 第7章编写自定义SELINUX策略 本节介绍了如何编写和使用可让您运行受SELinux限制的应用程序的自定义策略。
7.1.自定义SELINUX策略和相关工具 SELinux安全策略是SELinux规则的集合。
策略是SELinux的核心组件,它由SELinux用户空间工具载入内核。
内核强制使用SELinux策略来评估系统中的访问请求。
默认情况下,SELinux拒绝所有请求,但与载入策略中指定的规则对应的请求除外。
每个SELinux策略规则都描述了进程和系统资源间的交互: ALLOWapache_processapache_log:FILEREAD; 您可以阅读这个示例规则:Apache进程可读取它的日志文件。
在此规则中,apache_process和apache_log是labels。
SELinux安全策略为进程分配标签并定义与系统资源的关系。
这样,策略可将操作系统实体映射到SELinux层。
SELinux标签作为文件系统的扩展属性保存,如ext2。
您可以使用getfattr实用程序或ls-Z命令列出它们,例如: $ls-Z/etc/passwdsystem_u:object_r:passwd_file_t:s0/etc/passwd 其中system_u是SELinux用户,object_r是SELinux角色的示例,passwd_file_t是SELinux域。
selinux-policy软件包提供的默认SELinux策略包含作为RedHatEnterpriseLinux8一部分且由软件仓库中软件包提供的应用程序和守护进程规则。
没有被这个发布策略中的规则描述的应用程序不会被SELinux限制。
要更改它,您必须使用包含额外定义和规则的policy模块来修改策略。
在RedHatEnterpriseLinux8中,您可以查询安装的SELinux策略并使用sepolicy工具生成新策略模块。
sepolicy生成的脚步和策略模块始终包含一个使用restorecon工具的命令。
这个工具是修复文件系统中所选部分问题的基本工具。
其它资源sepolicy
(8)和getfattr(1)manpage 7.2.为自定义应用程序创建并强制SELINUX策略 这个示例步骤提供了通过SELinux保护简单守护进程的步骤。
将守护进程替换为您自定义应用程序,并根据应用程序和安全策略的要求修改示例中的规则。
先决条件policycoreutils-devel软件包及其依赖软件包会安装在您的系统中。
流程
1.在本例中,准备一个简单的守护进程,它打开/var/log/messages文件进行写操作:a.创建一个新文件,然后在您选择的文本编辑器中打开: 42 第7章编写自定义SELINUX策略 $vimydaemon.c b.插入以下代码: #include#include FILE*f; intmain(void){while
(1){f=fopen("/var/log/messages","w"); sleep
(5);fclose(f);}} c.编译文件:$-omydaemonmydaemon.c d.为您的守护进程创建一个systemd单元文件: $vimydaemon.service[Unit]Description=Simpletestingdaemon [Service]Type=simpleExecStart=/usr/local/bin/mydaemon [Install]WantedBy=multi-user.target e.安装并启动守护进程: #cpmydaemon/usr/local/bin/#cpmydaemon.service/usr/lib/systemd/system#systemctlstartmydaemon#systemctlstatusmydaemon●mydaemon.service-Simpletestingdaemon Loaded:loaded(/usr/lib/systemd/system/mydaemon.service;disabled;disabled) Active:active(running)sinceSat2020-05-2316:56:01CEST;19sagoMainPID:4117(mydaemon) Tasks:1Memory:148.0KCGroup:/system.slice/mydaemon.service └─4117/usr/local/bin/mydaemon vendor preset: May2316:56:01localhost.localdomainsystemd[1]:StartedSimpletestingdaemon. f.检查新守护进程是否没有被SELinux限制: 43 RedHatEnterpriseLinux8使用SELinux $ps-efZ|grepmydaemonsystem_u:system_r:unconfined_service_t:s0root4117/usr/local/bin/mydaemon 1016:56?
00:00:00
2.为守护进程生成自定义策略: $sepolicygenerate--init/usr/local/bin/mydaemonCreatedthefollowingfiles:/home/example.user/mysepol/mydaemon.te#TypeEnforcementfile/home/example.user/mysepol/mydaemon.if#Interfacefile/home/example.user/mysepol/mydaemon.fc#FileContextsfile/home/example.user/mysepol/mydaemon_selinux.spec#Specfile/home/example.user/mysepol/mydaemon.sh#SetupScript
3.使用上一命令创建的设置脚本使用新策略模块重建系统策略: #./mydaemon.shBuildingandLoadingPolicy+make-f/usr/share/selinux/devel/Makefilemydaemon.ppCompilingtargetedmydaemonmoduleCreatingtargetedmydaemon.pppolicypackagermtmp/mydaemon.mod.fctmp/mydaemon.mod+/usr/sbin/semodule-imydaemon.pp... 请注意,设置脚本使用restorecon命令重新标记文件系统的对应部分: restorecon-v/usr/local/bin/mydaemon/usr/lib/systemd/system
4.重启守护进程,检查它现在被SELinux限制: #systemctlrestartmydaemon$ps-efZ|grepmydaemonsystem_u:system_r:mydaemon_t:s0root/usr/local/bin/mydaemon 8150 1017:18?
00:00:00
5.因为守护进程现在被SELinux限制,所以SELinux也会阻止它访问/var/log/messages。
显示对应的拒绝信息: #ausearch-mAVC-tsrecent...type=AVCmsg=audit(1590247112.719:5935):avc:denied{open}forpid=m="mydaemon"path="/var/log/messages"dev="dm-0"ino=2430831scontext=system_u:system_r:mydaemon_t:s0tcontext=unconfined_u:object_r:var_log_t:s0

标签: #苹果 #文件 #压缩文件 #文件转换成 #机上 #文件 #华为 #电子版